티스토리 뷰

Programming

신경망의 학습 - 손실함수

애스트로스 2024. 1. 1. 23:11

밑바닥부터 시작하는 딥러닝 : 파이썬으로 익히는 딥러닝 이론과 구현 

 

실습 환경 : 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))

 

 

 

 

 

댓글