부스트캠프 week1 day5

Dae Hee Lee·2021년 8월 6일
0

BoostCamp

목록 보기
5/22

역전파를 이해해보자!

인공 신경망은 입력층, 은닉층, 출력층 이렇게 3개의 층을 가진다.

위 예제에서는 두 개의 입력, 두 개의 은닉층 뉴런, 두 개의 출력층 뉴런을 사용한다. 모든 뉴런은 활성화 함수로 시그모이드 함수를 사용한다.

은닉층과 출력층의 뉴런에서 변수 z가 존재하는데, 여기서 변수 z는 이전층의 모든 입력이 각각의 가중치와 곱해진 값들이 모두 더해진 가중합을 의미한다. 이 값은 아직 시그모이드 함수를 거치지 않은 상태이고, 활성화함수의 입력을 의미한다. 또한 h, o는 시그모이드 함수를 지난 후의 값으로 각 뉴런의 출력값을 의미한다. 이번 역전파 예제에서는 인공 신경망에 존재하는 모든 가중치 W에 대해서 역전파를 통해 업데이트하는 것을 목표로 한다. 편향은 고려하지 않기로 하자.

순전파

주어진 값이 위의 그림과 같을 때 순전파는 다음과 같을 것이다.

z1=W1x1+W2x2z_1 = W_1x_1 + W_2x_2
z2=W3x1+W4x2z_2 = W_3x_1 + W_4x_2

그리고 h 값은 각 z값에 각각 시그모이드를 취해준 결과값이 된다.

각 h 값들은 다시 입력층이 되어 가중합을 계산하게 된다.
z3=W5h1+W6h2z_3 = W_5h_1 + W_6h_2
z3=W7h1+W8h2z_3 = W_7h_1 + W_8h_2

여기서 해야할 일은 예측값과 실제값의 오차를 계산하기 위한 오차 함수를 선택하는 것이다. 오차를 계산하기 위한 손실 함수로는 MSE를 사용하겠다. 식에서는 실제값을 target이라고 표현하였으며 순전파를 통해 나온 예측값을 output으로 표현하였다.

Eo1=12(targeto1outputo1)2E_{o1}=\frac{1}{2}(target_{o1}-output_{o1})^{2}
Eo2=12(targeto2outputo2)2E_{o2}=\frac{1}{2}(target_{o2}-output_{o2})^{2}

그리고 여기서 구한 E 값들을 모두 더하면 전체 오차가 된다.

역전파 1단계

순전파가 입력층에서 출력층으로 향한다면 역전파는 반대로 출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트해나간다. 이 때, 출력층과 은닉층 사이의 가중치를 업데이트하는 단계를 역전파 1단계, 은닉층 사이의 가중치를 업데이트하는 단계를 역전파 2단계라고 한다.

역전파 1단계에서 업데이트해야 할 가중치는 W5~W8의 4개 가중 행렬이다. 원리 자체는 모두 동일하고, 경사 하강법을 수행하기 위해 W5를 업데이트 하기 위해 EtotalW5\frac{∂E_{total}}{∂W_{5}}를 계산해야 한다. 연쇄 법칙에 따라 결과 값은 다음과 같이 쓸 수 있다.

EtotalW5=Etotalo1×o1z3×z3W5\frac{∂E_{total}}{∂W_{5}} = \frac{∂E_{total}}{∂o_{1}} \text{×} \frac{∂o_{1}}{∂z_{3}} \text{×} \frac{∂z_{3}}{∂W_{5}}

Etotal=12(targeto1outputo1)2+12(targeto2outputo2)2E_{total}=\frac{1}{2}(target_{o1}-output_{o1})^{2} + \frac{1}{2}(target_{o2}-output_{o2})^{2}

Etotalo1=2×12(targeto1outputo1)21×(1)+0\frac{∂E_{total}}{∂o_{1}}=2 \text{×} \frac{1}{2}(target_{o1}-output_{o1})^{2-1} \text{×} (-1) + 0

Etotalo1=(targeto1outputo1)\frac{∂E_{total}}{∂o_{1}}=-(target_{o1}-output_{o1})

o1z3=o1×(1o1)\frac{∂o_{1}}{∂z_{3}}=o_{1}\text{×}(1-o_{1}) (시그모이드 미분)

z3W5=h1\frac{∂z_{3}}{∂W_{5}}=h_{1}

위와 같이 계산할 수 있고, 따라서 같은 원리로 각 가중치 행렬에 대한 결과값을 반환할 수 있다.
W5+=W5αEtotalW5W_{5}^{+}=W_{5}-α\frac{∂E_{total}}{∂W_{5}}
이렇게 가중치를 업데이트 해준다.

역전파 2단계

1단계를 위에서 완료했다면 이제 입력층 방향으로 이동하며 다시 계산을 이어간다. 빨간색 화살표는 순전파의 정반대 방향인 역전파의 방향을 보여준다. 현재 인공신경망은 은닉층이 1개밖에 없으므로 이번 단계가 마지막 단계이다. 만약 은닉층이 더 많은 경우, 입력층 방향으로 한 단계씩 계속해서 계산해야 한다.

이번 단계에서 계산할 가중치는 W1~W4이다. 경사 하강법을 수행하여 가중치를 업데이트하기 위해 EtotalW1\frac{∂E_{total}}{∂W_{1}}를 계산해야 한다.

똑같이 연쇄 법칙으 사용해 다음과 같이 풀어 쓸 수 있다.
EtotalW1=Etotalh1×h1z1×z1W1\frac{∂E_{total}}{∂W_{1}} = \frac{∂E_{total}}{∂h_{1}} \text{×} \frac{∂h_{1}}{∂z_{1}} \text{×} \frac{∂z_{1}}{∂W_{1}}

여기서 Etotalh1=Eo1h1+Eo2h1\frac{∂E_{total}}{∂h_{1}} = \frac{∂E_{o1}}{∂h_{1}} + \frac{∂E_{o2}}{∂h_{1}}이기 때문에 각각을 나눠서 계산할 수 있다.

Eo1h1=Eo1z3×z3h1=Eo1o1×o1z3×z3h1\frac{∂E_{o1}}{∂h_{1}} = \frac{∂E_{o1}}{∂z_{3}} \text{×} \frac{{∂z_{3}}}{∂h_{1}} = \frac{∂E_{o1}}{∂o_{1}} \text{×} \frac{∂o_{1}}{∂z_{3}} \text{×} \frac{{∂z_{3}}}{∂h_{1}}이므로 =(targeto1outputo1)×o1×(1o1)×W5= -(target_{o1}-output_{o1}) \text{×} o_{1}\text{×}(1-o_{1}) \text{×} W_{5}이다.

같은 원리로 Eo2h1\frac{∂E_{o2}}{∂h_{1}}/ 또한 구할 수 있을 것이다.

나머지 항들을 추가적으로 계산해보자.
h1z1=h1×(1h1)\frac{∂h_{1}}{∂z_{1}} = h_{1}\text{×}(1-h_{1})

z1W1=x1\frac{∂z_{1}}{∂W_{1}} = x_{1}

위 값들을 기반으로 W1+=W1αEtotalW1W_{1}^{+}=W_{1}-α\frac{∂E_{total}}{∂W_{1}}를 계산하여 경사 하강법을 이용해 가중치를 업데이트 할 수 있다.

Assignment2

n_samples : 배치학습이라고 생각

loss에 대한 y의 gradient

gradient_over_time : loss 값

TODO : 학습 가능한 파라미터에 대한 Loss의 gradient의 각 layer의 파라미터의 gradient를 더해서 구할 수 있습니다.

profile
Today is the day

0개의 댓글