-
Notifications
You must be signed in to change notification settings - Fork 3
Loss Function
BIBI edited this page Mar 8, 2020
·
13 revisions
- 모델에서 생성된 값과 실제 데이터의 값이 차이나는 정도를 나타내는 함수
- loss function의 값을 최소화하는 방식으로 딥러닝 모델 학습
- neural network에서의 최적화 : output과 label 차이를 Error로 정의한 후, 이 값을 줄이도록 parameter를 바꾸어 나가는 것

- 주로 regression 문제에 사용한다.
Classification 과 같은 경우, 맞다/아니다가 판별이 가능하지만, 주식 가격 예측과 같은 수치 판단은 애매한 경우가 많다.
-
ex. 주식
- GT: 100,000원, output: 95,000원
- output이 GT와 동일하진 않지만, 이 모델이 얼마나 잘 판단한 것인지 애매하다.
- 따라서 실제 값과 예측값의 차이를 기준으로 오차를 판단해야 한다.
-
MSE 값이 작은 바람직한 추정량이란, 불편성과 효율성을 만족하는 값을 의미한다.
- 불편성(unbiasedness): 추정량의 평균이 가능한 한 모수의 평균에 근접
- 효율성(efficiency): 추정량의 분산이 동시에 작아야 함
-
즉 MSE는 정답셋과의 평균적인 차이 뿐만 아니라 각각의 출력값이 정답과 얼마나 차이가 크게 나는지도 반영한다.
주어진 확률 변수 X에 대해, 확률 분포 p를 찾아보자. 확률 분포 p를 알 수 없기 때문에 p를 예측한 근사 분포 q를 생각한다. 정확한 확률 분포를 얻기 위해 q의 parameter들을 update하면서 q를 p에 근사할 것이다. 즉 두 분포의 차이를 측정하는 KL(p|q)가 최소가 되는 q를 찾는 문제가 된다.
두번째 항은 근사 분포 q에 무관한 항이므로 KL Divergence를 최소화하는 것은 결국 첫번째 항이다. 그러므로 첫번째 항을 최소화하는 q를 찾아야 한다.
-
p_i: 실제 확률 분포 -
q_i: p를 근사한 분포
- classification(분류문제)에는 ACE(Average cross-entropy)를 사용한다.
Model X, Y가 있고, class는 A,B,C 3개가 있다.
| output | label | A | B | C | correct? | |||
|---|---|---|---|---|---|---|---|---|
| 0.3 | 0.3 | 0.4 | 0 | 0 | 1 | Y | ||
| 0.3 | 0.4 | 0.3 | 0 | 1 | 0 | Y | ||
| 0.1 | 0.2 | 0.7 | 1 | 0 | 0 | N |
- 1,2는 겨우 맞췄고 3은 완전히 틀렸다.
| output | label | A | B | C | correct? | |||
|---|---|---|---|---|---|---|---|---|
| 0.1 | 0.2 | 0.7 | 0 | 0 | 1 | Y | ||
| 0.1 | 0.7 | 0.2 | 0 | 1 | 0 | Y | ||
| 0.3 | 0.4 | 0.3 | 1 | 0 | 0 | N |
- 1,2는 확실히 맞췄으나 3은 아쉽게 틀렸다.
[단순 분류 오차]
* model X : 1/3 = 0.33
* model Y : 1/3 = 0.33
[분류 정확도]
* model X : 2/3 = 0.67
* model Y : 2/3 = 0.67
- 단순 분류 오차 계산은 틀린 개수에 대한 결과만 있을 뿐, label과 비교하여 얼마나 많이 틀렸는 지는 제공하지 않는다.
model X
* 첫번째 sample : -( (ln(0.3)*0) + (ln(0.3)*0) + (ln(0.4)*1) ) = -ln(0.4)
* 3개 sample 모두에 대한 계산 및 ACE (Average cross-entropy)
* -(ln(0.4) + ln(0.4) + ln(0.1)) / 3 = 1.38
model Y
* 3개 sample 모두에 대한 계산 및 ACE (Average cross-entropy)
* -(ln(0.7) + ln(0.7) + ln(0.3)) / 3 = 0.64
Model X보다 Y가 오차가 더 작다. 즉 어떤 model이 더 잘 학습 되었는 지를 알 수 있다.
model X
* 첫번째 sample : (0.3 - 0)^2 + (0.3 - 0)^2 + (0.4 - 1)^2 = 0.09 + 0.09 + 0.36 = 0.54
* 3개 sample 모두에 대한 계산 및 MSE(Mean squared error)
* (0.54 + 0.54 + 1.34) / 3 = 0.81
model Y
* (0.14 + 0.14 + 0.74) / 3 = 0.34
MSE는 틀린 sample에 대해 더 집중한다. 맞은 것과 틀린 것 모두에 똑같이 focus해야 하는데 여기서는 그렇지 않다.
- background : backpropagation 중에 label에 따라 output을 1.0 또는 0.0으로 설정하려고 한다.
- MSE를 사용할 경우
- 가중치 계산에서 기울기 값에 (output) * (1 - output)이라는 조정 요소가 포함된다.
-
계산 된 출력이 0.0 또는 1.0에 가깝거나 가까워짐에 따라 (output) * (1 - output)의 값은 점점 작아진다.
- ex) output = 0.6이라면 (output) * (1 - output) = 0.24이지만 출력이 0.95이면 (output) * (1 - output) = 0.0475이다.
- 그렇게 되면 조정 요소가 점점 작아지면서 가중치 변화도 점점 작아지고 학습 진행이 멈출 수도 있다.
- ACE를 사용할 경우
- (output) * (1 - output) 항이 사라진다.
- 따라서 가중치 변화는 점점 작아지지 않으므로 학습이 멈추는 일이 발생하지 않는다.
SVM 등에서 Maximum-margin classification에 사용하기 위한 Loss function