안녕하세요. cross entropy 잘 사용하고 계시죠? cross entropy 는 분류문제에서 loss로 사용되곤 하죠. 딥러닝에서 하는 일은 loss를 미분해서 parameter 를 업데이트 하는 것인데요. loss를 미분하기 위해서는 loss로써 사용하는 함수를 미분해야되지요. 분류문제에서는 cross entropy loss를 많이 사용하오니 cross entropy 의 미분을 잘 알아두어야 겠죠. 이번 글에서는 cross entropy 를 미분하는 방법에 대해 아주 간단하게 알아보겠습니다.
[딥러닝] Cross entropy loss(교차엔트로피 손실)의 미분
제가 이글에서 소개시켜드릴 내용은 아래와 같습니다. 잘 해봅시다!
목차
cross entropy란?
cross entropy 미분: 한샘플에 대해
cross entropy 미분: 배치단위에 대해
cross entropy란?
True label인 one hot vector $\mathbf{y}$를 추정하는 벡터 $\mathbf{\hat{y}}$의 성능을 측정하기 위해 cross entropy 를 사용하죠. 여기서 $\mathbf{y}$와 $\mathbf{\hat{y}}$ 의 조건이 아래와 같죠.
1. $\mathbf{y}$와 $\mathbf{\hat{y}}$ 모두 $K$차원의 벡터
2. $\mathbf{y}$는 one hot vector 이기 때문에 어떤 $c \in {1,…,K}$가 존재해서 $\mathbf{y}_c=1$이고 $l\neq c$일 때 $\mathbf{y}_l=0$
3. $\mathbf{\hat{y}}_l \geq 0, \sum_{l=1}^K \mathbf{\hat{y}}_l = 1$
이 때 cross entropy loss 는 아래와 같이 정의됩니다.
$$ L = – \sum_{l=1}^K \mathbf{y}_l \log \mathbf{\hat{y}}_l$$
그런데 $\mathbf{y}$는 one hot vector 이므로 특정 $c$가 존재하여 식이 아래처럼 바뀌겠네요.
$$ L = – \log \mathbf{\hat{y}}_c$$
만약에 예측해야 하는 $\mathbf{y}$가 배치안에 여러개 쌓여서 온다면 cross entropy loss 는 아래와 같이 정의됩니다.
$$ L_{\text{batch}} = – \frac{1}{B} \sum_{i=1}^B \sum_{l=1}^{K} \mathbf{y}_l^i \log \mathbf{\hat{y}}_l^i$$
이 경우에는 $i \in {1,…,B}$마다 $c(i)$가 존재해서 $\mathbf{y}_{c(i)}^i=1$이고 나머지 $l$에 대해선 $\mathbf{y}_l^i=0$이므로 아래와 같이 바뀝니다.
$$ L_{\text{batch}} = – \frac{1}{B} \sum_{i=1}^B \log \mathbf{\hat{y}}_{c(i)}^i$$
cross entropy 미분: 한샘플에 대해
이제 본격적으로 미분을 해보죠. $ L = – \log \mathbf{\hat{y}}_c$ 를 미분해보겠습니다. $l \neq c$인 $l$에 대해 미분할 경우 아래와 같이 0이 나옵니다.
$$ \frac{\partial L}{\partial \mathbf{\hat{y}}_l} = 0$$
$\mathbf{\hat{y}}_c$에 대해 미분할 경우 아래와 같은 식이 나옵니다.
$$ \frac{\partial L}{\partial \mathbf{\hat{y}}_c} = – \frac{1} {\mathbf{\hat{y}}_c} $$
이것을 정리해서 한번에 쓰면 아래와 같이 정리할 수 있어요.
$$\frac{\partial L}{\partial \mathbf{\hat{y}}_l} = -\delta [l-c] \frac{1 }{\mathbf{\hat{y}}_c} $$
여기서 $\delta[n]$은 $\delta[0]=1$이고 나머지 $n$에 대해 $\delta[n]=0$인 수열입니다.
cross entropy 미분: 배치단위에 대해
배치단위에 대한 loss $L_{\text{batch}} = – \frac{1}{B} \sum_{i=1}^B \log \mathbf{\hat{y}}_{c(i)}^i$를 미분해보겠습니다. 이것도 비슷한 결과가 나오죠.
$$\frac{\partial L_{\text{batch}}}{\partial \mathbf{\hat{y}}_l^i} = – \frac{1}{B} \delta[l-c(i)] \frac{1}{\mathbf{\hat{y}}_{c(i)}^i}$$
정리
이번에는 cross entropy 의 loss에 대해 알아보았습니다. 딥러닝에서 backpropagation 계산할 때 유용하게 써봅시다.