▮ MSE의 단점
아래는 MSE(평균제곱오차)의 식이다.
$$ e = \frac{1}{2} \parallel y-o \parallel ^{2}_{2} $$
목표로 하는 값 $ y $와 모델의 출력값 $ o $의 차이가 클수록 모델에게 주는 벌점($e$)도 커지는 것이 학습하는데 있어서 적합해보인다.
그러나 왜 딥러닝에서는 MSE를 사용하지 않을까?
예를 들어 입력이 1.5이고 출력값이 0인 샘플이 모델에 입력되었다고 가정하고, 아래에 다음과 같은 두 모델이 있다고 가정하자
1) $ \hat{y} = \sigma (0.4x + 0.5) $ → $ \hat{y} = 0.7503 $
2) $ \hat{y} = \sigma (1.9x + 3.0) $ → $ \hat{y} = 0.9971 $
2번 모델이 원래 목표로 하는 값보다 차이가 더 크기 때문에 더 큰 벌점을 받아야 정상이다.
딥러닝에서는 loss를 줄이는 방향으로 weight와 bias를 업데이트하기 때문에, 이 업데이트에 사용되는 값이 벌점이다.
그리고 딥러닝에서는 gradient 값으로 weight와 bias를 업데이트하므로 gradient가 벌점이라고 생각할 수 있다.
$$ e = \frac{1}{2}(y-o)^2 = \frac{1}{2}(y-\sigma(wx+b))^2 $$
위 Loss를 weight와 bias로 각각 편미분하면 아래와 같은 gradient 식을 얻을 수 있다.
$ \frac{ \partial e}{ \partial w} = -(y-o)x \sigma '(wx+b) $
$ \frac{ \partial e}{ \partial b} = -(y-o) \sigma '(wx+b) $
1)의 결과
$ \frac{ \partial e}{ \partial w} = 0.2109 $
$ \frac{ \partial e}{ \partial b} = 0.1406 $
2)의 결과
$ \frac{ \partial e}{ \partial w} = 0.043 $
$ \frac{ \partial e}{ \partial b} = 0.0029 $
2번 식이 Loss가 더 큰데 gradient 값이 더 작은 현상이 발생하였다. 즉, 더 많이 틀린 상황에 더 낮은 벌점을 부과하게 되는 문제점이 발생한다.
물론 Loss가 더 큰 상황에 더 낮은 벌점을 부여하여도 어차피 gradient가 loss를 줄이는 방향으로 학습되기 때문에 Loss를 최소로 하는 목적 자체에는 언젠가 도달하겠지만 시간이 오래걸릴 것이다.
왜 이런 현상이 발생할까?
활성화함수(sigmoid를 사용했다고 가정)의 도함수는 입력값이 0일 때 가장 크고, 입력값이 커지거나 작아지면 0으로 수렴한다.
gradient 식을 보면 sigmoid의 도함수가 포함되어 있음을 알 수 있다.
$$ \sigma'(wx+b) $$
$ wx+b $가 클 수록 gradient 값은 작아지기 때문에 위와 같은 현상이 발생하는 것이다.
▮ Cross Entropy
$$ H(P,Q) = - \sum_xP(x)logQ(x) $$
$ P $는 정답 레이블, $Q $는 모델의 출력값이라고 가정하자.
정답 레이블이 0일 경우(y=0), 아래 식으로 통일할 수 있다.
$ P(0) = 1 - y Q(0) = 1 - o $
$ P(1) = y Q(1) = o $
위 값을 토대로 Cross Entropy 식을 작성해보면 아래와 같다.
$$ e = -y log o + (1-y)log(1-o) $$
$y=1$일 때, $o=0.98$인 경우는 예측이 잘 된 경우이다.
이 때 cross entropy값은 0.0291로 매우 낮다.
반면 $y=1$일 때, $o=0.0001$이라면 예측이 잘 못된 경우이다.
이 때 cross entropy값은 13.28777로 크기 때문에 목적함수로서 적합함을 알 수 있다.
그렇다면 MSE의 느린 학습 문제를 Cross Entropy는 해결할 수 있을까?
$ \frac{\partial{e}}{\partial{w}} = -( \frac{y}{0}- \frac{1-y}{1-0}) \frac{\partial{o}}{\partial{w}} $
$ = -( \frac{y}{0}- \frac{1-y}{1-0})x\sigma'(z) $
$ = -x( \frac{y}{0}- \frac{1-y}{1-0})o(1-o) $
$ = x(o-y) $
weight와 bias로 편미분한 gradient 식은 아래와 같다.
$ \frac{ \partial e}{ \partial w} = x(o-y) $
$ \frac{ \partial e}{ \partial b} = (o-y) $
아까 MSE를 계산할 때 사용한 같은 값들을 이용하여 계산해보면 다음과 같다.
1)의 결과
$ \frac{ \partial e}{ \partial w} = 1.1255 $
$ \frac{ \partial e}{ \partial b} = 0.7503 $
2)의 결과
$ \frac{ \partial e}{ \partial w} = 1.4957 $
$ \frac{ \partial e}{ \partial b} = 0.9971$
loss가 더 큰 2)에서 더 큰 gradient가 발생함을 확인할 수 있다!