손실 함수를 사용한 예측 평가

PyTorch로 배우는 딥러닝 입문

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

왜 손실 함수가 필요할까요?

  • 학습 중 모델의 성능을 알려 줍니다
  • 모델 예측 $\hat{y}$ 과(와) 정답 $y$ 를 입력받습니다
  • 단일 float을 출력합니다

$$

손실 함수 다이어그램

PyTorch로 배우는 딥러닝 입문

왜 손실 함수가 필요할까요?

  • 클래스 0 - 포유류, 클래스 1 - 조류, 클래스 2 - 파충류
Hair Feathers Eggs Milk Fins Legs Tail Domestic Catsize Class
1 0 0 1 0 4 0 0 1 0

$$

  • 예측 클래스 = 0 -> 정답 = 낮은 손실
  • 예측 클래스 = 1 -> 오답 = 높은 손실
  • 예측 클래스 = 2 -> 오답 = 높은 손실

$$

  • 목표: 손실을 최소화합니다
PyTorch로 배우는 딥러닝 입문

원-핫 인코딩 개념

  • $loss = F(y, \hat{y})$
  • $y$ 는 단일 정수(클래스 라벨)입니다
    • 예: $y=0$ (포유류일 때)
  • $\hat{y}$ 는 tensor(softmax 이전 예측)입니다
    • N은 클래스 수, 예: N = 3
    • $\hat{y}$ 는 N차원 tensor입니다,
      • 예: $\hat{y}$ = [-5.2, 4.6, 0.8]
PyTorch로 배우는 딥러닝 입문

원-핫 인코딩 개념

  • 정수 y를 0과 1로 이루어진 tensor로 변환합니다

원-핫 인코딩

PyTorch로 배우는 딥러닝 입문

원-핫 인코딩으로 라벨 변환

import torch.nn.functional as F

print(F.one_hot(torch.tensor(0), num_classes = 3))
tensor([1, 0, 0])
print(F.one_hot(torch.tensor(1), num_classes = 3))
tensor([0, 1, 0])
print(F.one_hot(torch.tensor(2), num_classes = 3))
tensor([0, 0, 1])
PyTorch로 배우는 딥러닝 입문

PyTorch의 교차 엔트로피 손실

from torch.nn import CrossEntropyLoss

scores = torch.tensor([-5.2, 4.6, 0.8])
one_hot_target = torch.tensor([1, 0, 0])

criterion = CrossEntropyLoss()
print(criterion(scores.double(), one_hot_target.double()))

$$

tensor(9.8222, dtype=torch.float64)
PyTorch로 배우는 딥러닝 입문

모두 합쳐 보기

손실 함수 입력:

  • scores - 최종 softmax 이전의 모델 예측값
  • one_hot_target - 원-핫 인코딩된 정답 라벨

손실 함수 출력:

  • loss - 단일 float

값이 표시된 손실 함수 다이어그램

PyTorch로 배우는 딥러닝 입문

연습해 봅시다!

PyTorch로 배우는 딥러닝 입문

Preparing Video For Download...