본문 바로가기
AI

확률 분포 간 차이를 측정하는 KL Divergence 개념과 수식 정리

by markbyun 2025. 4. 28.

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 값이 클수록, QP와 "다른" 정도가 커집니다.

딥러닝 실전에서 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를 깊이 이해하면, 딥러닝 모델 설계와 문제 해결에서 큰 경쟁력을 가질 수 있습니다.


참고 문헌

  1. Original Paper:
    Kullback, S., & Leibler, R. A. (1951). On Information and Sufficiency.
  2. Deep Learning Book by Ian Goodfellow, Yoshua Bengio, Aaron Courville:
    Chapter 8: Optimization for Training Deep Models (KL Divergence Context)
  3. Wikipedia Entry:
    Kullback–Leibler divergence