신경망의 학습 - 손실함수
밑바닥부터 시작하는 딥러닝 : 파이썬으로 익히는 딥러닝 이론과 구현
실습 환경 : google colab
4장 - 신경망의 학습
책에서는 로컬 개발환경에서 실습하도록 되어있지만
google clolab에서 실습을 진행. 그에 맞게 코드 수정.
범용능력 : 아직보지 못한 데이터 (훈련데이터에 포함되지 않은 데이터)로도 문제를 올바르게 풀어내는 능력.
오버피팅 (Overfitting) : 한 데이터셋에만 지나치게 최적화된 상태.
손실함수 (loss function) : 신경망 성능의 나쁨을 나타내는 지표. 현재의 신경망이 훈련데이터를 얼마나 잘 처리하지 못하는지를 나타낸다. => 숫자가 낮을수록 성능이 좋다
손실함수 - 오차제곱합
오차제곱합 : (sum of squares for error , SSE) : 각 원소의 출력값과 정답 레이블 값의 차(-) 를 제곱(^2) 한 후 그 총합을 구한다.
def sum_squares_error(y, t):
return 0.5 * np.sum((y - t)**2)
# 정답은 2
t = [0, 0, 1, 0, 0, 0, 0, 0 ,0, 0 ]
# 정답이 2일거라고 추정한 확률은 0.6
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
sum_squares_error(np.array(y), np.array(t))
#정답이 7일거라고 추정한 확률은 0.6 . 실제 정답은 2.
y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
sum_squares_error(np.array(y), np.array(t))
각 계산식 단계를 엑셀로 풀어보자..
손실함수 - 교차엔트로피 오차
교차엔트로피 오차 (cross entropy error, CEE) : 정답의 자연로그를 계산한다.
(ex: 정답 레이블은 '2'가 정답이라고 하고 이때 신경망의 출력이 0.6 이라면 -log0.6 이 된다.)
좀더 상세하게 풀면 엑셀수식으로 보면 log(0.6, 2.71828) * -1 이 된다.
2.71828은 자연상수 e 이다.
https://ko.wikipedia.org/wiki/%EC%9E%90%EC%97%B0%EB%A1%9C%EA%B7%B8%EC%9D%98_%EB%B0%91
자연로그의 밑 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 자연로그의 밑(base of the natural logarithm)[1]은 무리수인 상수로 2.71828 18284 59045 23536 02874 ⋯ {\displaystyle 2.71828\ 18284\ 59045\ 23536\ 02874\ \cdots } 로 나타내어지
ko.wikipedia.org
# 교차엔트로피 오차 (cross entropy error, CEE)
def cross_entropy_error(y, t):
delta = 1e-7 # 0.0000001
return -np.sum(t * np.log(y + delta)) # y가 0일 경우 -inf, 무한대가 되어 계산이 되지 않음. 그래서 아주 작은값(delta)을 더해준다.
1e-7을 숫자형으로 표현하면 ??
https://calculationcalculator.com/1e-7-to-number
Convert 1e-7 to Number - Calculation Calculator
What is the Written Out Form of 1e-7? Here's how to Convert 1e-7 to Number Format using the formula, step by step instructions are given inside
calculationcalculator.com
# 정답은 2
t = [0, 0, 1, 0, 0, 0, 0, 0 ,0, 0 ]
# 정답이 2일거라고 추정한 확률은 0.6
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
cross_entropy_error(np.array(y), np.array(t))
# 정답은 2
t = [0, 0, 1, 0, 0, 0, 0, 0 ,0, 0 ]
#정답이 7일거라고 추정한 확률은 0.6 . 실제 정답은 2.
y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
cross_entropy_error(np.array(y), np.array(t))