Cross-Entropy Loss
교차 엔트로피 손실은 예측 클래스 확률과 정답 레이블을 비교하여 학습 중 분류 및 세그멘테이션 모델을 안내합니다.
교차 엔트로피 손실은 모델이 예측한 클래스 확률이 정답 레이블과 얼마나 일치하는지 측정합니다. 정답 클래스에 높은 확률이 할당되면 작은 페널티를 부과하고, 해당 확률이 낮으면 큰 페널티를 부과합니다. 손실 함수는 지도 학습의 일부로서 학습 중 최소화할 목적 함수를 제공합니다.
Claude Shannon의 1948년 통신의 수학적 이론은 엔트로피의 기초를 확립했습니다. D. F. Kerridge는 1961년 논문 부정확성과 추론에서 교차 엔트로피 측정값을 "부정확성"으로 소개했습니다. 분류에서는 로그 손실이 동의어이며, 로지스틱 회귀와 신경망 분류기 모두 이를 사용합니다.
교차 엔트로피 손실의 작동 방식#
정답 클래스가 하나인 예시 하나에서 가중치를 적용하지 않은 교차 엔트로피는 loss = -ln(p_correct)입니다. 정답 클래스의 확률이 0.9이면 손실은 약 0.105이고, 0.1이면 약 2.303입니다. 자연로그를 사용하면 결과는 nat이라는 단위로 표현됩니다. 학습에서는 보통 배치 전체에 걸쳐 이러한 페널티의 평균을 계산합니다.
보다 일반적으로 교차 엔트로피는 각 정답 확률에 해당 예측 확률의 음의 로그를 곱한 뒤 클래스 전체에 걸쳐 합산합니다. 원-핫 정답은 정답 클래스에 1을, 나머지 클래스에 0을 할당하므로 정답 클래스 항만 남습니다. 가중치를 적용하지 않은 원-핫 정답의 경우, 교차 엔트로피를 최소화하는 것은 관측된 레이블의 가능도를 최대화하는 것과 같습니다. 역전파는 그래디언트를 계산하고, 경사 하강법은 모델 매개변수를 업데이트합니다.
이진, 범주형 및 희소 교차 엔트로피#
적절한 형식은 레이블에 따라 달라집니다.
- 시그모이드를 사용하는 이진 교차 엔트로피: 0 또는 1인 정답
y과 클래스 1의 예측 확률p에 대해 손실은-[y * ln(p) + (1 - y) * ln(1 - p)]입니다. 다중 레이블 분류에서는 함께 나타날 수 있는 레이블 각각에 이 손실을 독립적으로 적용합니다. - 소프트맥스를 사용하는 범주형 교차 엔트로피: 이 손실은 확률의 합이 1인 상호 배타적 클래스의 점수를 계산합니다. 소프트맥스는 로짓이라고 하는 모델의 원시 점수를 해당 확률 분포로 변환합니다.
- 희소 범주형 교차 엔트로피: 원-핫 벡터 대신 정수 클래스 인덱스를 사용합니다. 동일한 손실을 계산하며, "희소"는 정답 인코딩 방식을 설명합니다.
소프트 정답은 클래스 전체에 확률을 분배합니다. 소프트 정답은 레이블 스무딩과 지식 증류에서 사용되며, 지식 증류에서는 학생 모델이 교사 모델의 확률 분포를 학습합니다.
PyTorch에서 교차 엔트로피 계산하기#
PyTorch는 CrossEntropyLoss에서 원시 로짓을 입력으로 받습니다. 클래스 인덱스 정답을 사용하면 계산 결과는 로그 소프트맥스 적용 후 음의 로그 가능도를 계산한 것과 같습니다. 먼저 소프트맥스를 적용하면 함수가 확률을 로짓으로 취급하므로 손실과 그래디언트가 달라집니다. 정수 정답에는 torch.long을 사용하고, 확률 정답에는 부동 소수점 값을 사용하며 로짓과 형태가 일치해야 합니다.
import torch
from torch import nn
# Both predictions select class 0; the second is more confident.
logits = torch.tensor([[2.0, 0.0, 0.0], [4.0, 0.0, 0.0]])
targets = torch.tensor([0, 0], dtype=torch.long)
loss_fn = nn.CrossEntropyLoss(reduction="none")
losses = loss_fn(logits, targets)
print(f"Lower confidence loss: {losses[0].item():.4f}")
print(f"Higher confidence loss: {losses[1].item():.4f}")두 예측 모두 정답을 유지하는 동안 손실은 0.2395에서 0.0360으로 감소합니다. 정확도는 클래스 판정을 기록하는 반면, 교차 엔트로피는 확률 할당에도 반응합니다. 이진 또는 다중 레이블 로짓의 경우 BCEWithLogitsLoss은 시그모이드와 이진 교차 엔트로피를 결합합니다.
컴퓨터 비전 분야의 활용#
단일 레이블 이미지 분류는 이미지마다 하나의 클래스를 학습하는 데 교차 엔트로피를 사용합니다. Ultralytics YOLO26 분류 학습에서는 클래스 로짓에 대한 평균 교차 엔트로피를 사용하여 분류기가 레이블이 지정된 범주를 향해 업데이트되도록 합니다.
의료 영상 세그멘테이션에서 최초의 U-Net은 픽셀 단위 소프트맥스와 가중 교차 엔트로피를 사용하여 생물의학 현미경 이미지로 학습되었습니다. U-Net의 가중치 맵은 서로 맞닿은 세포 사이의 경계에서 페널티를 높여 인접한 세포를 분리하는 데 도움을 주었습니다. 이는 시맨틱 세그멘테이션에서 모든 픽셀에 분류를 적용하는 방식입니다.
손실값 해석하기#
유효한 정답 분포와 음이 아닌 가중치를 사용하는 이산 교차 엔트로피는 음수가 아닙니다. 가중치를 적용하지 않은 하드 정답의 경우, 정답 클래스에 확률 1이 할당되면 손실은 0이 되고 해당 확률이 0에 가까워질수록 제한 없이 증가합니다. 음수 값은 정답 항목이나 가중치가 음수인 경우처럼 입력 또는 구현에 오류가 있음을 나타냅니다.
엔트로피는 하나의 분포 내 불확실성을 측정하고, 교차 엔트로피는 정답과 예측을 비교합니다. 교차 엔트로피는 정답 엔트로피에 추가적인 불일치 페널티인 쿨백–라이블러 발산을 더한 값입니다. 따라서 엔트로피가 양수인 소프트 정답은 양의 최소값을 가집니다.
클래스 가중치를 적용하면 선택된 클래스의 기여도가 높아집니다. 포컬 손실은 객체 탐지에서 전경과 배경의 불균형을 해결하기 위해 쉬운 예시의 기여도를 낮춥니다. 균등 분포 예측에서 가중치를 적용하지 않은 로그 손실은 ln(number_of_classes)과 같으며, 클래스가 2개일 때 약 0.693, 10개일 때 약 2.303입니다.










