regression 문제들은 보통 모델의 output을 ground truth와 mse/mae 등 loss 함수로 계산 하는 것과 달리 classification 문제에선 조금 더 복잡한 loss 함수가 필요하다. 오늘은 pytorch의 cross entropy loss에 대해 알아보고자 한다.
(pytorch 사이트 설명 refer)
input is expected to contain raw, unnormalized scores
softmax 함수는 모델에서 나온 classification score를 0과 1 사이로 normalize 해주는 함수, 또한 output들의 합이 1이 되고, large number와 small number의 gap을 커지게 해줌
input of softmax is often referred as 'logits'
2개의 class가 있을 떄는 보통 sigmoid함수를 쓴다
softmax의 output과 label vector의 차이를 구할때 Cross-entropy를 보통 사용함
pytorch에서 제공하는 cross entropy 함수는 softmax를 이미 포함함
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
지금부터 설명은 아래 블로그를 참조했습니다.
cross entropy 설명 블로그 링크
Cross Entropy Loss는 softmax와 cross-entropy를 합쳐놓은 것
import torch.nn as nn
criterion = nn.CrossEntropyLoss()
...
loss = criterion(input, target)
class가 2개일 때는 BCELoss가 나음
torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
import torch.nn as nn
criterion = nn.BCELoss()
...
loss = criterion(nn.Sigmoid(input), target) # 또는 nn.Softmax(input)
BCELoss는 softmax가 포함안됨, 그래서 보통 loss 계산전에 위와 같이 sigmoid activation을 해줍니다.
BCEWithLogitsLoss
위의 BCELoss앞에 Sigmoid를 더한 것
torch.nn.BCEWithLogitsLoss(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)