[PyTorch]step2: loss functions

Jae Gyeong Lee·2023년 6월 3일
0

손실함수(loss function)란 예측한 값(pred)과 실제 값(label)의 차이(오차)를 비교하기 위한 함수

  • 즉, 오차를 도출하기 위한 식

손실함수를 통해 '오차'를 구할 수 있고, 이 '오차'를 optimizer를 통해 역전파를 진행. 역전파를 통해 매개변수들을 업데이트하는 것.

  • 이 과정을 반복해서 '오차'를 최소화하는 매개변수를 찾는 것이 '학습'의 목표

ML/DL 분야에서는 Loss function, Cost function, Objective function가 같은 의미로 사용되는데 구체적인 차이는 아래와 같음.

  • Loss function: 한 개의 data point에서 나온 오차를 최소화하기 위해 정의되는 함수
  • Cost function: 모든 오차를 일반적으로 최소화하기 위해 정의되는 함수
  • Objective function: 어떠한 값을 최대화(혹은 최소화)시키기 위해 정의되는 함수

손실함수 =< 비용함수 =< 목적함수

http://dmqm.korea.ac.kr/activity/seminar/326

손실함수로 인해 모델의 성능이 달라질 수 있기 때문에 해결해야할 문제의 유형에 적합한 손실함수를 선택하는게 중요함.

  • 분류: Cross Entropy(대표적)
  • 회귀: MSE(대표적)

1. torch.nn.MSELoss

  • 평균 제곱 오차(Mean Squared Error)를 계산하는 손실 함수로, 회귀(Regression) 문제에 사용됩니다.
torch.nn.MSELoss(reduction='mean')
  • reduction: 손실 값을 어떻게 줄일지를 지정하는 인수로, 기본값은 'mean'입니다.

2. torch.nn.L1Loss

  • 평균 절대 오차(Mean Absolute Error)를 계산하는 손실 함수로, 회귀 문제에 사용됩니다.

3. torch.nn.CrossEntropyLoss

  • 교차 엔트로피 손실(Cross Entropy Loss)를 계산하는 손실 함수로, 분류(Classification) 문제에 사용됩니다. 일반적으로 다중 클래스 분류에서 사용되며, 모델의 출력값과 타깃 클래스 간의 차이를 계산합니다.
  • 소프트맥스(softmax) 함수를 내장하고 있어, 모델의 출력값에 소프트맥스를 적용할 필요 없이 모델의 출력값과 레이블을 입력으로 받아 손실을 계산
torch.nn.CrossEntropyLoss(weight=None, ignore_index=-100, reduction='mean')
  • weight: 클래스별 가중치를 적용할 경우 사용하는 가중치 텐서, 기본값은 None
  • ignore_index: 무시할 클래스의 인덱스, 기본값은 -100
  • reduction: 손실을 감소(reduce)할 방법을 지정, 'mean'(평균), 'sum'(합), 'none'(감소하지 않음) 중 하나를 선택, 기본값은 'mean'

4. torch.nn.BCELoss

  • 이진 교차 엔트로피 손실(Binary Cross Entropy Loss)를 계산하는 손실 함수, torch.sigmoid 함수를 포함하여 활성화 함수를 적용하지 않은 로짓(logit) 값에 대해 교차 엔트로피 손실을 계산합니다. 이는 로짓 값이 아직 확률 값으로 변환되지 않은 상태에서 손실을 계산하므로, 안정적인 계산을 제공하고 수치적인 불안정성을 피할 수 있습니다.
  • 이진 분류(Binary Classification) 문제에서 사용되는 이진 교차 엔트로피(Binary Cross Entropy) 손실 함수
torch.nn.BCELoss(weight=None, reduction='mean', pos_weight=None)
  • weight: 각 클래스에 대한 가중치를 지정하는 인수로, 기본값은 None입니다. 클래스 불균형이 있는 경우에 사용될 수 있습니다.
  • reduction: 손실 값을 어떻게 줄일지를 지정하는 인수로, 기본값은 'mean'입니다. 'sum','none' 옵션을 가지고 있습니다
  • pos_weight: 양성 클래스에 대한 가중치를 지정하는 인수로, 기본값은 None입니다. 양성 클래스의 중요도를 조절할 수 있습니다.

5. torch.nn.BCEWithLogitsLoss

  • 이진 교차 엔트로피 손실(Binary Cross Entropy Loss)을 계산하는 손실 함수로, 시그모이드 함수를 적용하지 않은 모델의 출력값과 이진 타깃 간의 차이를 계산합니다.
  • 시그모이드 함수를 적용하지 않기 때문에, 모델의 출력값을 로짓(logit) 형태로 입력받아 계산하는 특징이 있습니다.

6. torch.nn.NLLLoss

  • 음의 로그 우도(Negative Log Likelihood) 손실을 계산하는 손실 함수로, 분류 문제에 사용됩니다.
  • 주로 로그 소프트맥스(log softmax) 출력을 사용하는 다중 클래스 분류에서 사용됩니다.
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
  • weight: 각 클래스에 대한 가중치를 지정하는 인수로, 클래스 불균형(class imbalance)을 처리할 때 사용될 수 있습니다. 기본값은 None으로, 모든 클래스에 대한 동일한 가중치를 사용합니다.
  • ignore_index: 손실 계산 시 무시할 레이블의 인덱스를 지정하는 인수로, 기본값은 -100입니다. 예를 들어, 패딩(padding)이 있는 시퀀스 데이터를 처리할 때, 패딩 토큰에 해당하는 레이블을 무시할 수 있습니다.
  • reduction: 손실 값을 어떻게 줄일지를 지정하는 인수로, 기본값은 'mean'입니다. 'sum', 'none' 옵션을 가지고 있습니다:

7. torch.nn.KLDivLoss

  • 쿨백-라이블러 발산(Kullback-Leibler Divergence)을 계산하는 손실 함수로, 두 개의 확률 분포를 입력으로 받아, 첫 번째 확률 분포가 두 번째 확률 분포와 얼마나 다른지를 측정하는 KL 발산 값을 계산합니다.
  • 주로 생성 모델의 분포와 실제 데이터의 분포 간의 차이를 측정하는 등의 용도나 분포 간의 정규화를 위해 사용됩니다.

https://pytorch.org/docs/stable/nn#loss-functions

profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글