딥러닝 개요 - 역전파

김민석·2022년 4월 28일
0

역전파 이해

이해를 위한 인공 신경망은
두 개의 입력 - 두 개의 은닉층 뉴런 - 두 개의 출력층 누련
이며 활성화 함수는 시그모이드를 사용

  1. 순전파(Forward Propagation)

파란 숫자는 입력값, 빨간 숫자는 각 가중치의 값을 의미

z1=w1x1+w2x2=0.3×0.1+0.25×0.2=0.08z_{1}=w_{1}x_{1} + w_{2}x_{2}=0.3 \text{×} 0.1 + 0.25 \text{×} 0.2= 0.08
z2=w3x1+w4x2=0.4×0.1+0.35×0.2=0.11z_{2}=w_{3}x_{1} + w_{4}x_{2}=0.4 \text{×} 0.1 + 0.35 \text{×} 0.2= 0.11

z1,z2z1,z2는 은닉층 뉴런에서 시그모이드 함수를 지나고 결과값은 은닉층 뉴런의 최종 출력 값 h1,h2h1,h2이다.

h1=sigmoid(z1)=0.51998934h_{1}=sigmoid(z_{1}) = 0.51998934
h2=sigmoid(z2)=0.52747230h_{2}=sigmoid(z_{2}) = 0.52747230

이는 다시 출력층 뉴런의 입력값이 되고
z3=w5h1+w6h2=0.45×h1+0.4×h2=0.44498412z_{3}=w_{5}h_{1}+w_{6}h_{2} = 0.45 \text{×} h_{1} + 0.4 \text{×} h_{2} = 0.44498412
z4=w7h1+w8h2=0.7×h1+0.6×h2=0.68047592z_{4}=w_{7}h_{1}+w_{8}h_{2} = 0.7 \text{×} h_{1} + 0.6 \text{×} h_{2} = 0.68047592

이후 출력층에서 시그모이드 함수를 지난 값은 최종 출력값(예측값)

o1=sigmoid(z3)=0.60944600o_{1}=sigmoid(z_{3})=0.60944600
o2=sigmoid(z4)=0.66384491o_{2}=sigmoid(z_{4})=0.66384491

선택한 손실함수(여기서는 MSE)에 따라 오차를 계산하고 전체 오차를 구한다.

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

  1. 역전파 1단계(BackPropagation Step1)

출력층에서 입력층 방향으로 계산하며 가중치를 업데이트

업데이트할 가중치는 w5,w6,w7,w8w_{5}, w_{6}, w_{7}, w_{8}
총 4개

미분의 연쇄 법칙을 통해 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}}

(1) 첫째 항
EtotalE_{total}의 값은 전체 오차값으로 식은

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)=(0.40.60944600)=0.20944600\frac{∂E_{total}}{∂o_{1}}=-(target_{o1}-output_{o1})=-(0.4-0.60944600)=0.20944600

(2) 둘째 항

시그모이드 함수의 미분은 f(x)×(1f(x))f(x) \text{×} (1-f(x))이고
따라서 시그모이드 함수 출력값인 o1o_{1}
o1z3=o1×(1o1)=0.60944600(10.60944600)=0.23802157\frac{∂o_{1}}{∂z_{3}}=o_{1}\text{×}(1-o_{1})=0.60944600(1-0.60944600)=0.23802157

(3) 셋째 항
z3w5=h1=0.51998934\frac{∂z_{3}}{∂w_{5}}=h_{1}=0.51998934

우변 모든 항 계산을 곱해주면
Etotalw5=0.20944600×0.23802157×0.51998934=0.02592286\frac{∂E_{total}}{∂w_{5}} = 0.20944600 \text{×} 0.23802157 \text{×} 0.51998934 = 0.02592286

경사 하강법에 따라 가중치를 업데이트 학습률은 0.5로 가정

w5+=w5αEtotalw5=0.450.5×0.02592286=0.43703857w_{5}^{+}=w_{5}-α\frac{∂E_{total}}{∂w_{5}}=0.45- 0.5 \text{×} 0.02592286=0.43703857

같은 원리
Etotalw6=Etotalo1×o1z3×z3w6w6+=0.38685205\frac{∂E_{total}}{∂w_{6}} = \frac{∂E_{total}}{∂o_{1}} \text{×} \frac{∂o_{1}}{∂z_{3}} \text{×} \frac{∂z_{3}}{∂w_{6}} → w_{6}^{+}=0.38685205
Etotalw7=Etotalo2×o2z4×z4w7w7+=0.69629578\frac{∂E_{total}}{∂w_{7}} = \frac{∂E_{total}}{∂o_{2}} \text{×} \frac{∂o_{2}}{∂z_{4}} \text{×} \frac{∂z_{4}}{∂w_{7}} → w_{7}^{+}=0.69629578
Etotalw8=Etotalo2×o2z4×z4w8w8+=0.59624247\frac{∂E_{total}}{∂w_{8}} = \frac{∂E_{total}}{∂o_{2}} \text{×} \frac{∂o_{2}}{∂z_{4}} \text{×} \frac{∂z_{4}}{∂w_{8}} → w_{8}^{+}=0.59624247

  1. 역전파 2단계
    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}}

