통계, IT, AI

딥러닝: 화풍을 모방하기 (7) - 책 요약: 4. 역전파법 본문

머신러닝

딥러닝: 화풍을 모방하기 (7) - 책 요약: 4. 역전파법

Harold_Finch 2017. 2. 16. 22:01

4. 역전파법: backpropagation


4.1 기울기 계산의 어려움


- 3장에서 설명한 경사하강법을 실행하기 위해서는 식 (1)과 같이 En(w)에 대한 미분이 필요하다. 단, wji(l),tt시점의 파라미터를 나타내며 En(w)n번째 미니배치의 오차함수이다.

(1)wji(l),t+1wji(l),tϵEn(w)wji(l)


- 그런데 이 미분을 계산하는 것은 입력에 가까운 층일 수록 힘들다. 왜냐하면 y(x) 안에 wji(l)가 활성화 함수가 여려 겹이나 적용된 식 안에 있기 때문이다. 이를 역전파법으로 해결할 수 있다. 


4.2. 역전파법 유도

그림 1. Backpropagation 유도

- 다층 신경망으로 일반화된 내용으로 바로 소개한다.

- 오차함수의 파라미터에 대한 미분을 체인룰을 사용하여 식 (2)와 같이 쓸 수 있다.


(2)E(w)wji(l)=E(w)uj(l)uj(l)wji(l)


- 이때 uj(l)=i=1K(l1)wji(l)zil1이므로 uj(l)/wji(l)=zi(l1)이다. 이제 δj(l)를 식 (3)과 같이 정의한다. 단, K(l)l번째 층의 노드의 수이다.

 

(3)δj(l)En(w)uj(l)


- 다시 체인룰을 사용하여 δj(l)를 식 (4)와 같이 쓸 수 있다. 그림 1의 붉은 선에서 볼 수 있듯 uj(l)l+1 층의 uk(l+1)에 영향을 주기 때문이다. 즉, l+1층의 모든 uk(l+1)uj(l)을 포함한다.

 

(4)δj(l)=k=1K(l+1)En(w)uk(l+1)uk(l+1)uj(l)


- uk(l+1)=i=1K(l)wkj(l+1)zj(l)=i=1K(l)wkj(l+1)f(l)(uj(l))이므로 uk(l+1)/uj(l)=wkj(l+1)f(l)(uj(l))이며 식 (3)과 같은 정의를 사용하여 En(w)/uk(l+1)=δk(l+1)이다. 이를 식 (4)에 대입하여 식 (5)를 얻는다. 

 

(5)δj(l)=k=1K(l+1)δk(l+1)wkj(l+1)f(l)(uj(l))


- 식 (2)를 식 (6)과 같이 정리하여 역전파법을 유도한다. 단, δj(l)는 식 (5)와 같다. 

 

(6)E(w)wji(l)=δj(l)zi(l1)

 

- 왜 이 방법의 이름이 역전파법 Backpropagation인지 (5)에서 알 수 있다. 가장 마지막 층의 δj(L)을 구하여 δj(L1)을 얻고 이를 l=2층까지 반복하기 때문이다. 각 층의 δ를 구하면 바로 E(w)/wji(l)을 구할 수 있다.

 

- 이제 δj(L)을 구해보자. 흥미롭게도 지금까지 제시한 몇가지 오차함수에 대하여 δj(L)는 같은 형태를 갖는다. 먼저 회귀문제를 살펴보자. 오차함수는 제곱합 E(w)=yd2/2이며 출력층의 활성화 함수로 항등함수를 선택하는 경우 δj(L)은 다음과 같다.

 

(7)δj(L)=zj(L)dj=yj(L)dj

 

- 이진분류 문제이고 오차함수로 E(w)=dlogy+(1d)log(1y)를 사용하며 출력층의 활성화함수로 로지스틱 함수를 사용하는 경우 δj(L)은 다음과 같다.

 

(8)δ(L)=dydydu1d1ydydu=d(1y)(1d)y=yd

 

- 다클래스의 분류문제이고 활성화함수로 소프트맥스 함수를 사용하고 오차함수로 교차 엔트로피를 사용하는 경우 δj(L)은 다음과 같다.

 

δj(L)=kdk1ykykuj(L)=dj(1yj)kjdk(yj)=kdk(yjdj)(9)=yjdj

 

- 이렇게 회귀, 분류 두 가지 유형에서 δj(L)은 신경망의 출력과 목표 출력간의 차가 된다.

 

- 계산을 매트릭스 형태로 구해보자. 이는 GPU나 CPU를 이용한 병렬계산을 고려하면 무척 중요한 요소이다. w(l)l번째 층의 파라미터를 원소로 갖는 K(l)×K(l1)의 크기의 매트릭스이다. b(l)l번째 층의 파라미터 특히 bias를 원소로 갖는 K(l)×1의 크기의 매트릭스이다. u(l)=w(l)z(l1)+b(l)11×N이며 K(l)×N의 크기를 갖는다.[각주:1] z(l)=f(l)(u(l)) 즉, u(l)의 각 원소에 활성화함수를 적용한 것이다. 단,  z(1)n번째 미니배치인 xnT과 같다. xn의 각 행은 각 샘플, 각 열은 input을 나타낸다. Δ(l)K(l)×N의 크기를 갖는 매트릭스로 각 열은 각 샘플, j번째 행은 δj(l)를 나타낸다.

 

(10)Δ(L)=YDT

(11)Δ(l)=(w(l+1)TΔ(l+1))f(l)(u(l)),l=L1,,2

(12)E(w)w(l)=Δ(l)z(l1)T/N,l=L,,2

(13)E(w)b(l)=Δ(l)1N×1/N,l=L,,2

 

- 역전파법이 아니더라도 E(w)/wji(l)를 구하는 것이 불가능하진 않다. 미분의 정의를 이용하여 다음과 같이 구하는 것이 가능하다. 단, 식 (14)에서 ϵ은 0보다 큰 작은 수이며 w+ϵ은 wji(l)ϵ을 더하는 연산이지만 의미를 살리기 위하여 이렇게 사용한다.

 

(14)E(w)wji(l)E(w+ϵ)E(w)ϵ

 

- 하지만 이 방법은 신경망의 규모가 커질수록 비효율적인 방법이다. 왜냐하면 wji(l)를 에 대한 미분을 얻기 위해 모든 파라미터를 사용하여 E(w)를 구해야하기 때문이다.

 

4.3 기울기 소실 문제

 

- 식 (11)에 나온 역전파 계산은 선형계산이다. 따라서 각 층의 가중치가 너무 크거나 너무 작다면 δ(l)가 각 층을 거쳐 전달되는 도중 급속하게 커지거나, 급속하게 작아지게 된다. 이를 기울기 소실 문제 vanishing gradient problem이라고 부른다. 이는 층이 많을수록 문제가 된다.

- 이를 해결하기 위한 방법이 앞으로 설명할 사전훈련이며 이를 계기로 신경망 연구가 다시 부흥하게 된다.

 

  1. 지금까지 정리했던 형태와는 조금 다르다. 즉, 지금까지는 파라미터가 뒤에 나왔는데, 지금부터는 앞에 둔다. [본문으로]