본문으로 바로가기

손실함수(Loss function)

category AI/딥러닝 기초 2019. 10. 11. 21:21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.






[손실함수 (Loss function)]


출력값과 정답의 오차를 정의하는 함수.

딥러닝에서 아래 두가지 손실함수가 많이 쓰임.




1. 오차제곱합 (Sum of Squares for Error, SSE)


출력층의 모든 뉴런에서 출력값과 정담의 차이를 제곱하고 이 값들을 모두 합함.


E : 오차제곱의 합

yk : 출력층의 각 출력값,

tk : 정답



1/2 은 미분을 쉽게하기 위해 존재.


신경망의 출력값이 정답과 어느정도 일치하는지 정량화 가능.

출력값과 정답이 연속적인 수치인 경우에 잘 맞기 때문에 회귀에서 자주 사용됨.


[코드]

1
2
3
4
import numpy as np
 
def square_sum(y, t):
    return 1.0 / 2.0 * np.sum(np.square(y-t))
cs




2. 교차 엔프로피 오차 (Cross Entropy Error, CEE)


두 분포간의 차이를 나타내는 척도로서 분류 문제에서 많이 사용됨.



위의 식은 다음과 같이 변형 가능함.



분류문제의 정답은 [ 0 0 1 0 ] 형태의 one-hot encoding으로 표현.

따라서 시그마 내부에서 tk가 1인 항만 살아남음. (나머지는 정답t가 0 이라서 없어짐)

결국 정답이 1인 항만 오차에 영향을 줌.


[-log(x) 그래프]


-logx 성질에 따라 -log(yk)은 정답에 가까울수록 작아지며 멀어질수록 무한대로 감.

따라서 출력값이 정답에서 멀어질수록 오차도 한없이 커지며 정답에 가까울수록 오차가 0에 가까워짐.


장점 : 출력값과 정답의 차이가 클 때 학습 속도가 빠름.



[코드]

1
2
3
4
import numpy as np
 
def cross_entropy(y, t):
    return -np.sum(t * np.log(y + 1e-7))
cs


log 함수의 진수부분이 0이 되면 자연로그가 마이너스 무한대로 발산.

이를 방지하기 위해 y에 아주 작은 값 1e-7을 더함.