KL Divergence란 무엇인가?
Kullback–Leibler Divergence (KL Divergence)는 확률 이론, 정보 이론, 머신러닝에서 매우 중요한 개념입니다. 이는 두 확률 분포 간의 차이를 측정합니다. 본질적으로, KL Divergence는 한 분포(Q)를 사용하여 다른 분포(P)를 근사할 때, 얼마나 많은 정보가 손실되는지를 알려줍니다. KL Divergence는 종종 분포 간의 "거리"를 측정하는 것처럼 설명되지만, 주의할 점은 진정한 의미의 거리(metric)가 아닙니다. 그 이유는 대칭적이지 않기 때문입니다. 즉:
$KL(P \parallel Q) \neq KL(Q \parallel P)$
딥러닝에서 KL Divergence가 중요한 이유
KL Divergence는 여러 핵심 ML/DL 분야에서 자주 등장합니다:
- Variational Autoencoders (VAE): 인코더의 분포와 사전 분포 (일반적으로 표준 정규 분포) 간의 KL Divergence를 최소화하여 잠재 공간(latent space)을 규제합니다.
- 언어 모델 (Language Models): 크로스 엔트로피(cross-entropy) 같은 손실 함수는 KL Divergence와 밀접하게 연관되어 있습니다.
- 강화 학습 (Reinforcement Learning): TRPO(Trust Region Policy Optimization)는 정책 업데이트 안정성을 위해 KL 제약을 사용합니다.
- 생성 모델 (Generative Models): 일부 GAN 변형은 KL Divergence 또는 그 변형을 최소화합니다.
KL Divergence의 수학적 정의
변수 x 위에 정의된 두 분포 P(x)와 Q(x)가 있을 때, Q로부터 P로의 KL Divergence는 다음과 같이 정의됩니다:
$D_{KL}(P \parallel Q) = \sum_x P(x) \log \left( \frac{P(x)}{Q(x)} \right)$ (이산 분포의 경우)
또는
$D_{KL}(P \parallel Q) = \int_{-\infty}^{\infty} P(x) \log \left( \frac{P(x)}{Q(x)} \right) dx$ (연속 분포의 경우)
해석:
- P와 Q가 완전히 같으면, $D_{KL}(P \parallel Q) = 0$.
- Divergence 값이 클수록, Q가 P와 "다른" 정도가 커집니다.
딥러닝 실전에서 KL Divergence
좀 더 실용적인 관점에서 나눠봅시다:
용어 | 의미 |
P(x) | 실제 분포 (예: 정답 레이블) |
Q(x) | 모델이 근사한 분포 (예: 예측값) |
$\log \frac{P(x)}{Q(x)}$ | P에 비해 Q의 예측이 얼마나 "놀라운지" |
P(x) 곱하기 | x가 실제로 발생할 확률로 가중치 부여 |
합산/적분 | 모든 가능한 사건에 대해 평균 |
크로스 엔트로피(cross-entropy) 손실은 사실 다음을 최소화합니다:
$H(P, Q) = H(P) + D_{KL}(P \parallel Q)$
여기서 H(P)는 진짜 엔트로피(모델 파라미터와 무관한 상수)입니다.
따라서, 크로스 엔트로피를 최소화하는 것은 H(P)가 고정된 상황에서는 KL Divergence를 최소화하는 것과 같습니다.
KL Divergence의 특성
특성 | 설명 |
Non-negative | $D_{KL}(P \parallel Q) \geq 0$ (Gibbs' inequality) |
Asymmetry | $D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P)$ |
Zero iff equal | $D_{KL}(P \parallel Q) = 0$ if and only if P=Q |
Sensitive to Q underestimation | If is near 0 where P(x) is not, KL blows up |
KL Divergence vs. 다른 Divergence
- Jensen-Shannon Divergence (JSD): KL의 대칭화 및 스무딩 버전. GAN에서 자주 사용됩니다.
- Wasserstein Distance: 분포 간 "질량 이동(mass movement)"을 측정. 생성 모델 비교 시 더 견고함.
KL Divergence 구현 방법
PyTorch에서는 간단합니다:
import torch
import torch.nn.functional as F
# Assume p and q are probability distributions (after softmax)
def kl_divergence(p, q):
return torch.sum(p * torch.log(p / q), dim=1).mean()
# Or use built-in KLDivLoss (requires log-probabilities)
loss = F.kl_div(q.log(), p, reduction='batchmean')
주의: log(0) 에러를 피하기 위해 작은 epsilon을 추가하는 등 수치적 안정성(numerical stability)을 항상 고려하세요.
마지막으로: KL Divergence를 사용할 때
- 진짜 확률적 행동을 근사하고 싶을 때
- 확률 기반 모델의 손실 함수를 설계할 때
- VAE처럼 이론적 정규화를 추가하고 싶을 때
- 강화학습 정책 간 유사성 제약을 강제할 때
KL Divergence를 깊이 이해하면, 딥러닝 모델 설계와 문제 해결에서 큰 경쟁력을 가질 수 있습니다.
참고 문헌
- Original Paper:
Kullback, S., & Leibler, R. A. (1951). On Information and Sufficiency. - Deep Learning Book by Ian Goodfellow, Yoshua Bengio, Aaron Courville:
Chapter 8: Optimization for Training Deep Models (KL Divergence Context) - Wikipedia Entry:
Kullback–Leibler divergence
'AI' 카테고리의 다른 글
FixMatch 논문 완전 분석: 간결하면서 강력한 반지도 학습(Semi-Supervised) 알고리즘 (0) | 2025.04.30 |
---|---|
컴퓨터 비전에서 준지도학습(Semi-Supervised Learning) 소개 및 최신 알고리즘 비교 분석 (0) | 2025.04.30 |
딥러닝 소프트맥스 함수 완벽 정리: 정의, 수식, 예제까지 (1) | 2025.04.23 |
딥러닝에서 엔트로피와 크로스 엔트로피 손실 함수 완벽 이해 (0) | 2025.04.22 |
정보 이론과 정보 병목 완벽 가이드 (0) | 2025.04.21 |