일차 함수인 경우 아래 식과 같이 함수을 미분하여 계산한다. 이렇게 수치적으로 경사를 구하는 방법을 Numerical Gradient라고 한다.
맨 왼쪽이 현재의 Weight 값이고 아래에는 Loss 값이 나타나있다. 를 0.0001으로 설정한 후 Gradient를 구하기위해 위의 수식을 이용한 결과는 맨 오른쪽과 같다. -2.5라는 Gradient 값을 확인 할 수 있는데 이 때 기울기가 음수라는 것은 Loss에 음의 영향을 준다는 것을 확인 할 수 있다.
Numerical Gradient의 경우 Debugging 하기 좋다는 장점이 있지만 이렇게 하나의 값들을 일일이 계산하면 부정확하고 매우 오래걸릴 것이다.
이러한 단점을 해결하기 위해 미분식을 이용하여 Gradient 값을 한번에 얻는 방법을 Analytic Gradient라고 한다.
Analytic Gradient은 빠르고 간편하지만 코드 작성시 에러가 발생하기 쉽기 때문에 검토과정에서 Numerical Gradient 방법을 활용하여 Gradient Check를 실시한다.
# 미분 이용한 경사하강법 (Analytic Gradient)
while True:
weights_grad = evaluate_gradient(loss_fun, data, weights)
weights += - step_size * weights_grad # 파라미터 업데이트
Python
복사