(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}
=0.20944600×0.23802157×0.45=0.02243370= 0.20944600 \text{×} 0.23802157 \text{×} 0.45 = 0.02243370

Eo2h1=Eo2z4×z4h1=Eo2o2×o2z4×z4h1=0.00997311\frac{∂E_{o2}}{∂h_{1}} = \frac{∂E_{o2}}{∂z_{4}} \text{×} \frac{{∂z_{4}}}{∂h_{1}} = \frac{∂E_{o2}}{∂o_{2}} \text{×} \frac{∂o_{2}}{∂z_{4}} \text{×} \frac{{∂z_{4}}}{∂h_{1}} = 0.00997311
Etotalh1=0.02243370+0.00997311=0.03240681\frac{∂E_{total}}{∂h_{1}} = 0.02243370 + 0.00997311 = 0.03240681
(2) 둘째 항

h1z1=h1×(1h1)=0.51998934(10.51998934)=0.24960043\frac{∂h_{1}}{∂z_{1}} = h_{1}\text{×}(1-h_{1}) = 0.51998934(1-0.51998934)=0.24960043

(3) 셋째 항

z1w1=x1=0.1\frac{∂z_{1}}{∂w_{1}} = x_{1} = 0.1

Etotalw1=0.03240681×0.24960043×0.1=0.00080888\frac{∂E_{total}}{∂w_{1}} = 0.03240681 \text{×} 0.24960043 \text{×} 0.1 = 0.00080888

경사 하강법 업데이트

w1+=w1αEtotalw1=0.30.5×0.00080888=0.29959556w_{1}^{+}=w_{1}-α\frac{∂E_{total}}{∂w_{1}}=0.3- 0.5 \text{×} 0.00080888=0.29959556

이외에도
Etotalw2=Etotalh1×h1z1×z1w2w2+=0.24919112\frac{∂E_{total}}{∂w_{2}} = \frac{∂E_{total}}{∂h_{1}} \text{×} \frac{∂h_{1}}{∂z_{1}} \text{×} \frac{∂z_{1}}{∂w_{2}} → w_{2}^{+}=0.24919112
Etotalw3=Etotalh2×h2z2×z2w3w3+=0.39964496\frac{∂E_{total}}{∂w_{3}} = \frac{∂E_{total}}{∂h_{2}} \text{×} \frac{∂h_{2}}{∂z_{2}} \text{×} \frac{∂z_{2}}{∂w_{3}} → w_{3}^{+}=0.39964496
Etotalw4=Etotalh2×h2z2×z2w4w4+=0.34928991\frac{∂E_{total}}{∂w_{4}} = \frac{∂E_{total}}{∂h_{2}} \text{×} \frac{∂h_{2}}{∂z_{2}} \text{×} \frac{∂z_{2}}{∂w_{4}} → w_{4}^{+}=0.34928991

  1. 결과 확인

업데이트로 오차 감소가 있는지 확인

z1=w1x1+w2x2=0.29959556×0.1+0.24919112×0.2=0.07979778z_{1}=w_{1}x_{1} + w_{2}x_{2}=0.29959556 \text{×} 0.1 + 0.24919112 \text{×} 0.2= 0.07979778
z2=w3x1+w4x2=0.39964496×0.1+0.34928991×0.2=0.10982248z_{2}=w_{3}x_{1} + w_{4}x_{2}=0.39964496 \text{×} 0.1 + 0.34928991 \text{×} 0.2= 0.10982248
h1=sigmoid(z1)=0.51993887h_{1}=sigmoid(z_{1}) = 0.51993887
h2=sigmoid(z2)=0.52742806h_{2}=sigmoid(z_{2}) = 0.52742806
z3=w5h1+w6h2=0.43703857×h1+0.38685205×h2=0.43126996z_{3}=w_{5}h_{1}+w_{6}h_{2} = 0.43703857 \text{×} h_{1} + 0.38685205 \text{×} h_{2} = 0.43126996
z4=w7h1+w8h2=0.69629578×h1+0.59624247×h2=0.67650625z_{4}=w_{7}h_{1}+w_{8}h_{2} = 0.69629578 \text{×} h_{1} + 0.59624247 \text{×} h_{2} = 0.67650625
o1=sigmoid(z3)=0.60617688o_{1}=sigmoid(z_{3})=0.60617688
o2=sigmoid(z4)=0.66295848o_{2}=sigmoid(z_{4})=0.66295848
Eo1=12(targeto1outputo1)2=0.02125445E_{o1}=\frac{1}{2}(target_{o1}-output_{o1})^{2}=0.02125445
Eo2=12(targeto2outputo2)2=0.00198189E_{o2}=\frac{1}{2}(target_{o2}-output_{o2})^{2}=0.00198189
Etotal=Eo1+Eo2=0.02323634E_{total}=E_{o1}+E_{o2}=0.02323634

기존의 전체 오차가 0.02397190였으므로 1번의 역전파로 오차가 감소한 것을 확인할 수 있다

profile
데이터 사이언스를 공부하는 커피쟁이

0개의 댓글