손실함수에 대해서
2022. 7. 24. 22:58ㆍPython
반응형
손실함수
손실함수란 신경망 성능의 나쁨을 나타내는 지표이다. 그러니까, 값이 클 수록 성능이 좋지 못하다는 뜻이다. 왜 이런 부자연스러운 결과가 나오냐면, 그 식에서 답을 찾아 말할 수 있다. 손실함수로 사용하는 오차제곱합(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))
반응형
'Python' 카테고리의 다른 글
Anaconda 환경 Pyinstaller Numpy, Pandas, SSL 문제 해결법 (0) | 2024.01.31 |
---|---|
[Kaggle] Drug Classification 데이터셋을 이용한 KNN 분류 실습 (0) | 2022.01.16 |
The self COVID-19 diagnosis site of South Korea and make it it do some processing automatically by python. (0) | 2020.07.24 |
[파이썬][딥러닝] 3층 순방향 신경망 구현하기 (0) | 2020.03.31 |
[파이썬][딥러닝] 퍼셉트론 - 활성화 함수 (0) | 2020.03.28 |