Hello Computer Vision

베르누이 분포와 Cross entropy 본문

mathematics

베르누이 분포와 Cross entropy

지웅쓰 2023. 12. 23. 22:29

분류문제에서 손실함수로 Cross entropy를 주로 사용하며 회귀문제에서는 MSE를 사용한다. 이 전에 MLE관점에서 MSE 를 사용하는 이유를 기록했는데 이번에는 cross entropy를 기록해보려고 한다.

 

우선 분류문제일 때 MSE를 사용하지 않는 것에 대해서 당연하지만 써보자면 정답 y값이 연속형 값이 아니기 때문이라고 할 수 있다. y값은 범주형의 type을 가지기 때문에 MSE를 사용하지 않는 것이다. y값이 범주형 변수일 때는 어떤 방법을 사용할 수 있을까? 가장 간단하게 베르누이 분포를 따른다고 할 수 있다. 베르누이 시행은 결과 두 가지 중 한가지만 나오는 나오는 시행이며 베르누이 확률분포는 다음과 같이 나타낼 수 있다. 

$ f(Y = y; \pi) = \pi^{y} (1 - \pi)^{1-y}, y = {0, 1} $

우리가 문제를 풀 때 사용하는 MLE 방식은 예측한 값의 가능도가 최대화 되도록 하는 것이다. 그렇다면 해당 함수에 대해 편리성을 위해 log 를 씌워주면 된다.

$ \sum (y log(\pi) + (1 - y)log(1 - \pi)) $ 

위와 같이 나타낼 수 있다. 여기서 항상 헷갈리는 점이 있다. 예를 들어 딥러닝을 훈련시킨 다 할 때 label값이 [1,0,0,0] 이고 [0.8, 0.1, 0.1, 0] 으로 예측했을 때 label 0에 대한 손실 값도 계산되는가? 답은 아니오이다(pytorch로 검증했다). 그  이유는 사실 너무나도 간단하다. 첫번째 수식에 대한 베르누이 함수에 대한 손실값은 클래스 각각에 대한 손실값을 나타낸 것이기 때문이다. 예를 들어 정답 클래스가 1일 때 오른쪽 term에 대한 값이 추가가 되는가? 아니다. 정답 클래스가 0일 때 왼쪽 term에 대한 손실이 추가되는가? 이것도 아니다. 

 

단순히 많은 글, 수식에서 설명한 베르누이 함수에서 0,1로 나눈 것은 그냥 클래스가 0,1에 대해서 구분지었기 때문이다. 

 

패키지에서 제공하는 데이터셋에서는 0이라는 클래스보다는 1이라는 정답 클래스를 사용한다. 따라서 우리가 사용하는 수식은 $ \sum (y log \hat{y}) $ 인데 여기서 y값은 1이고 $hat{y}$는 우리가 예측한 확률 값이다. 따라서 loss값이 0이 되게 하려면 log 안에 들어가있는 $hat^{y}$ 값을 1로 만들어 loss를 0으로 수렴하게 만드는 것이 MLE관점에서의 분류문제를 해결하는 것이다.

 

참조

https://curt-park.github.io/2018-09-19/loss-cross-entropy/