Gradient Checking
Backprogation Algorithm은 구현이 다소 복잡하고 여러 방법으로 구현 할 수 있기 때문에
subtle bug를 찾기가 어렵다.
이것을 디버그하기 위한 아이디어가Gradient Checking
이다.
모든 복잡한 Nueral Network Algorithm을 개발할 때 사용 할 수 있다.
위 그림에서 파란색은 실제 미분 했을 때 구해지는 접선의 기울기이다.
해당 값은 epsilon
을 이용해서 approximation
할 수 있다.
빨간색과 같이 slope
를 approximation하면 꽤 근사하게 구해지는 것을 알 수 있다.
추가로 위 그림에서 파란색 수식은 epsilon
을 한번만 사용한 one sided difference
이다.
이것 보다 빨간색 수식으로 epsilon
을 두번 사용한 것이 더 정확하게 estimation
할 수 있다.
So these equations give you a way to numerically approximate the partial derivative of $J$ with respect to any one of your parameters $\theta_i$.
결국 back-propagation을 통해서 DVec
을 구하게 된다.
그리고 우리가 대략적으로 구한 gradApprox
랑 비교하게 된다.
Backpropagation
is a relatively efficient way to compute a derivative or a partial derivative of a cost function wrt to all our parameters.
이것을 통해서 구현이 정상적으로 이뤄 졌는지를 알 수 있다.
마지막으로 요점을 정리하면 아래와 같다.
Implementation Notes
- Implement backpropagation to compute
DVec
(unrolled $D^{(1)}$, $D^{(2)}$, $D^{(3)}$). - Implement numerical gradient check to compute
gradApprox
. - Make sure they give similar values.
- Turn off gradient checking. Using backpropacation code for learning.
이 부분이 가장 중요한데,
gradient checking
은 computationally 굉장히 expensive 하기 때문에 학습할 때는 반드시 꺼야 한다. 당연한 말이지만 그래서 1960년대 nueral network 자체가 죽은것이다.
이것을 해결한 알고리즘이Backpropagation
이기 때문이다. 딱 한번 구현 확인 용도로만 쓰자.- Implement backpropagation to compute
'MOOC > Machine Learning (python)' 카테고리의 다른 글
Putting it together (0) | 2016.10.12 |
---|---|
Random Initialization (0) | 2016.09.19 |
Neural Networks Learning: Implementation note unrolling (0) | 2016.07.22 |
Neural Networks_Learning_3: Backpropagation Intuition (0) | 2016.07.22 |
Week04: Programming Exercise 3: Multi-class classification and Neural Networks (0) | 2016.07.14 |