cross-entropy 손실함수 완전 정복 — 심화 학습서

06. 결론 — 치트시트 한 장 · 결정표 · 함정 체크리스트

목차

이 마지막 장은 책 전체의 결론을 한곳에 모은다. 두고두고 펴 볼 치트시트 한 장 카드, softmax-CE와 sigmoid-BCE 중 무엇을 쓸지 고르는 결정표, 구현할 때 빠지기 쉬운 함정 체크리스트가 여기 다 있다. 앞 장들은 각자 "한 줄 정리 + 다음 장으로 잇기"로만 닫았다. 종합 결론과 결정표, 체크리스트는 이 장에만 둔다.


6.1 한 문장 요약

cross-entropy는 모델 예측 분포 qq의 놀람을 진짜 분포 pp로 평균한 값이다(01장). 라벨이 one-hot(정답 한 칸만 1)이면 합에서 정답 항만 남아 "정답에 준 확률의 음로그" logqc-\log q_c가 된다(02장).

softmax나 sigmoid가 로짓(logit, 모델이 내놓은 점수)을 확률로 바꾼다. 그 위에서 CE를 미분하면 약분이 일어나 gradient가 qyq-y(예측−정답)로 깔끔해진다(03장). 이 깔끔함이 학습을 빠르고 안정적으로 이끈다.

실전에서는 로짓을 손실에 바로 넣어 NaN을 막고(log-sum-exp), label smoothing(라벨을 조금 무르게 풀기)으로 과확신을 누른다(04장). 그리고 "CE 최소화 = KL 최소화 = 최대우도추정"은 표현만 다른 같은 말이다(01장).


광고 · Advertisements

6.2 치트시트 한 장 카드

cross-entropy 핵심식 카드 — 이 한 장이면 거의 다 된다.

정의 (01장)

H(p,q)=xp(x)logq(x),H(p,q)=H(p)+DKL(pq)0, =0    p=q.H(p,q) = -\sum_x p(x)\log q(x), \qquad H(p,q) = H(p) + \underbrace{D_{KL}(p\|q)}_{\ge 0,\ =0 \iff p=q}.

H(p)H(p)θ\theta와 무관한 상수 → min CE = min KL = MLE. one-hot이면 H(p)=0H(p)=0 → CE 하한 0.

분류 손실 (02장)

categorical CE=logqc(q=softmax(z)),BCE=logpt(p^=σ(z)).\text{categorical CE} = -\log q_c \quad(q=\text{softmax}(z)), \qquad \text{BCE} = -\log p_t \quad(\hat p=\sigma(z)).

pt=p^ (y=1), 1p^ (y=0)p_t = \hat p\ (y{=}1),\ 1-\hat p\ (y{=}0). 둘 다 "정답에 준 확률의 음로그", 같은 골격. pt1p_t\to1 easy, 작으면 hard.

softmax / sigmoid (02장)

softmax(z)i=ezijezj,σ(z)=11+ez=softmax([z,0])1.\text{softmax}(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}, \qquad \sigma(z) = \frac{1}{1+e^{-z}} = \text{softmax}([z,0])_1.

softmax: 양수·합1·순서보존·평행이동불변. sigmoid = 2-클래스 softmax.

gradient (03장)

Lz=qy(softmax+CE),Lz=p^y(sigmoid+BCE).\frac{\partial L}{\partial z} = q - y \quad(\text{softmax+CE}), \qquad \frac{\partial L}{\partial z} = \hat p - y \quad(\text{sigmoid+BCE}).

약분 덕에 깔끔. 틀릴수록 큰 신호. MSE는 (p^y)σ(\hat p-y)\sigma'로 포화(크게 틀린 곳에서 gradient 소멸, CE 대비 최대 405×).

수치안정 (04장)

logjezj=m+logjezjm (m=maxjzj),CE=logsumexp(z)zt.\log\textstyle\sum_j e^{z_j} = m + \log\sum_j e^{z_j-m}\ (m=\max_j z_j), \qquad \text{CE} = \text{logsumexp}(z) - z_t.

로짓을 손실에 직접 넣어라 → overflow·log0\log 0 동시 차단(항등식, 무근사).

label smoothing (04장)

ykLS=(1ε)yk+εK,softCE=(1ε)CEhard+εCEuniform.y^{LS}_k = (1-\varepsilon)y_k + \tfrac{\varepsilon}{K}, \qquad \text{softCE} = (1-\varepsilon)\,\text{CE}_{\text{hard}} + \varepsilon\,\text{CE}_{\text{uniform}}.

