-
[AI] μ κ²½λ§ νμ΅(λ°λ°λ₯λΆν° μμνλ λ₯λ¬λ)π»Programming/AI 2023. 12. 18. 20:23
μ κ²½λ§μ κ°μ€μΉ 맀κ°λ³μμ κ°μ λ°μ΄ν°λ₯Ό λ³΄κ³ μλμΌλ‘ κ²°μ νλ€. μμ£Ό ν° μ₯μ μ΄λ€.
π λ°μ΄ν° μ£Όλ νμ΅
νμ΅: νλ ¨ λ°μ΄ν°λ‘λΆν° κ°μ€μΉ 맀κ°λ³μμ μ΅μ κ°μ μλμΌλ‘ νλνλ κ²
κΈ°κ³νμ΅
1. λ°μ΄ν°μμ λ΅μ μ°Ύκ³ λ°μ΄ν°μμ ν¨ν΄μ λ°κ²¬νκ³ λ°μ΄ν°λ‘ μ΄μΌκΈ°λ₯Ό λ§λ¦
2. μ¬λμ κ°μ μ μ΅μννκ³ μμ§ν λ°μ΄ν°λ‘λΆν° ν¨ν΄μ μ°ΎμΌλ € μλ
π μ’ λ¨κ° κΈ°κ³νμ΅(end-to-end machine learning)
κΈ°κ³νμ΅: λ°μ΄ν°μ νΉμ§μ 벑ν°λ‘ λ³ννλ κ²μ 'μ¬λμ΄' μ€κ³
λ₯λ¬λ: λ°μ΄ν° μ λ ₯μμ λͺ©νν κ²°κ³Όλ₯Ό μ¬λμ κ°μ μμ΄ μ»μ.
λ λ²μ§Έ μ κ·Ό λ°©μμμλ μ¬λμ΄ νΉμ§μ μ¬λμ΄ μ€κ³νμ§λ§, μ κ²½λ§μ μ΄λ―Έμ§μ ν¬ν¨λ μ€μν νΉμ§κΉμ§λ 'κΈ°κ³'κ° μ€μ€λ‘ νμ΅ν κ²μ΄λ€.
μ΄λ κ² λ₯λ¬λμ μ²μλΆν° λκΉμ§ λ°μ΄ν°(μ λ ₯)μμ λͺ©νν κ²°κ³Ό(μΆλ ₯)μ μ¬λμ κ°μ μμ΄ μ»μ μ μλ€λ μ μμ μ²μλΆν° λκΉμ§λΌλ μλ―Έλ₯Ό κ°μ§ μ’ λ¨κ° κΈ°κ³νμ΅μ΄λΌκ³ λ λΆλ¦°λ€.
π νλ ¨ λ°μ΄ν°μ μν λ°μ΄ν°
- νλ ¨ λ°μ΄ν°(trainig data): μ΅μ μ 맀κ°λ³μλ₯Ό νμνλλ° μ¬μ©
- μν λ°μ΄ν°(test data): νλ ¨ν λͺ¨λΈμ μ±λ₯μ νκ°νλλ° μ¬μ©
- μ νλ ¨ λ°μ΄ν°μ μν λ°μ΄ν°λ₯Ό λλλκ°?: λͺ¨λΈμ "λ²μ© λ₯λ ₯(=νλ ¨ λ°μ΄ν°κ° μλ λ°μ΄ν°λ‘λ λ¬Έμ λ₯Ό μ¬λ°λ₯΄κ² νμ΄λ΄λ λ₯λ ₯)"μ μ λλ‘ νκ°νκΈ° μν΄
- μ€λ²νΌν (overfitting): ν λ°μ΄ν°μ μλ§ μ§λμΉκ² μ΅μ νλ μν
μΌμͺ½μ κ³Όμ μ ν©(μΈλνΌν )μ μμμ΄κ³ , μ€λ₯Έμͺ½μ κ³Όλ μ ν©(μ€λ²νΌν )μ μμμ΄λ€.
π μμ€ ν¨μ(loss function)
μμ€ ν¨μλ μ κ²½λ§ μ±λ₯μ 'λμ¨'μ λνλ΄λ μ§νλ‘, νμ¬μ μ κ²½λ§μ΄ νλ ¨ λ°μ΄ν°λ₯Ό μΌλ§λ μ μ²λ¦¬νμ§ 'λͺ»νλλ'λ₯Ό κΈ°μ€μΌλ‘ νλ€.
νκ· μ κ³± μ€μ°¨μ κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨λ₯Ό μΌλ°μ μΌλ‘ μ¬μ©
π νκ· μ κ³± μ€μ°¨(Mean Squared Error, MSE)
β¨ νκ· μ κ³± μ€μ°¨ ꡬν
def mean_squared_error(y, t): return 0.5 * np.sum((y-t)**2)
β¨ μ-ν« μΈμ½λ©
λ°μ΄ν°λ₯Ό μ½κ² μ€λ³΅ μμ΄ ννν λ μ¬μ©νλ νμ
1. κ° λ¨μ΄μ κ³ μ ν μΈλ±μ€ λΆμ¬
2. νννκ³ μΆμ λ¨μ΄μ μΈλ±μ€ μμΉμ 1μ λΆμ¬, λ€λ₯Έ λ¨μ΄μ μΈλ±μ€ μμΉμλ 0μ λΆμ¬
λ¨μ : λ¨μ΄κ° λ§μΌλ©΄ μΈλ±μ€κ° κΈΈμ΄μ§λ€ / λΆνμν 곡κ°μ μ°¨μ§νλ κ²½μ°κ° λ§μμ§λ€.
π κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨(Cross Entropy Error, CEE)
yλ μ κ²½λ§μ μΆλ ₯, tλ μ λ΅ λ μ΄λΈλ‘ tλ μ λ΅μ ν΄λΉνλ μΈλ±μ€μ μμλ§ 1μ΄κ³ λλ¨Έμ§λ 0(μ-ν« μΈμ½λ©). κ·Έλμ μ΄ μμμ μ€μ§μ μΌλ‘ μ λ΅μΌ λμ μμ° λ‘κ·Έλ₯Ό κ³μ°νλ μμ΄ λλ€. κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨λ μ λ΅μΌ λμ μΆλ ₯μ΄ μ 체 κ°μ μ νκ² λλ€.
β¨ κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨μ ꡬν
def cross_entropy_error(y, t): delta = 1e-7 return -np.sum(t * np.log(y+delta))
π λ―Έλ λ°°μΉ νμ΅
κΈ°κ³νμ΅ λ¬Έμ λ νλ ¨ λ°μ΄ν°λ₯Ό μ¬μ©ν΄ νμ΅νλ€. ꡬ체μ μΌλ‘ λ§νλ©΄ νλ ¨ λ°μ΄ν°μ λν μμ€ ν¨μμ κ°μ ꡬνκ³ , κ·Έ κ°μ μ΅λν μ€μ¬μ£Όλ 맀κ°λ³μλ₯Ό μ°ΎμλΈλ€. μ΄λ κ² νκΈ° μν΄μ λͺ¨λ νλ ¨ λ°μ΄ν°λ₯Ό λμμΌλ‘ μμ€ ν¨μ κ°μ ꡬν΄μΌ νλ€.
μμ κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨λ₯Ό μ΄μ©νμ¬ λͺ¨λ νλ ¨ λ°μ΄ν°μ λν μμ€ν¨μμ κ°μ κ΅¬ν΄ νκ· μ λ΄λ μμμ΄λ€.
μ΄λ κ² λλ©΄ νλ ¨ λ°μ΄ν°κ° 1000κ°μ΄λμ§ 10000κ°μ΄λμ§ νκ· μμ€ ν¨μλ₯Ό ꡬν μ μλ€. νμ§λ§ μ€μ μ¬μ©λλ λΉ λ°μ΄ν°λ κ·Έ μλ μλ°±λ§μμ μμ²λ§μ΄ λλ κ±°λν κ°μ΄ λκΈ°λ νλλ°, μ΄ λ§μ λ°μ΄ν°λ₯Ό λμμΌλ‘ μΌμΌμ΄ μμ€ ν¨μλ₯Ό κ³μ°νλ κ²μ κ΅μ₯ν μ€λ μκ°μ΄ 걸릴 κ²μ΄λ€. κ·Έλμ λμ¨ κ°λ μ΄ λ―Έλλ°°μΉμ΄λ€.
β¨ λ―Έλ λ°°μΉ
λ°μ΄ν° μΌλΆλ₯Ό μΆλ € μ 체μ 'κ·Όμ¬μΉ'λ‘ μ΄μ©ν μ μλ€. μ΄ μΌλΆλ₯Ό 'λ―Έλλ°°μΉ'λΌκ³ νλ€. μλ₯Ό λ€μ΄ 60000μ₯μ νλ ¨ λ°μ΄ν° μ€μμ 100μ₯μ 무μμλ‘ λ½μ 100μ₯λ§μ μ¬μ©νμ¬ νμ΅νλ κ²μ λ―Έλλ°°μΉ νμ΅μ΄λΌκ³ νλ€.
β¨ (λ°°μΉμ©) κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨ ꡬννκΈ°
# μ λ΅ λ μ΄λΈμ΄ μ-ν« μΈμ½λ©μΈ κ²½μ° def cross_entropy_error(y, t): if y.ndim == 1: # yκ° 1μ°¨μμ΄λΌλ©΄, λ°μ΄ν° νλλΉ κ΅μ°¨ μνΈλ‘νΌ μ€μ°¨λ₯Ό ꡬνλ κ²½μ° reshape ν¨μλ‘ λ°μ΄ν°μ νμμ λ°κΏμ€ t = t.reshape(1, t.size) y = y.reshape(1, y.size) batch_size = y.shape[0] return -np.sum(t * np.log(y + 1e-7)) / batch_size # μ λ΅ λ μ΄λΈμ΄ μ«μ λ μ΄λΈλ‘ μ£Όμ΄μ§ κ²½μ° def cross_entropy_error(y, t): if y.ndim == 1: t = t.reshape(1, t.size) y = y.reshape(1, y.size) batch_size = y.shape[0] return -np.sum(np.log(y[np.arrange(batch_size), t] + 1e-7)) / batch_size
π μ μμ€ ν¨μλ₯Ό μ€μ νλκ°?
μ°λ¦¬μ λͺ©μ μ λμ "μ νλ"λ₯Ό λμ΄λ΄λ 맀κ°λ³μ κ°μ μ°Ύλ κ²μΈλ°, μ μ νλλΌλ μ§ν λμ μ μμ€ ν¨μμ κ°μ΄λΌλ μ§νλ₯Ό ννλ κ²μΌκΉ? -> μ κ²½λ§ νμ΅μμμ λ―ΈλΆμ μν μ μ£Όλͺ©
μ κ²½λ§ νμ΅μμλ μ΅μ μ 맀κ°λ³μλ₯Ό νμν λ μμ€ ν¨μμ κ°μ κ°λ₯ν μκ² νλ 맀κ°λ³μ κ°μ μ°Ύλλ€. μ΄ λ 맀κ°λ³μμ λ―ΈλΆκ°μ κ³μ°νκ³ , κ·Έ λ―ΈλΆκ°μ λ¨μλ‘ λ§€κ°λ³μλ₯Ό κ°±μ νλ κ³Όμ μ λ°λ³΅νλ€. λ§μ½ λ―ΈλΆκ°μ΄ μμμ΄λ©΄ κ·Έ 맀κ°λ³μλ₯Ό μμ λ°©ν₯μΌλ‘ λ³νμμΌ μμ€ ν¨μμ κ°μ μ€μΌ μ μλ€. λ°λλ‘ μμμ΄λ©΄ μμ λ°©ν₯μΌλ‘ λ³νμμΌ μμ€ν¨μμ κ°μ μ€μΌ μ μλ€. νμ§λ§ λ―ΈλΆκ°μ΄ 0μ΄λ©΄ κ°μ€μΉ 맀κ°λ³μλ₯Ό μ΄λμͺ½μΌλ‘ μμ§μ¬λ μμ€ν¨μμ κ°μ λ¬λΌμ§μ§ μκΈ° λλ¬Έμ κ°μ€μΉ 맀κ°λ³μμ κ°±μ μ κ±°κΈ°μ λ©μΆκ² λλ€.
μ νλλ₯Ό μ§νλ‘ μΌμΌλ©΄ μλλ μ΄μ λ λ―ΈλΆ κ°μ΄ λλΆλΆμ μ₯μμμ 0μ΄ λμ΄ λ§€κ°λ³μλ₯Ό κ°±μ ν μ μκΈ° λλ¬Έ.
μ νλκ° κ°μ λλ€κ³ νλλΌλ λΆμ°μμ μΈ κ°μΌλ‘ λ³ν¨.
μ: 100μ₯μ νλ ¨ λ°μ΄ν° μ€ 32μ₯μ λ§μΆ μ κ²½λ§μ΄ μλ€κ³ νλ€λ©΄, κ°μ€μΉλ₯Ό λ³κ²½ν΄ μ νλλ₯Ό λμ΄λλΌλ 34, 35%λ± λΆμ°μμ μΌλ‘ λ³ν¨. μμ€ν¨μμ κ²½μ° λ§€κ°λ³μκ° μ£Όλ μμ λ³νκ° μ£Όλ νμ₯μ μ‘μ μ μλ€.
π μμΉ λ―ΈλΆ
- μμΉ λ―ΈλΆ: ν¨μμ νΉμ μ μμμ κΈ°μΈκΈ°λ₯Ό κ·Όμ¬μ μΌλ‘ κ³μ°νλ λ°©λ²
- λ―ΈλΆ: 'νΉμ μκ°'μ λ³νλ
- μ€μ¬ μ°¨λΆ: xλ₯Ό μ€μ¬μΌλ‘ κ·Έ μ νμ μ°¨λΆ κ³μ° (x+h) - (x-h)
- μ λ°© μ°¨λΆ: (x+h) - (x)
- νΈλ―ΈλΆ: λ³μκ° μ¬λΏμΈ ν¨μμ λν λ―ΈλΆ
- κΈ°μΈκΈ°: λͺ¨λ λ³μμ νΈλ―ΈλΆμ 벑ν°λ‘ μ 리ν κ²
κΈ°μΈκΈ°κ° κ°λ¦¬ν€λ μͺ½μ κ° μ₯μμμ ν¨μμ μΆλ ₯κ°μ κ°μ₯ ν¬κ² μ€μ΄λ λ°©ν₯μ΄λ€.
π κ²½μ¬νκ°λ²(Gradient Descent Method)
맀κ°λ³μ 곡κ°μ΄ κ΄λνμ¬ μ΄λκ° μ΅μκ°μ΄ λλ κ³³μΈμ§ μ§μν μ μμ λ, "κΈ°μΈκΈ°"λ₯Ό μ΄μ©ν΄ μμ€ ν¨μμ μ΅μκ°μ μ°ΎμΌλ €λ κ²
β¨ νμ΅λ₯ (learning rate)
ν λ²μ νμ΅μΌλ‘ μΌλ§λ§νΌ νμ΅ν΄μΌ ν μ§, 맀κ°λ³μ κ°μ μΌλ§λ κ°±μ ν΄μΌ ν μ§λ₯Ό μ νλ κ²
λ무 ν¬λ©΄ ν° κ°μΌλ‘ λ°μ°νκ±°λ Oscillation(μ§λ)μ μννλ©° μλ ΄λμ§ μλλ€.
λ무 μμΌλ©΄, κ±°μ κ°±μ λμ§ μμ μ± μλ ΄μ΄ λλλ€.
β¨ νμ΄νΌνλΌλ―Έν°(hyper parameter)
νμ΅λ₯ κ³Ό κ°μ΄ μ¬λμ΄ μ§μ μ€μ ν΄μΌ νλ 맀κ°λ³μλ‘ μ€νμ μΌλ‘ λ°λ³΅μ ν΅ν΄ μ°ΎμλΈλ€.
μ΅μ (Optimization): μμ€ ν¨μ κ°μ΄ μ΅μκ°μ΄ λ λμ 맀κ°λ³μ κ°
π μ κ²½λ§μμμ κΈ°μΈκΈ°
κ°μ€μΉ 맀κ°λ³μμ λν μμ€ ν¨μμ κΈ°μΈκΈ°
κ°μ€μΉ 맀κ°λ³μμ νμκ³Ό κ°μ€μΉ 맀κ°λ³μμ λν μμ€ν¨μμ νμμ κ°λ€.
π νμ΅ μκ³ λ¦¬μ¦ κ΅¬ννκΈ°
β¨ μ μ
μ κ²½λ§μλ μ μ κ°λ₯ν κ°μ€μΉμ νΈν₯μ΄ μκ³ , μ΄ κ°μ€μΉμ νΈν₯μ νλ ¨ λ°μ΄ν°μ μ μ©νλλ‘ μ‘°μ νλ κ³Όμ μ 'νμ΅'μ΄λΌκ³ νλ€.
β¨ 1λ¨κ³: λ―Έλλ°°μΉ
νλ ¨ λ°μ΄ν° μ€ μΌλΆλ₯Ό 무μμλ‘ κ°μ Έμ΄. μ΄λ κ² μ λ³ν λ°μ΄ν°λ₯Ό λ―Έλλ°°μΉλΌ νλ©°, κ·Έ λ―Έλλ°°μΉμ μμ€ν¨μ κ°μ μ€μ΄λ κ²μ΄ λͺ©ν
β¨ 2λ¨κ³: κΈ°μΈκΈ° μ°μΆ
λ―Έλλ°°μΉμ μμ€ ν¨μ κ°μ μ€μ΄κΈ° μν΄ κ° κ°μ€μΉ 맀κ°λ³μμ κΈ°μΈκΈ°λ₯Ό ꡬν¨. κΈ°μΈκΈ°λ μμ€ ν¨μμ κ°μ κ°μ₯ μκ² νλ λ°©ν₯μ μ μν¨.
β¨ 3λ¨κ³: 맀κ°λ³μ κ°±μ
κ°μ€μΉ 맀κ°λ³μλ₯Ό κΈ°μΈκΈ° λ°©ν₯μΌλ‘ μμ£Ό μ‘°κΈ κ°±μ
β¨ 4λ¨κ³: 1~3λ¨κ³λ₯Ό λ°λ³΅
λͺ¨λ λ°μ΄ν°κ° μμ§λ λκΉμ§ λ°λ³΅μ μΌλ‘ λ―Έλλ°°μΉλ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ μ λ°μ΄νΈ
μ΄κ²μ΄ κ²½μ¬ νκ°λ²μΌλ‘ 맀κ°λ³μλ₯Ό κ°±μ νλ λ°©λ²μ΄λ©°, μ΄ λ λ°μ΄ν°λ₯Ό λ―Έλλ°°μΉλ‘ 무μμλ‘ μ μ νκΈ° λλ¬Έμ νλ₯ μ κ²½μ¬ νκ°λ²(Stochastic Gradient Descent, SGD)λΌκ³ λΆλ₯Έλ€. λλΆλΆμ λ₯λ¬λ νλ μμν¬λ νλ₯ μ κ²½μ¬ νκ°λ²μ 머리κΈμλ₯Ό λ΄ SGDλΌλ ν¨μλ‘ μ΄ κΈ°λ₯ ꡬν.
μν(epoch): νμ΅μμ νλ ¨ λ°μ΄ν°λ₯Ό λͺ¨λ μμ§νμ λμ νμ
λ―Έλλ°°μΉ νμ΅μμ λ°°μΉ ν¬κΈ°μ μνμ νμ΄νΌ νλΌλ―Έν°λ‘ μ€ μ μλ€.
μ: νλ ¨ λ°μ΄ν° 10000κ°λ₯Ό 100κ°μ λ―Έλλ°°μΉλ‘ νμ΅ν κ²½μ°, νλ₯ μ κ²½μ¬ νκ°λ²μ 100ν λ°λ³΅νλ©΄ λͺ¨λ νλ ¨ λ°μ΄ν°λ₯Ό μμ§νκ² λλ©°, μ΄ κ²½μ° 100νκ° 1 μνμ΄ λλ€.
π μ 리
1. κΈ°κ³νμ΅μμ μ¬μ©νλ λ°μ΄ν°μ μ νλ ¨ λ°μ΄ν°μ μν λ°μ΄ν°λ‘ λλ μ¬μ©
2. νλ ¨ λ°μ΄ν°λ‘ νμ΅ν λͺ¨λΈμ λ²μ© λ₯λ ₯μ μν λ°μ΄ν°λ‘ νκ°
3. μ κ²½λ§ νμ΅μ μμ€ ν¨μλ₯Ό μ§νλ‘, μμ€ ν¨μμ κ°μ΄ μμμ§λ λ°©ν₯μΌλ‘ κ°μ€μΉ 맀κ°λ³μλ₯Ό κ°±μ
4. κ°μ€μΉ 맀κ°λ³μλ₯Ό κ°±μ ν λλ κ°μ€μΉ 맀κ°λ³μμ κΈ°μΈκΈ°λ₯Ό μ΄μ©νκ³ , κΈ°μΈμ΄μ§ λ°©ν₯μΌλ‘ κ°μ€μΉμ κ°μ κ°±μ νλ μμ μ λ°λ³΅
5. μμ£Ό μμ κ°μ μ£Όμμ λμ μ°¨λΆμΌλ‘ λ―ΈλΆνλ κ²μ μμΉ λ―ΈλΆμ΄λΌ νκ³ , μμΉ λ―ΈλΆμ μ΄μ©ν΄ κ°μ€μΉ 맀κ°λ³μμ κΈ°μΈκΈ°λ₯Ό ꡬν μ μλ€.
'π»Programming > AI' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