다중 출력 모델 평가와 손실 가중치

PyTorch로 배우는 Intermediate Deep Learning

Michal Oleszak

Machine Learning Engineer

모델 평가

acc_alpha = Accuracy(
    task="multiclass", num_classes=30
)
acc_char = Accuracy(
    task="multiclass", num_classes=964
)


net.eval() with torch.no_grad(): for images, labels_alpha, labels_char \ in dataloader_test: out_alpha, out_char = net(images)
_, pred_alpha = torch.max(out_alpha, 1) _, pred_char = torch.max(out_char, 1)
acc_alpha(pred_alpha, labels_alpha) acc_char(pred_char, labels_char)
  • 각 출력에 대한 지표 설정
  • 테스트 로더 반복 후 출력 획득
  • 각 출력의 예측 계산
  • 정확도 지표 업데이트
  • 최종 정확도 계산
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
PyTorch로 배우는 Intermediate Deep Learning

다중 출력 학습 루프 재검토

for epoch in range(10):
    for images, labels_alpha, labels_char \
    in dataloader_train:
        optimizer.zero_grad()
        outputs_alpha, outputs_char = net(images)
        loss_alpha = criterion(
          outputs_alpha, labels_alpha
        )
        loss_char = criterion(
          outputs_char, labels_char
        )
        loss = loss_alpha + loss_char
        loss.backward()
        optimizer.step()
  • 두 손실: 알파벳, 문자
  • 최종 손실은 합으로 정의: loss = loss_alpha + loss_char
  • 두 분류 과제를 동등하게 중요시
PyTorch로 배우는 Intermediate Deep Learning

과제 중요도 조절

문자 분류가 알파벳 분류보다 2배 더 중요함

  • 방법 1: 더 중요한 손실에 2배 가중

    loss = loss_alpha + loss_char * 2
    
  • 방법 2: 가중치를 합이 1이 되도록 부여

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
PyTorch로 배우는 Intermediate Deep Learning

경고: 서로 다른 스케일의 손실

  • 가중합 전에 손실의 스케일을 맞춰야 함
  • 예시 과제:

    • 주택 가격 예측 -> MSE 손실
    • 품질 예측: 낮음/중간/높음 -> CrossEntropy 손실
  • CrossEntropy는 보통 한 자릿수

  • MSE는 수만까지 클 수 있음
  • 모델이 품질 과제를 무시하게 됨
  • 해결: 두 손실을 정규화 후 가중합
    loss_price = loss_price / torch.max(loss_price)
    loss_quality = loss_quality / torch.max(loss_quality)
    loss = 0.7 * loss_price + 0.3 * loss_quality
    
PyTorch로 배우는 Intermediate Deep Learning

연습해 봅시다!

PyTorch로 배우는 Intermediate Deep Learning

Preparing Video For Download...