상세 컨텐츠

본문 제목

손실함수에 대해서

Python

by 경밤 2022. 7. 24. 22:58

본문

반응형

손실함수

손실함수란 신경망 성능의 나쁨을 나타내는 지표이다. 그러니까, 값이 클 수록 성능이 좋지 못하다는 뜻이다. 왜 이런 부자연스러운 결과가 나오냐면, 그 식에서 답을 찾아 말할 수 있다. 손실함수로 사용하는 오차제곱합(SSE)와 교차 엔트로피 오차(CEE)에서, SSE의 경우 One-Hot-Encoding된 정답 레이블을 y(결과값, 또는 예측값)에서 뺀 것의 제곱을 더하고, CEE는 One-Hot-Encoding 된 정답 레이블을 곱하여, 즉 정답만 1로 된 것을 y의 자연로그(y가 클 수록 숫자는 작아진다)에 곱한다. 이후 -1를 곱하여서 양수로 만든다. 결국 SSE, CEE 모두 숫자가 클 수록 손실이 크다는 것을 의미하게 된다.

왜 손실함수를 사용하는가?

정확도를 지표로 삼아 가중치를 조정하기에는 정확도가 대부분의 상황에서 0이라는 점에서 무리가 있다. 따라서 손실함수를 사용하여(손실함수값은 매우 연속적이다), 그 가중치에 대한 손실함수를 미분하여 그것의 값이 0에 가깝도록 가중치를 조정한다. y가 존재하는데, 그 y는 어떤 활성화 함수를 거쳐 나온 것 이다. 가중치를 미분하여 조정하고, 결국에 활성화 함수를 거쳐 나온 것이 y인데 y에 관해서도 미분을 한다. 이때 이것이 0이면 또, 미분하기 어려워진다. 왜 미분을 하냐하면 또 다시 이걸 지표로 삼아서 더 나은 신경망을 만들기 위함이다.

SSE 구현

def sse(y, t):
	return (1/2)*np.sum((y-t)**2)

CEE 구현

def cee(y, t):
	d = 1e-5
    return -np.sum(t*np.log(y+d))

 

반응형

관련글 더보기