1. 순전파(forward propagation)
위와 같은 신경망을 가정했을 때 각 은닉층에서의 출력은 아래와 같다.
첫번째 층
$$ z_{11}= w_{11}x_{1}+w_{14}x_{2} $$
$$ z_{12}= w_{12}x_{1}+w_{13}x_{2} $$
$$ h_{11}(z_{11})= \phi (z_{11}) $$
$$ h_{12}(z_{12})= \phi (z_{12}) $$
두 번째 층
$$ z_{21}= w_{21}h_{11}(z)+w_{24}h_{12}(z) $$
$$ z_{22}= w_{22}h_{11}(z)+w_{23}h_{12}(z) $$
$$ h_{21}(z_{21})= \phi (z_{21}) $$
$$ h_{22}(z_{22})= \phi (z_{22}) $$
따라서$\hat{y_{1}}= h_{21}(z_{21})$ , $\hat{y_{2}}= h_{22}(z_{22})$이다.
이처럼 네트워크를 입력-> 출력으로 통과하는 것을 순전파라 한다.
2. 역전파(back propagation)
앞서 구한 출력 $\hat{y_{1}}$, $\hat{y_{2}}$과 실제 값 $y_{1}$, $y_{2}$을 비교하여 네트워크를 출력-> 입력으로 통과시킨다. 이를 역전파라 한다.
오차를 계산하기 위해 평균제곱오차(MSE)를 사용한다.
$$ J_{1}= \frac{1}{2}(\hat{y_{1}}-y_{1})^2 $$
$$ J_{2}= \frac{1}{2}(\hat{y_{2}}-y_{2})^2 $$
$$ J_{total}= J_{1}+ J{2} $$
이후 출력층->입력층으로 거꾸로 통과하며 가중치를 업데이트 한다.
경사하강법을 이용해 첫번째 가중치인 $w_{21}, w_{22}, w_{23}, w_{24}$를 업데이트 한다.
$w_{21}$을 업데이트 하기 위해서는$\frac{\partial J_{total}}{\partial w_{21}}$를 구해야 한다. 이는 미분 연쇄법칙을 이용해 구할 수 있다.
$$ \frac{\partial J_{total}}{\partial w_{21}}= \frac{\partial J_{total}}{\partial h_{21}(z_{21})}\frac{\partial h_{21}(z_{21})}{\partial z_{21}}\frac{\partial z_{21}}{\partial w_{21}} $$
이후 경사 하강법을 통해 가중치 $w_{21}$을 수정한다.
$$ w_{21}^+=w_{21}- \eta \frac{\partial J_{total}}{\partial w_{12}} $$
이와 동일한 방법으로 나머지 가중치 $w_{22}^+, w_{23}^+, w_{24}^+$를 계산할 수 있으며
동일한 방법으로 $w_{11}^+, w_{12}^+, w_{13}^+, w_{14}^+$도 구할수 있다.
3. 정리
신경항은 앞서 설명한 순전파-역전파의 단계를 여러번 반복하며 오차를 최소화 하는 방법으로 가중치를 수정한다.
역전파 훈련 알고리즘은 다층 퍼셉트론 신경망을 학습하는 방법이며 딥러닝에 있어 핵심적인 개념이다.
#################################
잘못된 내용 발견시 덧글 부탁드립니다.
#################################
<출처 및 참고자료>
[1] 오렐리앙 제롱. Hands-On Machine Learning with Scikit-Learn, Keras&Tensorflow 2판. 한빛미디어
[2] blog.naver.com/samsjang/221033626685
'딥러닝' 카테고리의 다른 글
파이토치에서 텐서보드 사용하기 (0) | 2021.06.15 |
---|---|
[논문리딩] YOWO(You Only Watch Once) (0) | 2021.01.25 |
[번외] CPU와 GPU의 학습 속도 (0) | 2020.10.13 |
활성화 함수 (0) | 2020.09.20 |
퍼셉트론 (0) | 2020.09.17 |