μ κ²½λ§μμμ κ²½μ¬νκ°λ² ꡬν
μ κ²½λ§μ νμ΅ μμ μ΅μ μ λ§€κ°λ³μ(κ°μ€μΉμ νΈν₯)μ μ°Ύμλ λλ€. μ¬κΈ°μ μ΅μ μ΄λ μμ€ ν¨μκ° μ΅μκ°μ΄ λ λ λ§€κ°λ³μμ κ°μ λλ€. κ·Έλ¬λ λ§€κ°λ³μ 곡κ°μ κ΄λνμ¬ μ΄λκ° μ΅μκ°μΈμ§ μ°ΎκΈ° νλλλ€. μ΄λ° μν©μμ κΈ°μΈκΈ°λ₯Ό μ μ΄μ©ν΄ ν¨μμ μ΅μκ° νΉμ κ°μ₯ κ·Όμ ν κ°μ ν¨μ κ°μ μ μ°¨ μ€μμΌλ‘μ¨ μ°ΎμΌλ €κ³ νλ κ²μ΄ κ²½μ¬λ²μ λλ€.
η(μν)λ μ κ²½λ§μμ νμ΅λ₯ μ λλ€. νμ΅λ₯ μ ν λ²μ νμ΅μΌλ‘ μΌλ§νΌ νμ΅ν΄μΌ ν μ§, μ¦, λ§€κ°λ³μλ₯Ό μΌλ§λ€ μ λ°μ΄νΈν μ§ μ νλ κ²μ λλ€. μ μμ²λΌ λ³μκ°μ κ°±μ νλ λ¨κ³λ₯Ό μ¬λ¬λ² κ±°μΉλ©° μμν ν¨μμ κ°μ μ€μ λλ€. νμ΅λ₯ μ 0.01,0.001κ³Ό κ°γ μ΄ νΉμ κ°μ μ ν΄μΌν©λλ€. λ무 ν¬κ±°λ μμΌλ©΄ μ’μ μ₯μλ₯Ό μ°Ύμκ° μ μμ΅λλ€. 보ν΅μ μ΄ νμ΅λ₯ μ λ³κ²½νλ©΄μ μ¬λ°λ₯΄κ² νμ΅νκ³ μλμ§ νμΈνλ©΄μ μ§νν©λλ€.
def gradient_descent(f, init_x, lr=0.01, step_num=100):
x = init_x
for i in range(step_num):
grad = numerical_gradient(f,x)
return x
fλ μ΅μ ννλ €λ ν¨μ, step_numμ κ²½μ¬λ²μ λ°λ₯Έ λ°λ³΅ νμ μ λλ€. ν¨μμ κΈ°μΈκΈ°λ numerical_gradientλ‘ κ΅¬νκ³ , κ·Έ κΈ°μΈκΈ°μ νμ΅λ₯ μ κ³±ν κ°μΌλ‘ μ λ°μ΄νΈλΌλ κ³Όμ μ step_numλ§νΌ λ°λ³΅ν©λλ€.
νμ΅λ₯ κ°μ λ§€κ°λ³μλ₯Ό νμ΄νΌνλΌλ―Έν°λΌκ³ ν©λλ€. μ΄λ κ°μ€μΉ, νΈν₯κ³Όκ°μ μ κ²½λ§μ λ§€κ°λ³μλ‘Έλ μ±μ§μ΄ λ€λ₯Έ λ³μμ λλ€. μ κ²½λ§μ κ°μ€μΉλ νλ ¨λ°μ΄ν°μ μκ³ λ¦¬μ¦μ μν΄ μλμΌλ‘ νλλλ λ§€κ°λ³μμΈ λ°λ©΄, νμ΄νΌνλΌλ―Έν°λ μ¬λμ΄ μ§μ μ€μ ν΄μΌνλ λ³μμ λλ€. μΌλ°μ μΌλ‘ μ΄ νμ΄νΌνλΌλ―Έν°λ€μ μ¬λ¬ ν보 κ° μ€μμ μνμ ν΅ν΄ κ°μ₯ μ νμ΅μ΄ λλ κ°μ μ°Ύλ κ³Όμ μ νμλ‘ ν©λλ€.