본문 바로가기

Deep Learning

1. 오차역전파법 ( Backpropagation )

이전 포스트에서 W 값의 변화에 따른 손실함수 ( Loss Function )의 기울기를 구하고, 그에 따라 손실함수를 Minimize 하는 W 를 찾는 법을 보았습니다. 사실 쫌 더 구체적으로 설명하자면 손실함수를 구하고, 그 손실함수의기울기를 구하는데 있어 ( 미분값을 구하는데 있어 or  Gradient 값을 구하는데 있어 ) 수치 미분법을 이용해서 손실함수를 최소화 시키는 방법을 알아보았습니다. 그럼 이번에는 "오차역전파법". 그 유명한 BackPropagation 을 통해 손실함수를 최소화 시키는 W 를 어떻게 찾아보는지 한번 보도록 하겠습니다.



이 글에서는 backpropagation 의 역사, 기존에 있었던 문제들( Layer 를 깊게 쌓았을 때 역전파가 안되었던건 현상들... ) 에 대해서는 다루지 않을 것이다. 


ㅁ Backpropagation 을 통한 Weight 업데이트

  • 이전 포스트를 참조해 보면 Weight 의 순서는 다음과 같다.
    1. 미니배치
    2. 기울기 산출
    3. 매개변수 갱신
    4. 1,2,3 반복
  • 여기서 2번의 기울기 산출을 하는데 있어 Backpropagation 은 다음과 같은 순서로 진행된다.
    1. Forward Propagation
    2. Back Propagation
    3. Update Weight
왜 forward propagation 이 들어가 있지? 라고 생각할 수 있겠지만 Back propagation 을 이용한 방법이지 back propagation 만 이용한다는것은 아니다. 역전파를 수행하기 위해 순전파가 선행되어져야 하기때문이다. 


책에서는 계산 그래프 (computational graph ) 로 설명하는데... 난 개인적으로 수식이 더 쉽더라 +_+;; 위에 수식을 보면 E(손실값) 을 MSE 로 구했는데 결국 손실함수의 미분값은 우측의 값처럼 된다는 것이다.


그럼 위에서 설명한 순서와 매칭해서 설명해보면

  1. Forward Propagation 을 통해 E(손실함수) 의 수식을 구한다.
  2. 수식에 의한 미분 값( Gradient )을 구한다.
  3. 이 값에 따라 Weight 매개변수를 수정한다.


이게 이전 포스트에서 설명한 수치 미분과 가장 큰 차이점은  2번의 미분 값 ( Gradient )을 구할 때 수식을 통해서 바로 구했다는 것이다. 즉, 도함수의 미분을 통해 Gradient 를 계산하는 것보다. 수식의 Backpropagation 을 통해 미분값을 계산하는게 훨~~~~~~~씬 빠르다는 것이다.



chain rule

http://sanghyukchun.github.io/74/ 이분의 링크를 참조하여 주로 설명하겠다.
  • 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 의 편미분 값을 구해보면

Ew35=Eouto5outo5ino5ino5w35.




Ew35 는 세 값을 모두 곱한 것으로 계산 할 수 있다.






그럼 이제 w13 의 편미분을 구해보자


Ew13=Eouth3outh3inh3inh3w13.












'Deep Learning' 카테고리의 다른 글

4. RNN  (0) 2017.05.30
3. CNN  (0) 2017.05.26
2. 학습관련 기술들  (0) 2017.05.14
0. 딥러닝 기초지식  (0) 2017.05.12