프로필사진

IT Anthology/encyclopedia

[밑러닝] 인공신경망의 학습 지표, 손실함수(loss function)

다각 2020. 3. 17. 15:38

* 이 글은 <밑바닥부터 시작하는 딥러닝2 (저자: 사이토 고키)> 책을 읽으며 정리한 글입니다.
* 나중에라도 제가 참고하기 위해 정리해 두었으며, 모든 내용을 적은 것이 아닌,
필요하다고 생각되는 부분만 추려서 정리한 것임을 미리 밝힙니다.


목차

  1. 손실 함수(loss function)란
  2. 평균 제곱 오차(Mean Squared Error, MSE)
  3. 교차 엔트로피 오차(Cross Entropy Error, CEE)

1. 손실 함수(loss function)

손실 함수는 신경망의 성능을 나타내는 지표라 할 수 있다. 신경망이 얼마나 '나쁘냐'를 나타내기 때문에, 손실 함수의 값이 클수록 신경망의 성능이 나쁜 것이다. 이때 주의할 점은, 막연하게 좋냐 나쁘냐를 나타내는 게 아니라, 숫자로 정확하게 나타내는 것이다. 즉, '얼마나 나쁘냐'를 어떤 방식으로 표현하냐에 따라 여러가지의 손실 함수가 나타날 수 있다.

여기서 '정확도'가 아닌, 음의 값인 '손실 함수'를 택하는 이유는, 미분 가능한 함수를 이용하여 신경망 학습을 효과적으로 하기 위함이다. 이는 다음 포스트에서 조금 더 자세히 살펴보도록 하겠다.

 

2. 평균 제곱 오차(Mean Squared Error, MSE)

평균 제곱 오차는 식 자체가 어떤 값으로부터 얼마만큼의 거리만큼 떨어져 있는지 측정하는 방식으로 이루어져있다. 따라서 회귀(regression) 에 많이 이용된다. 평균 제곱 오차에 대한 식은 다음과 같다.
$$
E = \frac {1}{2}\sum_{k}(y_k - t_k)^2
$$

여기서 $y_k$는 신경망이 추정한 값이고 $t_k$는 정답 레이블, $k$는 데이터 차원 수를 나타낸다. 이를 파이썬으로 구현하면 다음과 같다.

def mean_squared_error(y, t):
    return 0.5 * np.sum((y-t)**2)

 

3. 교차 엔트로피 오차(Cross Entropy Error, CEE)

교차 엔트로피 오차는 분류(classification) 문제에서 자주 사용된다.
교차 엔트로피 오차에 대한 식은 다음과 같은데, 실제 분포 q를 예측 모델링 분포인 p를 통해 구하는 형식이다. 실제 분포 q를 $t_k$로, 예측 모델링한 분포를 $y_k$로 기입하면 다음과 같다. (참고 : Understanding binary cross-entropy log loss: a visual explanation)

$$
E = -\sum_k{t_k \log y_k}
$$

이를 파이썬으로 구현하면 다음과 같다.

def cross_entropy_error(y, t):
    delta = 1e-7
    return -np.sum(t * np.log(y+delta))

(여기서 delta를 더해준 이유는 y가 0일때 무한대로 발산하는 것을 막기 위함이다.)
mnist 데이터셋처럼, 10개의 class를 가지는 데이터에 대한 교차 엔트로피 오차 구하는 과정을 다음의 예제로 살펴보자.

t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
y = [.1, .05, .6, .0, .05, .1, .0, .1, .0, .0]
cross_entropy_error(np.array(y), np.array(t))

위의 예제에서, y는 0.6의 확률로 '2'를 예측했고, 이는 t의 답과 일치한다. 위를 계산하면 교차 엔트로피 값은 약 0.51이 나온다.
위의 식을 잘 살펴보면, 원-핫 인코딩을 통해 정답 슬롯에 있는 확률만 뽑아내어 본다는 사실을 알 수 있다. (정답이 아닌 라벨은 모두 0이 곱해진다.)

반면, 제대로 예측을 하지 못했을 경우를 생각해보자.

t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
y = [.1, .05, .1, .0, .05, .1, .0, .6, .0, .0]
cross_entropy_error(np.array(y), np.array(t))

위의 예제에서는 y가 0.6의 확률로 '7'을 예측한다. 위를 계산하면 교차 엔트로피 값은 약 2.30이 나온다. 오차가 커지는 것을 볼 수 있다. 실제 로그 함수를 생각해보면 다음과 같은 그래프가 그려진다.


즉, 정답을 높은(1에 가까운) 확률로 계산했을 때는 오차가 0에 가까워지고, 낮은(0에 가까운) 확률로 계산할 수록 교차 엔트로피 오차는 커지는 것을 볼 수 있다.

 


 

정리
지금까지 대표적인 손실 함수에 대해 간략히 살펴보았다. 이외에도 손실 함수의 종류는 매우 많다. 다음 포스트에서는 이 손실 함수와 미분을 이용하여 어떻게 신경망을 학습시키는 지 다루도록 하겠다.