본문 바로가기
AI/ML & DL

[Deep Learning] 딥러닝 다중 라벨 분류의 손실 함수: Binary Cross-Entropy

by 데이터 벌집 2024. 5. 31.

머신러닝에서는 다양한 분류 문제가 있습니다. 그 중 하나는 **다중 라벨 분류(Multi-Label Classification)**입니다. 다중 라벨 분류는 하나의 데이터 포인트가 여러 개의 라벨에 속할 수 있는 문제를 말합니다. 예를 들어, 하나의 사진이 '고양이', '실내', '밤' 등 여러 라벨을 가질 수 있습니다. 이런 문제를 해결하기 위해서는 적절한 손실 함수가 필요합니다. 이번 글에서는 다중 라벨 분류에서 자주 사용되는 Binary Cross-Entropy (BCE) 손실 함수에 대해 알아보겠습니다.

 

[Deep Learning] 딥러닝 다중 라벨 분류의 손실 함수: Binary Cross-Entropy

 

 

Binary Cross-Entropy 손실 함수는 다중 라벨 분류에서 각 라벨을 독립적으로 처리하여 손실을 계산합니다. 각 라벨에 대해 0 또는 1을 예측하며, 각 라벨의 예측 확률과 실제 라벨 값을 비교하여 손실을 계산합니다.

 

y와 y ^

단일 데이터 포인트 에 대한 Binary Cross-Entropy 손실 함수는 다음과 같이 정의됩니다:

Binary Cross Entropy Loss Function

 

여기서 은 총 라벨의 수입니다.

전체 데이터셋에 대한 손실은 모든 데이터 포인트 에 대한 평균 손실로 계산됩니다:

Cost function

 

 

파이토치(Pytorch)를 사용하여 다중 라벨 분류에서 Binary Cross-Entropy 손실 함수를 사용하는 방법을 예제로 보여드리겠습니다.

 

import torch
import torch.nn as nn

# 예측값과 실제 라벨값을 정의합니다.
predictions = torch.tensor([[0.2, 0.7, 0.1], [0.9, 0.4, 0.6]], requires_grad=True)
labels = torch.tensor([[0, 1, 0], [1, 0, 1]], dtype=torch.float)

# BCEWithLogitsLoss는 Sigmoid와 BCELoss를 결합한 것입니다.
criterion = nn.BCEWithLogitsLoss()

# 손실을 계산합니다.
loss = criterion(predictions, labels)
loss.backward()

print(loss.item())

 

 

중요한 점

  • BCEWithLogitsLoss: 이 함수는 Sigmoid 함수와 Binary Cross-Entropy 손실을 결합하여 보다 안정적인 계산을 제공합니다. 예측값은 확률이 아닌 원시 점수(로짓)이어야 합니다.
  • 예측값: 예측값은 확률이 아닌 로짓이어야 합니다. BCEWithLogitsLoss 함수가 내부적으로 Sigmoid 함수를 적용하기 때문입니다.

 

다중 라벨 분류 문제를 해결하기 위해서는 적절한 손실 함수가 필수적입니다. Binary Cross-Entropy 손실 함수는 각 라벨을 독립적으로 처리하여 손실을 계산함으로써, 다중 라벨 분류에서 효과적으로 사용될 수 있습니다. 이를 통해 모델은 여러 라벨을 동시에 예측하는 복잡한 관계를 학습할 수 있습니다. 예제 코드와 함께 설명된 내용을 통해 다중 라벨 분류에서 BCE 손실 함수를 사용하는 방법을 이해하셨길 바랍니다.