loss function

heyme·2022년 2월 9일
0

딥러닝

목록 보기
3/10

loss function을 말로 정의하면 모델의 예측과 정답의 차이를 수치화 한 것, 즉 가중치 W가 얼마나 별로인지를 정량화 한 것이라고 할 수 있겠다. 우리의 목표는 손실함수의 값을 최소화 하는 W와 bias를 찾는 것이다. 먼저, loss 계산 과정을 쉽게 이해하기 위해 cs231n 3강 예제를 가져왔다. 아래 그림은 3가지 class가 있을 때 각각의 이미지 x에 대해 가중치 W를 이용하여 나온 예측값 y를 보여준다.

여기에서 loss는 max(0, 예상값 - 정답값 + margin) 으로 정의한다. margin은 정답과 예측 사이에 간격을 두어 구분을 명확히 하기 위한 설정이다. 각각의 그림이 갖는 점수를 보면,
고양이는 고양이일 것이라고 예상한 값(3.2)보다 자동차로 예상한 값(5.1)이 더 크게 나왔다.
이 경우 loss는 가장 크게 나온 예상값에서 정답값을 뺀 5.1 - 3.2 + 1 = 2.9 가 된다.
반면에 자동차의 경우, 자동차일 것이라고 예상한 값이 가장 큰 4.9 이므로 고양이나 개구리 모두 safety margin을 더해서 정답을 빼도 음수가 나오므로 loss는 max인 0이 된다.

이를 코드로 표현하면 아래와 같다.

def L_i_vectorized(x, y, W):
   scores = W.dot(x)
   margins = np.maximum(0, scores - scores[y]+1)
   margins[y] = 0
   loss_i = np.sum(margins)
    
   return loss_i

이제 우리가 진짜 사용하는 loss function, 손실함수에 대해 알아보자. 크게는 회귀 모델에서 자주 사용하는 MSE, RMSE 와 분류 모델에서 사용하는 CrossEntropy 로 나눠 설명할 수 있다.

① MSE, mean square error
연속형 변수에서 가장 많이 사용하는 손실함수 중 하나이다. 예측값과 실제값의 차를 제곱하여 평균낸 값으로, 수식으로는 L = 1/N * ∑(yi - y)^2 으로 표현 가능하다. 값을 제곱하기 때문에 차이가 클수록 손실 함수에도 그 차이도 뚜렷하게 나타나기에 수렴하기 좋다. 이는, 값의 오차가 1보다 작거나 많이 크면 원래 값보다 상대적으로 더 많이 반영된다는 뜻도 된다.

② RMSE, Root Mean Square Error
MSE에 루트를 씌운 값으로, MSE의 단점이 해결되지만 루트때문에 첨점이 생겨 미분 불가능한 지점이 존재한다. MAE(Mean Absolute Eror)와도 비슷하지만 그보다 이상치 값에 더 민감하다.

③ CrossEntropy
ⅰ) Binary CrossEntropy
이진 분류모델에서 사용하며 L = -1/N * ∑{t·log(y) + (1-t)·log(1-y)} 으로 표현한다.
사용하기 전에 먼저 Softmax를 사용하여 0과 1 사이의 값으로 변환 후 사용한다.

criterion = torch.nn.BCELoss()
loss = criterion(nn.Softmax(input), target)

ⅱ) categorical CrossEntropy
class가 3개 이상인 다중 분류모델에서 사용되며, 수식으로는 L = -1/N * ∑·∑t·log(y) 으로 표현한다. 보통은 softmax와 cross-entropy를 결합한 CrossEntropyLoss를 많이 사용한다.

criterion = torch.nn.CrossEntropyLoss()
loss = criterion(input, target)

0개의 댓글