보통 ε=0.1\varepsilon=0.1. 과확신↓·보정↑, 단 teacher 증류엔 해로움.

친척들 (04장)

CE=NLLlog_softmax=KL+H(y),perplexity=eCE.\text{CE} = \text{NLL}\circ\text{log\_softmax} = \text{KL} + H(y), \qquad \text{perplexity} = e^{\text{CE}}.

주 예제 한 줄 (05장): z=(2,1,0.1)z=(2,1,0.1), 정답=클래스2 → q2=0.2424q_2=0.2424, L=1.41703L=1.41703 → grad qy=(.659,.758,.099)q-y=(.659,-.758,.099)η=0.1\eta=0.1 한 스텝 → L=1.31707L'=1.31707 (줄어듦).

이 카드 한 장이 책 전체의 뼈대다. 윗줄(정의)은 CE인지를, 가운뎃줄(분류 손실·gradient)은 어떻게 손실과 신호가 나오는지를, 아랫줄(수치안정·smoothing)은 코드로 옮길 때 무엇을 조심하는지를 담는다. 막히면 여기로 돌아오면 된다.


광고 · Advertisements

6.3 결정표 — 언제 무엇을 쓰나

손실을 고르는 일은 대부분 한 가지 질문으로 갈린다. "정답이 정확히 하나인가?" 그 답이 표의 첫 갈래를 정한다.

상황 변환 손실 핵심 식 출력층
다중클래스, 정답 하나 (개/고양이/새) softmax categorical CE logqc-\log q_c 로짓 KK개, 합=1
이진 분류 (양성/음성) sigmoid BCE logpt-\log p_t 로짓 1개
다중라벨, 여러 개 동시 참 (속성들) 채널별 sigmoid 채널별 BCE 합/평균 klogpt,k\sum_k -\log p_{t,k} 로짓 KK개, 독립
soft target / 지식증류 softmax KL divergence kyklogykqk\sum_k y_k\log\tfrac{y_k}{q_k} 로짓 → log-softmax
클래스 불균형 softmax/sigmoid weighted CE wtlogqt-w_t\log q_t (wt1/ntw_t\propto 1/n_t) + 클래스 가중
easy 샘플 과다 softmax/sigmoid Focal (CE 확장, 이 책 범위 밖) (1pt)γlogpt-(1-p_t)^\gamma\log p_t + 샘플 변조
언어모델 평가 perplexity (지표) eCEe^{\text{CE}} (손실 아님)

결정표 읽는 법. 가장 먼저 묻는다. "정답이 정확히 하나인가?" 예라면 softmax-CE다. 아니라면(여러 라벨이 동시에 참일 수 있다면) 클래스별 sigmoid-BCE를 쓴다. 이진 분류는 sigmoid-BCE이고, 이것은 2-클래스 softmax의 특수한 경우다.

그 위에 불균형이나 과확신 같은 문제가 더 있으면 weighted CE, label smoothing, Focal을 덧댄다. 골격을 바꾸는 게 아니라 위에 한 겹 얹는 식이다. 어느 경우든 바탕은 언제나 "정답에 준 확률의 음로그"다.

yes

no (independent labels)

yes

no (K classes)

exactly one
correct class?

binary?

sigmoid per class
-> BCE per channel

sigmoid -> BCE = -log p_t

softmax -> CE = -log q_c

add-ons:
weighted CE (imbalance)
label smoothing (overconfidence)
Focal (easy excess)

위 그림은 결정표를 그대로 흐름도로 옮긴 것이다. 첫 질문에서 갈라져 손실을 고르고, 마지막에 add-on을 얹는 순서가 한눈에 들어온다.


6.4 함정 체크리스트 (구현·리뷰 시)

루프를 직접 구현하거나 리뷰할 때 빠지기 쉬운 함정을 한곳에 모았다. 출처 장은 괄호로 적었다.

입력·이중 적용

  • [ ] 손실에는 raw 로짓을 넣는다. CrossEntropyLoss·BCEWithLogitsLoss는 내부에서 softmax나 sigmoid를 한다. 모델 끝에 softmax를 또 넣으면 이중 적용이 되어 분포가 평평해지고 학습이 둔해진다. (02장 §2.6, 04장 §4.5)
  • [ ] 확률을 로짓 자리에 넣지 않는다. [0,1][0,1] 확률을 로짓 입력 손실에 넣으면 내부 log-softmax가 의미를 잃는다. 손실이 거의 0이 되고 gradient가 죽는다. 확률만 있으면 BCELoss·NLLLoss로 짝을 맞춘다. (04장 §4.5)

