개요
Backpropagation이란 딥러닝 모델을 학습시킬 때 사용하는 대표적인 부분 중 하나입다. 직역하면 역전파라는 뜻을 가집니다. Backpropation은 간단하게 풀어쓰면 실제 정답과 모델이 예측한 값의 오차를 출력에서 입력으로 전파하면서 모델의 weight를 업데이트하는 것을 말합니다. Backpropagation을 알기 전에 Chain Rule이란 것을 먼저 알아야 합니다.
Chain Rule
Chain Rule이란 미분의 연쇄법칙이라고 불리는 법칙입니다. Chain Rule에 대한 정의는 다음과 같습니다.
어떤 함수 $f$와 $g$가 모두 미분가능하고 $F = f\circ g$가 $F(x) = f(g(x))$로 정의된 합성함수라면, $F$는 $x$에서 미분 가능하고, $F'$는 다음과 같은 곱으로 주어진다.
$$F'(x) =f'(g(x))g'(x)$$
라이프니츠 기호로 나타내면, $y=f(u) $와 $u=(gx)$가 모두 미분가능한 함수일 떄 다음이 성립한다.
$$\cfrac{dy}{dx} = \cfrac{dy}{du}\cfrac{du}{dx}$$
Backpropagation
Backpropagation이란 것은 일반적으로 Loss에 대한 각 weight의 기울기를 구하는 과정에서 사용됩니다. 우리는 Loss $L$과 특정 weight $w_i$ 사이의 기울기를 구하고 싶지만 이를 수식적으로 풀기는 매우 어렵습니다. 그래서 $\cfrac{dL}{dw_i}$를 Chain Rule을 이용하여 $\cfrac{dL}{dz}\cfrac{dz}{dy}....\cfrac{dj}{dw_i}$ 와 같이 풀어서 구합니다. 이렇게 하나의 수식이였던 $\cfrac{dL}{dw_i}$를 여러 수식의 곱으로 표현합니다. 여기서 구한 여러 수식의 곱은 딥러닝 모델의 각 노드 사이의 연산입니다. 즉, $\cfrac{dL}{dz}\cfrac{dz}{dy}....\cfrac{dj}{dw_i}$ 수식에서 $\cfrac{dL}{dz}\cfrac{dz}{dy}...$ 는 현재 노드를 기준으로 출력 노드쪽에 있는 노드들의 Loss에 대한 기울기 값이 됩니다. 글로만 풀어쓰니 이해가 어려우므로 그림을 통해서 다시 글을 이어가겠습니다.
위 그림은 어떤 특정 $x$라는 값을 받아서 함수 $f$를 통해서 $y$라는 출력을 만드는 과정을 계산 그래프 형태로 나타낸 것입니다. 딥러닝 모델이란 이러한 과정이 수십, 수천개가 모여서 하나의 네트워크를 이룬 형태입니다. 딥러닝 모델의 일부인 한 노드에 대한 그래프인 위 그림을 예시로 보면 $\cfrac{\partial L}{\partial y}$은 $\cfrac{dL}{dz}\cfrac{dz}{dy}...$ 부분을 의미하고, $\cfrac{\partial y}{\partial x}\cfrac{\partial L}{\partial y}$은 $\cfrac{dL}{dz}\cfrac{dz}{dy}....\cfrac{dj}{dw_i}$ 부분을 의미합니다.
즉, 우리가 특정 $L$에 대한 $x$의 기울기를 구하고 싶으면 현재 노드 기준으로 출력 노드까지에서 구한 기울기를 통해서 현재의 기울기를 구할 수 있습니다. 이때 $\cfrac{\partial y}{\partial x}$ 같은 경우는 아래와 같이 단순하게 구할 수 있습니다.
$$\cfrac{\partial y}{\partial x} = f'(x) $$
$\cfrac{\partial L}{\partial y}$은 $\cfrac{\partial y}{\partial x}$와 같이 각 노드의 기울기를 구하는 과정을 출력쪽 노드들에서 Chain Rule을 통해서 구할 수 있습니다.
이렇게 구한 기울기는 Gradient Descent와 같은 방법을 통해서 weight를 업데이트하면 됩니다. 사실 Gradient Descent에서 weight를 업데이트하기 위해서 backpropagation을 사용하는 것이므로 조금 주객전도된 느낌이 있는 문장입니다. 일반적으로 Gradient Descent에서 weight를 업데이트하는 수식은 다음과 같습니다.
$$ w^{t+1} = w^t - \alpha * \cfrac{dL}{dw^t}$$
Reference
'AI' 카테고리의 다른 글
CutMix (0) | 2022.01.27 |
---|---|
Cross Entropy를 사용하는 이유 (0) | 2021.11.12 |
[Metric] Recall과 Precision (0) | 2021.10.03 |
[Metric] BLEU (Bilingual Evaluation Understudy) (0) | 2021.10.02 |
[Metric] ROUGE (Recall-Oriented Understudy for Gisting Evaluation) (0) | 2021.10.02 |