딥러닝 모델에서의 계산은 크게 순전파와 역전파로 나눌 수 있습니다. 순전파는 모델의 목적에 맞는 예측값을 계산하는데에 있고 역전파는 학습 가능한 파라미터가 존재하는 각각의 레이어에서 학습 파라미터에 대한 기울기(Gradient)를 계산 및 저장해 두었다가 파라미터 업데이트시 활용합니다.
여기서는 왜 파라미터 업데이트를 위해 역전파를 사용해야 하는지와 구체적으로 역전파가 어떻게 계산되고 코드로 어떻게 구현되는지까지 살펴보겠습니다.
딥러닝에서 학습 파라미터가 어떻게 업데이트 되는지에 대해 설명할때 항상 등장하는 개념 중 하나가 경사하강법(Gradient Descent)입니다. 머신러닝에 대해서 공부할때 기초로 배우는 내용이기도하고 너무 중요한 개념이기 때문에 대부분 직관적으로는 이해하고 계실겁니다.

그림1 https://wikidocs.net/235777
$J(w)$: 손실함수(Loss function) or 비용함수(Cost Function)
$w$: 가중치(학습 파라미터)
손실함수의 종류에 따라서 차이가 있을 수 있지만 일반적으로 손실함수의 출력값인 “손실”을 최소화 하는 것은 모델의 성능 개선으로 이어집니다. 경사 하강법을 모델의 학습 파라미터를 업데이트할 때 사용되는 이유는 경사하강법을 사용하면 비용을 낮추기 위해 $w$를 어느 방향으로 움직여야 할지를 구할 수 있기 때문입니다.
위 그래프는 $w$ 값이 변화할때 손실값($J$)가 어떻게 변하느냐를 나타내는 그래프입니다. $J$ 값이 가장 작아지는 $w$ 값은 그래프를 통해 $J_{min}(w)$라는 것을 한눈에 알 수 있습니다. 그렇다면 컴퓨터에서는 어떻게 $J_{min}(w)$를 찾을 수 있는지 알아보겠습니다.
랜덤한 $w$ 값이 주어졌을때 $J$값이 가장 최소가되는 지점을 찾아가는 방법을 수식으로 나타내면
$w = w-\eta{\frac{\partial{J}}{\partial w}}$
로 나타낼 수 있습니다. $\eta$는 모델의 학습률(Learning rate)를 나타냅니다. $w$에 대한 $J$의 기울기 값을 빼줌으로써 $w$를 업데이트 하는 형태입니다.
위 그래프에서 $w$=Initial weight일때의 기울기를 구해봅시다. $\frac{\partial{J}}{\partial w}$값은 양수가 나오고 $J$가 줄어드는 방향으로 업데이트하기 위해선 왼쪽으로 움직여야합니다. $\frac{\partial{J}}{\partial w}$값이 양수이기 때문에 해당 값을 현재 $w$에서 빼주면 $w$값을 왼쪽으로 움직일 수 있습니다. $\frac{\partial{J}}{\partial w}$가 음수일때는 뺴주면 오른쪽으로 움직입니다. 이 수식을 여러번 반복하면 $J$가 최소가되는 $w$값으로 근사하게 됩니다.
그리고 $\frac{\partial{J}}{\partial w}$를 좀더 직관적으로 표현하면 어떤 값 $w_i$가 주어졌을때 그 시기의 $J$의 변화량이라고도 볼 수 있습니다.