softmax
와 더불어서 NLL
을 이용하여 딥러닝의 Loss
를 만들 수 있습니다. 적용하는 방법은 간단하며 구현 방법에 따라 다음 두가지 방법으로 나뉩니다. 방법은 ① argmax
를 취하는 방법과 ② 모든 logit
에 적용하는 방법이 있습니다.① argmax
를 취하는 방법 : 어떤 입력에 대한 sofrmax
출력 중 가장 큰 값을 다음 식에 적용하면 됩니다. y는 softamx 출력값 중 가장 큰 값입니다.
log 함수와 음의 부호를 사용함으로써 softmax의 출력이 낮은 값은 $-log(y)$ 값이 크도록 만들 수 있고 softmax의 출력이 높은 값은 -log(y)의 값이 0에 가깝도록 만든다.
정답 클래스의 softmax 출력이 높음 값을 가진다면 출력이 정확하기에 $-log(y)$가 매우 작아진다. Loss가 작아지는 것처럼 보일수 있다. 반대로 정답 클래스의 출력이 낮다면 $-log(y)$가 큰 값을 지녀 높은 Loss를 가진다고 볼수 있다.
② 모든 logit
에 적용하는 법 : 위에서 다룬 argmax 부분을 제거하고 softmax를 취해 나온 모든 logit에 대해 loss를 구하는 방법이다. 정답에 해당하는 클래스는 $-log(a)$
정답이 아니라면 $-log(1-a)$
를 적용한다.
<aside> 💡 pytorch에서는 2번이니 알고 있어라.
</aside>