본문 바로가기
Deep Learning/Deep Learning 개념정리

Backpropagation

by 대소기 2021. 9. 25.

본 포스팅은 유튜버 혁펜하인님의 Backpropagation 강의를 정리한 포스팅입니다.
더 정확한 설명을 들으실 분들은 아래 동영상을 참고해주세요.

  • 먼저 위 그림과 같은 hidden layer가 2개인 DNN model이 있다고 가정해봅시다.
  • activation function은 특정한 함수를 상정하지 않고 그냥 $g(x)$ 라고 가정합니다.
  • 각 layer별 가중치는 $w^l_{i,j} $ 라고 가정합니다. $l$은 layer의 번호를 나타내고 왼쪽부터 layer 0, 1, 2, 3 입니다. $i$는 해당 layer의 몇 번째 뉴런인지를 나타냅니다. $j$는 해당 가중치가 다음 layer의 몇 번째 뉴런과 연결되는지를 나타냅니다.
  • 이전 layer의 output에 가중치가 곱해진 결과를 $S^l-1$라고 가정합니다. 여기서 l은 가중치와 동일하게 현재 layer를 나타냅니다.
  • Cost function은 위 그림에서와 같이 f로 표현합니다.

 

 

1) 딥러닝 가중치 update - Gradient Descent Algorithm

  • $w^l_{i,j} ← w^l_{i,j} - \alpha \frac{\partial f}{\partial w^l_i,j}$
  • 딥 러닝의 가중치 update방식은 위 식과 같이 현재시점 가중치에 cost function을 편미분한 결과인 기울기에 $\alpha$만큼을 곱해준 값을 빼줌으로서 이뤄집니다.
  • 때문에 가중치 update를 위해서는 cost function을 가중치로 편미분한 결과인 기울기를 알아야합니다.

 

 

2) 기울기를 구하기 위한 방법 - Chain Rule

  • 1)에서 언급했듯이 기울기를 구하기 위해서는 편미분을 해야 합니다.
  • 하지만, 예를 들어 두 번째 layer의 $w^2_{2,1}$ 가중치를 update하기 위해 기울기를 구하고자 편미분을 시행한다고 해봅시다.
  • $\frac{\partial f}{\partial w^2_{2,1}}$ 를 해야 하는데, cost function은 output인 $x^3_1, x^3_2$의 함수이기 때문에 가중치 $w^1_{1,2}$로 편미분을 할 수 없습니다. 이를 해결하기 위해 Chain Rule을 사용합니다.
  • $\frac{\partial f}{\partial w^2_{2,1}}$
  • 위 식은 다음 식으로 바꿔서 사용할 수 있습니다.
  • $\frac{\partial f}{\partial x^3_{1}} \cdot \frac{\partial x^3_{1}}{\partial s^2_1} \ cdot \frac{\partial s^2_{1}}{\partial w^2_{2,1}}$
  • 결국 곱하면 다 지워지고 $\partial f$와 $\frac{1}{partial w^2_{2,1}}$만 남기 때문에 동일한 식입니다.
  • 이러한 chain rule 방식을 통해 어떤 가중치라도 cost function을 편미분하는 것이 가능해집니다.

 

 

3) 예시

  • 이제 필요한 개념과 아이디어를 다 배웠으니 실제로 $W^1_{1,2}$의 가중치를 update하기 위해서 어떤 과정을 거쳐야 하는지 풀어봅시다.
  • $\frac{\partial f}{\partial w^1_{1,2}}$를 하기 위해서는 위 식을 풀어야 합니다.
  • 위 식에서 $\delta$로 표시한 부분은 더 뒷부분의 가중치를 update하면서 구하게 되는 식입니다.
  • chain rule을 사용하기 위해서는 가장 output layer와 가까운 쪽의 가중치부터 update해야 된다는 것을 알게 되었습니다.
  • 이렇게 뒷부분(output layer와 가까운 부분)부터 가중치를 udpate하기 때문에 딥 러닝의 가중치 update process를 역전파(Backpropagation)이라고 부르는 것입니다.