Entropy / Cross-Entropy / KL Divergence 이해

난이도: 입문

태그: foundations,entropy,cross_entropy,kl

Entropy는 데이터 자체의 불확실성, Cross-Entropy는 모델이 정답 분포를 얼마나 잘 맞추는지, KL은 두 분포 차이를 따로 떼어 본 값이다.

딥러닝에서 classification loss를 배우다 보면 CrossEntropy가 자주 등장한다. 그런데 이 loss를 제대로 이해하려면 Entropy와 KL divergence까지 함께 봐야 한다.

이 세 개념은 이름이 비슷해서 처음에는 하나처럼 느껴지지만, 역할을 나누면 훨씬 단순해진다. Entropy는 데이터 자체가 얼마나 예측하기 어려운지, Cross-Entropy는 실제 데이터와 모델 예측을 함께 봤을 때 비용이 얼마나 큰지, KL divergence는 그 차이 중 "모델이 틀린 정도"만 떼어낸 값이다.

그래서 이 문서를 읽을 때는 공식을 외우기보다 "왜 분류 loss가 저 형태인가"를 이해하는 데 초점을 두는 편이 좋다. 이 감각이 잡히면 language modeling, distillation, ELBO까지 같은 언어로 읽힌다.

시각 자료로 먼저 보기

이산 확률분포의 확률질량함수 그림
entropy는 결국 분포의 모양과 연결된다. 먼저 discrete distribution의 확률 막대가 어떻게 생기는지 눈으로 보는 것이 좋다.
원본 / 라이선스 · Outilsvisuels · CC BY-SA 4.0
정규분포의 1시그마 2시그마 3시그마 그림
분포가 넓게 퍼질수록 불확실성이 커진다는 직관을 정규분포 그림으로 다시 볼 수 있다. entropy 해석의 감각을 잡는 데 유용하다.
원본 / 라이선스 · Wolfgang Kowarschick · CC BY 3.0

1. Entropy

H(X)=xp(x)logp(x)

Entropy는 분포의 불확실성을 나타낸다. 동전이 항상 앞면이면 entropy가 낮고, 앞면/뒷면이 50 대 50이면 entropy가 높다.

핵심은 가능한 결과가 고르게 열려 있을수록 더 예측하기 어렵다는 점이다. 하나가 거의 확실하면 새 정보가 별로 없고 entropy도 작다. 반대로 무엇이 나올지 애매하면 정보량이 크고 entropy가 커진다.

2. Cross-Entropy

H(p,q) = - x p(x) log q(x)

여기서 \(p\)는 실제 데이터 분포, \(q\)는 모델 예측 분포다. 정답에 높은 확률을 주면 cross-entropy가 작아지고, 정답 확률을 낮게 주면 커진다.

3. KL Divergence

DKL (pq) = x p(x) log p(x) q(x)

KL divergence는 "실제 분포 \(p\)를 기준으로 봤을 때, 모델 분포 \(q\)가 얼마나 다른가"를 측정하는 값이다. 이름은 divergence지만, 우리가 흔히 생각하는 대칭 거리와는 다르다.

즉 KL은 단순 거리라기보다 "실제 분포를 모델이 얼마나 비효율적으로 설명하고 있는가"를 보는 값에 가깝다. 그래서 방향이 중요하고, \(D_{KL}(p\|q)\)와 \(D_{KL}(q\|p)\)는 일반적으로 서로 다르다.

3-1. 공식의 각 항이 뜻하는 것

즉 KL은 "실제로 중요한 사건"에 더 큰 가중치를 두고, 모델 분포가 실제 분포와 얼마나 어긋나는지 평균내는 식이라고 이해하면 된다.

3-2. 왜 \(\log \frac{p(x)}{q(x)}\) 꼴인가

비율 \(\frac{p(x)}{q(x)}\)는 모델이 실제 분포를 얼마나 잘 맞췄는지 보여 준다.

그래서 KL이 작다는 것은 "모델 분포가 실제 분포와 거의 비슷하다"는 뜻이다.

3-3. 꼭 기억해야 할 성질

마지막 성질이 특히 중요하다. 즉 KL은 "어느 분포를 기준으로 보느냐"에 따라 값이 달라진다. 그래서 \(p\parallel q\)와 \(q\parallel p\)는 서로 다른 질문이다.

4. 세 개의 관계

DKL (pq) = H(p,q) - H(p)

즉 cross-entropy는 데이터 자체의 불확실성인 entropy와, 모델이 틀린 정도인 KL을 합친 값이다.

여기서 중요한 점은 실제 데이터 분포 \(p\)가 고정되어 있으면 \(H(p)\)는 상수처럼 취급할 수 있다는 것이다. 따라서 최적화 관점에서는

min H(p,q) min DKL (pq)

가 된다. 즉 KL을 최소화하는 것은 결국 cross-entropy를 최소화하는 것과 같은 방향이다. 둘의 차이는 데이터 자체가 가진 entropy \(H(p)\)이고, 이 값은 모델 파라미터가 바뀌어도 변하지 않기 때문이다.

그래서 classification에서 cross-entropy loss를 줄인다는 말은, 실제로는 모델 분포 \(q\)를 정답 분포 \(p\)에 더 가깝게 맞추는 과정이라고 이해하면 된다.

4-1. ELBO에서는 KL이 직접 loss에 들어간다

일반적인 분류 문제에서는 KL이 cross-entropy 안에 숨어 있는 형태로 등장한다. 하지만 VAE 같은 모델에서는 KL divergence가 실제 loss 함수 항으로 직접 들어간다.

ELBO = 𝔼q(z|x) [ logp(x|z) ] - DKL (q(z|x)p(z))

이 식에서 두 번째 항은 단순 해석용이 아니라, 최적화 과정에서 직접 다뤄지는 실제 loss 구성 요소다.

즉 ELBO에서는 KL이 "분포 차이를 해석하는 도구"를 넘어서, 직접적인 regularization 항으로 작동한다.

5. 딥러닝에서 왜 중요한가

6. 코드와 연결

import torch
import torch.nn as nn

criterion = nn.CrossEntropyLoss()
loss = criterion(logits, target)

PyTorch의 CrossEntropyLoss는 내부적으로 log_softmax와 NLL을 묶어 계산한다.

7. 체크리스트