지도학습의 머신러닝은 회귀 문제 / 분류 문제 중 하나에 속한다. 회귀 문제라면 최종 레이어에서 계산한 예측값 ($\hat{y}_i$)과 실제값 ($y_i$)와의 mean squared error $( L = \dfrac{1}{2} \sum (y_i - \hat{y}_i)^2 )$을 최소화하는 방향으로 학습이 진행된다. 분류 문제라면 최종 레이어에서 계산한 logit을 softmax 함수에 한번 넣고 ($\hat{y}_i = softmax(z_i)$), 이 확률값과 실제 라벨의 cross entropy $( L = \sum^C_{i=1} y_i \log \hat{y_i} )$을 최소화하는 방향으로 학습이 진행된다.
어느 경우가 됐든, backpropagation을 할 때, 최초로 예측값에 대한 loss의 derivation을 구해야 한다.
\[ \delta = \dfrac{\partial L}{\partial \hat{y}} \]
본 포스팅에서는 회귀 / 분류 문제에서 서로 다른 loss function에 따른 $\delta$가 어떻게 도출되는지 수식으로 직접 확인해보고자 한다.
Regression
회귀 문제 상황에서는 간단하게 유도를 할 수 있다. 먼저 mean squared error을 다시 정의해보자.
\[ L = \dfrac{1}{2} \sum^{n}_{i=1} (y_i - \hat{y}_i)^2 \]
데이터는 총 $n$개라고 가정한다. 각각의 예측값에 대한 derivative는 아래와 같이 간단하게 유도할 수 있다.
\[ \dfrac{\partial L}{\partial \hat{y}_i} = - (y_i - \hat{y}_i) = \hat{y}_i - y_i \]
Binary classification
다중 분류 문제를 살펴보기 전에, 이진 분류 문제부터 살펴보자. binary cross entropy는 아래와 같이 정의된다.
\[ L = -\sum^{n}_{i=1} ( y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) ) \]
여기서 $\hat{y}_i = \dfrac{1}{1 + \exp(-z_i)}$로 정의된다. 이제 $\dfrac{\partial L}{\partial z_i}$을 유도해보자.

흥미롭게도 regression 문제와 동일하게 gradient가 유도됨을 확인할 수 있다.
Multi-class classification
이제 이진 분류를 확장하여 다중 분류 문제에서 categorical cross entropy loss의 backpropagation이 어떻게 유도되는지 살펴보자. 우선 하나의 데이터에 대한 categorical CE을 살펴보자.
\[ L = - \sum^C_{i=1} y_i \log \hat{y}_i \]
최종 FC의 결과로 나온 logit을 $Z$라고 정의하면 softmax는 아래와 같이 정의된다.

여기서 $\dfrac{\partial L}{\partial z_j} = - \sum^C_{i=1} y_i \dfrac{\partial \log \hat{y}_i}{\partial z_j}$을 구해보자.

흥미롭게도, 이전과 동일하게 예측값 - 실제값의 형태로 유도되었다. 벡터 notation로 나타내면 아래와 같다.

$N$개의 데이터가 있다면, $N \times C$의 jacobian matrix로 표현이 된다.
Conclusion
사실 회귀 문제이든, 분류 문제이든, 데이터의 분포가 exponential family을 따른다고 가정하면 파라미터의 gradient가 (예측값 - 실제값)에 독립변수가 곱해진 형태로 표현될 수밖에 없음을 이 포스트에서 밝힌바 있다. 이 포스트는 파라미터의 gradient을 유도한게 아니라 backpropagation을 위해서 FC layer의 output에 대한 gradient을 구해본 것이지만 그 형태는 동일하게 유도되었다. 회귀 / 분류 문제에서 loss function을 직접 정의해보고 반드시 사용할 수 밖에 없는 partial derivative을 직접 유도함으로써 내부적으로 어떻게 backpropagation이 진행되는지 이해를 할 수 있었다.
댓글