본문 바로가기

AI시작

2-2 Loss Function

일단 Lost 함수, Cost 함수, 손실 함수는 모두 같은 말입니다.

목적은 무조건 모델의 불만족을 수치화하는 것인데,

다시 말하면 내 모델에서 계산한 결과와 실제 결과의 차이를 나타내는 것입니다.

 

조금 구체적으로 말해보겠습니다.

데이터가 다음과 같고  추정치가 다음과 같을 때

이 때 데이터와 추정치의 괴리도를 나타내는 스칼라 함수를 손실 함수라 한다.

 

손실 함수는 학습을 통해 얻은 데이터의 추정치가 실제 데이터와 얼마나 차이나는지 평가하는 지표로 쓰인다.

이 값이 크면 클수록 많이 틀렸다는 의미고, 이 값이 0 이라는 것은 '무손실' 즉 완벽하게 추정할 수 있다는 의미가 된다.

L 은 때때로 비용 함수 Cost Function라고 불리기도 한다.

 

MSE(Mean of Squared Error)

def mean_squared_error(y, t):

    return 0.5*np.sum((y-t)**2)

#정답은 2

t = [0,0,1,0,0,0,0,0,0,0]

 

y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]

print(mean_squared_error(np.array(y1), np.array(t)))

 

y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]

print(mean_squared_error(np.array(y2), np.array(t)))

0.0975

0.5975

 

크로스 엔트로피

 

교차엔트로피는 로그의 밑이 e인 자연로그를 예측값에 씌워서 실제 값과 곱한 후 전체 값을 합한 후 음수로 변환한다.

 

실제 값이 원핫인코딩(one-hot encoding; 더미변수처럼 1~9까지 범주로 했을 때 정답이 2일 경우 2에는 '1'을 나머지 범주에는 '0'으로) 방식 일경우에는 2를 제외한 나머지는 무조건 0이 나오므로 실제값일 때의 예측값에 대한 자연로그를 계산하는 식이 된다.

 

실제 값이 2인데 0.6으로 예측했다면 교차 엔트로피 오차는 -log(1*0.6) = -log0.6 이 된다. = 0.51

 

교차 엔트로피는 출력이 1일 때 0이 되며 x가 커질수록 0에 가까워지고 x가 작아질수록(0에 가까워질수록) 값이 작아진다(음의방향).

def cross_entropy_error(y,t):

    delta = 1e-7

    return -np.sum(t * np.log(y+delta))

 

# y + delta 이유는 만약 y 0 때는 infinite 값을 반환하므로 계산이 안되기 때문에 아주 작은 임의의 값을 입력하여 값이 -inf 되는 것을 막는다

t = [0,0,1,0,0,0,0,0,0,0]

 

y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]

print(cross_entropy_error(np.array(y1), np.array(t)))

 

y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]

print(cross_entropy_error(np.array(y2), np.array(t)))

0.510825457099

2.30258409299

 

 

 

'AI시작' 카테고리의 다른 글

6-1 Faster RCNN, YOLO, SSD 심플 차이점  (0) 2019.09.05
4-1 고급 Optimization  (0) 2019.09.03
3-4. MNIST 분석  (0) 2019.09.02
1. 딥러닝 영상분석 3총사를 구분하시나요  (0) 2019.09.01
3-3 활성화 함수  (0) 2019.08.19