라벨·축

  • [ ] 라벨 형식을 확인한다. PyTorch CrossEntropyLoss는 정수 인덱스 (N,)(long) 또는 soft 확률 (N,C)(float)를 받는다. 정수 자리에 one-hot을 넣지 않는다. (02장 §2.5, 04장 §4.5)
  • [ ] 클래스 축은 dim=1. 입력은 (N, C, ...) 형태여야 한다. (N, ..., C)라면 permute·reshape(-1, C)로 맞춘다. (04장 §4.5)
  • [ ] reduction을 의도적으로 고른다. 'mean'(기본)과 'sum'은 손실 스케일과 학습률이 달라진다. 마스킹할 때는 유효 토큰 수로 직접 나눠 일관성을 지킨다. (04장 §4.5)

수치 안정

  • [ ] log0\log 0 \to NaN 주의. CE를 직접 짜면 qt0q_t\to0에서 -inf가 나오고, 한 스텝 만에 전체 파라미터가 NaN으로 오염된다. 가능하면 로짓-융합 경로(log-sum-exp)를 쓰고, 차선으로 확률을 [ε,1ε][\varepsilon, 1-\varepsilon]로 클리핑한다. (04장 §4.1)
  • [ ] 로짓이 폭주하면 clip_grad_norm_이나 safe softmax(최댓값 빼기)를 쓴다. AMP(혼합 정밀도)에서는 exp·log 연산을 FP32로 유지하길 권한다. (04장 §4.1, 03장 §3.6)
  • [ ] NaN 디버깅 순서: 입력 로짓 → loss 자리(이중·확률) → 타깃 범위 → LR·clip → 클리핑. (04장 §4.5)

손실 선택·하이퍼파라미터

  • [ ] multi-label에 softmax 금지. 여러 라벨이 동시에 참인데 softmax를 쓰면 합=1을 강제해 "둘 다 참"을 표현하지 못한다. 클래스별 sigmoid-BCE를 쓴다. (02장 §2.4)
  • [ ] 분류에 MSE 지양(기본값). MSE는 크게 틀린 곳에서 gradient가 소멸한다(CE 대비 최대 405×). 표준 설정에서는 softmax-CE가 더 안전하고 빠르다. (03장 §3.4)
  • [ ] label smoothing ε=0.1\varepsilon=0.1 권장. ε\varepsilon이 너무 크면 정답 신호가 묽어진다. teacher 증류용 모델에는 쓰지 않는다(유사도 정보가 사라진다). 분해 검산은 CEuniform\text{CE}_{\text{uniform}}(모든 클래스 음로그의 평균)을 정확히 넣어야 맞는다. (04장 §4.2)
  • [ ] CE·KL은 거리가 아니다. DKL(pq)DKL(qp)D_{KL}(p\|q)\ne D_{KL}(q\|p)로 비대칭이다. "분포를 가깝게 한다"는 비유일 뿐이다. (01장 §1.8)

6.5 한 걸음 더 (이 책 범위 밖, 안내만)

이 책은 cross-entropy 자체를 완전 정복하는 데 집중했다. 자연스럽게 이어지는 다음 주제 셋을 안내로만 남긴다.

  • Focal Loss — CE에 변조항 (1pt)γ(1-p_t)^\gamma를 곱해 easy 샘플을 죽이고 hard 샘플에 집중하는 확장이다(04장 §4.3에서 다리만 놓았다). 객체 탐지의 anchor 불균형이 본 무대다.
  • 지식증류(distillation) — teacher의 soft 로짓을 KL로 student에 옮기는 기법이다. 04장 §4.4의 KL이 출발점이다.
  • calibration / 온도 스케일링 — 예측 확률을 실제 정확도에 맞추는 작업이다. label smoothing(04장 §4.2)과 온도가 관련 도구다.

맺음. cross-entropy는 한 줄로 "정답에 얼마나 놀랐는가"다. 그 한 줄 뒤에 정보이론의 놀람·entropy·KL, MLE와의 동치, softmax의 약분이 만드는 qyq-y gradient, 그리고 수치안정·smoothing이라는 실전이 층층이 놓여 있다. 막히는 날에는 §6.2 치트시트 한 장으로 돌아오면 된다. 책의 출발점으로 되돌아가려면 README에서 읽는 순서를 다시 짚어 보라.