8. [딥러닝] Back-propagation(오차역전파)

김범수·2022년 6월 2일
0

머신러닝, 딥러닝

목록 보기
7/10


딥러닝의 꽃이라고 불리는 Back-propagation에 대해 알아보도록 하겠습니다.

Back-propagation(오차역전파)

앞서 784x100x10 딥러닝 아키택쳐에서 60,000개의 MNIST를 학습을 진행해보니 시간이 제 컴퓨터 기준 반나절정도 소요되었습니다. 이유는 수치미분을 통하여 가중치/바이어스 업데이트 시 많은 시간이 소요되기 때문입니다.

Back-propagation은 수치미분을 사용하지않고 행렬로 표현되는 수식으로 계산하기 때문에 빠른 계산이 가능해집니다.

  • Back-Propagation 개념 및 동작원리

가중치나 바이어스가 변할 때 최종 오차가 얼마나 변하는지를 나타내는지의 편미분 값을 체인 룰(chain rule)을 이용하여 국소 미분으로 분리하여 수학공식으로 나타내어 계산하는 방법을 오차역전파라고 합니다.

  • sigmoid 함수 미분

편미분을 체인 룰을 이용하여 국소미분으로 나타내기 위해서는 sigmoid 함수의 미분 값을 알아야합니다.

sigmoid 함수의 미분 값은 왼쪽 그림과 같은 과정으로 sigmoid(z) x (1 - sigmoid(z))로 나타낼 수 있고, 이는 우측 그림에서 볼 수 있듯이 가중치 변화에 따른 최종 오차 변화 값을 back-propagation으로, 즉 미분을 사용하지 않는 수학 공식으로 나타내는데 이용됩니다.

만약 은닉층이 1개이고 각 층의 노드가 2개로 이루어져 있다면 최종 손실 값과 가중치, 바이어스는 그림과 같이 나타낼 수 있습니다. 이를 이용하여

모든 가중치와 바이어스에 대한 최종 오차의 변화율을 수치 미분을 사용하지 않은 행렬 기반의 수학 공식을 이용하는 back-propagation 구현하여 계산 속도를 감소(복잡도 감소)시킬 수 있습니다.

  • 출력층 back-propagation 공식 유도

1. 가중치에 의한 최종 오차 변화율

출력층의 가중치 w11에 대한 최종 오차 변화율을 구하는 과정입니다.

w11에 대해서 최종오차 E2는 영향을 받지 않으므로 dE2/dw11은 0이 되는 것을 볼 수 있고, 이후 체인 룰을 이용하여 국소 미분으로 분리한 후 정리하면 수치미분을 활용하지 않은 수학수식으로 정리되는 것을 확인할 수 있습니다.

출력층의 다른 가중치 값들에 의한 최종 오차율의 변화율 또한 같은 과정을 통해 정리가 가능합니다.

2. 바이어스에 의한 최종 오차 변화율

출력층 바이어스에 의한 최종 오차의 변화율 또한 가중치에서와 같은 방식으로 정리하게 됩니다.

3. 출력층 back-propagation 공식 정리

앞서 구한 각각의 가중치와 바이어스에 의한 최종 오차 변화율을 정리하는 과정입니다.

출력층의 가중치에 의한 최종오차의 변화율은 은닉층 출력의 전치행렬과 loss_3이라는 출력층 손실이라고 나타낸 수식의 행렬곱을 나타내게 되고, 바이어스에 의한 최종 오차의 변화율은 loss_3을 나타내게 됩니다.

이 수식으로 통해 출력층의 가중치 및 바이어스의 업데이트 수식을 수치미분을 사용하지않은 수식으로 정리할 수 있게 됩니다.

  • 은닉층 back-propagation 공식 유도

1. 가중치에 의한 최종 오차 변화율

은닉층의 가중치 및 바이어스에 따른 최종 오차의 변화율을 정리하는 과정은 출력층에서와 별반 다르지 않습니다.

하지만 출력층과 다르게 최종 오차 양쪽의 변화에 모두 영향을 주는데, 이는 외우기 보다 체인룰을 통해 분리되는 과정에 대해 이해를 하는 것이 더 중요하다고 생각됩니다.

2. 바이어스에 의한 최종 오차 변화율

은닉층 바이어스에 의한 최종 오차의 변화율 또한 가중치에서와 같은 방식으로 정리하게 됩니다.

3. 은닉층 back-propagation 공식 정리

은닉층에서 또한 가중치에 의한 최종오차의 변화율을 입력층의 출력의 전치행렬과 loss_2의 행렬곱으로 나타내면, 바이어스에 의한 최종오차의 변화율을 loss_2로 나타낼 수 있다.

하지만 이렇게 구한 공식들은 은닉층이 1개를 가진 신경망이라고 가정했을시의 공식들이다.

이 공식들을 통해 1개 이상의 은닉층을 갖을 때 공식들로 일반화를 시킨다면,

  • 1개 이상의 은닉층을 가진 신경망에서 back-propagation

출력층

출력층의 손실 = (출력층 출력 - 정답) X 출력층출력(1 - 출력층 출력)

현재층 가중치 변화율 = 이전층 출력의 전치행렬 ⋅ 현재층 손실

현재층 바이어스 변화율 = 현재층 손실

은닉층

은닉층의 현재층 손실 = (다음층 출력 - 다음층 가중치의 전치행렬) X 현재층출력(1 - 현재층 출력)

현재층 가중치 변화율 = 이전층 출력의 전치행렬 ⋅ 현재층 손실

현재층 바이어스 변화율 = 현재층 손실

back-propagation 공식 정리

출처 : 유튜브 NeoWizard 채널 머신러닝/딥러닝 강의

profile
iOS Developer

0개의 댓글