이전 포스트에서 W 값의 변화에 따른 손실함수 ( Loss Function )의 기울기를 구하고, 그에 따라 손실함수를 Minimize 하는 W 를 찾는 법을 보았습니다. 사실 쫌 더 구체적으로 설명하자면 손실함수를 구하고, 그 손실함수의기울기를 구하는데 있어 ( 미분값을 구하는데 있어 or Gradient 값을 구하는데 있어 ) 수치 미분법을 이용해서 손실함수를 최소화 시키는 방법을 알아보았습니다. 그럼 이번에는 "오차역전파법". 그 유명한 BackPropagation 을 통해 손실함수를 최소화 시키는 W 를 어떻게 찾아보는지 한번 보도록 하겠습니다.
이 글에서는 backpropagation 의 역사, 기존에 있었던 문제들( Layer 를 깊게 쌓았을 때 역전파가 안되었던건 현상들... ) 에 대해서는 다루지 않을 것이다.
ㅁ Backpropagation 을 통한 Weight 업데이트
- 이전 포스트를 참조해 보면 Weight 의 순서는 다음과 같다.
- 미니배치
- 기울기 산출
- 매개변수 갱신
- 1,2,3 반복
- 여기서 2번의 기울기 산출을 하는데 있어 Backpropagation 은 다음과 같은 순서로 진행된다.
- Forward Propagation
- Back Propagation
- Update Weight
책에서는 계산 그래프 (computational graph ) 로 설명하는데... 난 개인적으로 수식이 더 쉽더라 +_+;; 위에 수식을 보면 E(손실값) 을 MSE 로 구했는데 결국 손실함수의 미분값은 우측의 값처럼 된다는 것이다.
그럼 위에서 설명한 순서와 매칭해서 설명해보면
- Forward Propagation 을 통해 E(손실함수) 의 수식을 구한다.
- 수식에 의한 미분 값( Gradient )을 구한다.
- 이 값에 따라 Weight 매개변수를 수정한다.
이게 이전 포스트에서 설명한 수치 미분과 가장 큰 차이점은 2번의 미분 값 ( Gradient )을 구할 때 수식을 통해서 바로 구했다는 것이다. 즉, 도함수의 미분을 통해 Gradient 를 계산하는 것보다. 수식의 Backpropagation 을 통해 미분값을 계산하는게 훨~~~~~~~씬 빠르다는 것이다.
chain rule
- y = f(x)
- z = g(y)
- z = g( f(x) )
로 표현이 가능하다. 그리고 미분을 하면
- dz / dx = dz / dy * dy / dx = g'(y) * f'(x)
이처럼 f 와 g 의 도함수가 chain 처럼 연결된다는 거다. 근데 이 rule 이 어떻게 쓰이냐면
아래와 같은 Neuron Net 이 있다고 하자.
w35 의 편미분 값을 구해보면
∂E∂w35=∂E∂outo5∗∂outo5∂ino5∗∂ino5∂w35.
∂E∂w35 는 세 값을 모두 곱한 것으로 계산 할 수 있다.
그럼 이제 w13 의 편미분을 구해보자
'Deep Learning' 카테고리의 다른 글
4. RNN (0) | 2017.05.30 |
---|---|
3. CNN (0) | 2017.05.26 |
2. 학습관련 기술들 (0) | 2017.05.14 |
0. 딥러닝 기초지식 (0) | 2017.05.12 |