Kullback-Leibler Divergence
Kullback-Leibler Divergence (KL 발산)
Kullback-Leibler Divergence(KL 발산)는 두 확률 분포의 차이를 측정하는 비대칭적 지표로, 정보이론 관점에서 하나의 분포가 다른 분포와 얼마나 다른지를 수치화한 척도이다.
1. 개요
KL 발산은 정보이론에서 상대 엔트로피(Relative Entropy)라고도 불리며, 실제 데이터의 분포 $P$를 근사적인 분포 $Q$로 모델링했을 때 발생하는 정보의 손실량을 측정한다. 이는 단순히 두 분포 사이의 '거리'를 재는 것이 아니라, $Q$를 사용하여 $P$를 표현했을 때 얼마나 비효율적인지를 나타내는 지표이다.
2. 수학적 정의 및 수식
KL 발산은 확률 변수의 성격(이산형 또는 연속형)에 따라 다음과 같이 정의된다. (이산 확률 질량 함수는 대문자로, 연속 확률 밀도 함수는 소문자로 표기한다.)
2.1. 수식 정의
| 구분 | 수식 | 설명 |
|---|---|---|
| 이산 확률 분포 | $D_{KL}(P \parallel Q) = \sum_{x \in \mathcal{X}} P(x) \log \frac{P(x)}{Q(x)}$ | 모든 가능한 사건 $x$에 대한 합으로 계산 |
| 연속 확률 분포 | $D_{KL}(P \parallel Q) = \int_{-\infty}^{\infty} p(x) \log \frac{p(x)}{q(x)} dx$ | 확률 밀도 함수(PDF)의 적분으로 계산 |
정의 조건 (절대 연속성): KL 발산이 정의되기 위해서는 절대 연속성(Absolute Continuity) 조건이 필요하다. 즉, $P(x) > 0$인 모든 $x$에 대해 $Q(x) > 0$이어야 한다. 만약 $P(x) > 0$인데 $Q(x) = 0$인 지점이 존재한다면, 분모가 0이 되어 KL 발산 값은 무한대($\infty$)로 발산한다.
2.2. 기대값 형태의 표현
KL 발산은 확률 분포 $P$에 대한 로그 가능도 비율의 기대값(Expectation)으로 표현할 수 있다. $$D_{KL}(P \parallel Q) = \mathbb{E}_{x \sim P} \left[ \log \frac{P(x)}{Q(x)} \right]$$ 여기서 $\log$의 밑이 2이면 단위는 비트(bit), 자연로그($e$)이면 나트(nat)를 사용한다.
2.3. 정규분포 간의 닫힌 형태(Closed-form) 수식
두 분포가 각각 평균 $\mu_0, \sigma_0^2$와 $\mu_1, \sigma_1^2$를 갖는 단변량 정규분포 $P = \mathcal{N}(\mu_0, \sigma_0^2)$와 $Q = \mathcal{N}(\mu_1, \sigma_1^2)$일 때, KL 발산은 다음과 같이 계산된다. $$D_{KL}(P \parallel Q) = \log \frac{\sigma_1}{\sigma_0} + \frac{\sigma_0^2 + (\mu_0 - \mu_1)^2}{2\sigma_1^2} - \frac{1}{2}$$
3. 주요 특성
KL 발산은 수학적으로 '거리(Distance)'의 개념을 사용하지만, 엄밀한 의미의 거리 함수(Metric) 정의를 만족하지 않는다.
3.1. 거리 함수의 조건 불충족
- 비대칭성 (Asymmetry): $D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P)$.
- Forward KL ($D_{KL}(P \parallel Q)$): $P$가 존재하는 모든 영역을 $Q$가 덮으려 하는 성질이 있다. 이를 Zero-avoiding 또는 Mean-seeking 특성이라고 하며, $Q$가 $P$의 전체적인 평균을 따라가는 경향을 보인다.
- Reverse KL ($D_{KL}(Q \parallel P)$): $Q$가 $P$의 확률이 높은 특정 영역(피크)에 집중하려는 성질이 있다. 이를 Zero-forcing 또는 Mode-seeking 특성이라고 하며, $P$가 다봉 분포(Multi-modal)일 때 $Q$는 그중 하나의 모드에만 집중하는 경향을 보인다.
- 삼각부등식 불성립 (Triangle Inequality Violation): 세 분포 $P, Q, R$에 대해 $D_{KL}(P \parallel R) \le D_{KL}(P \parallel Q) + D_{KL}(Q \parallel R)$이 성립하지 않는다.
3.2. Gibbs의 부등식 (Gibbs' Inequality)
KL 발산은 항상 0보다 크거나 같다. $$D_{KL}(P \parallel Q) \ge 0$$ 단, $P = Q$일 때만 $D_{KL}(P \parallel Q) = 0$이 된다. 이는 젠슨의 부등식(Jensen's Inequality)을 통해 증명되며, 어떤 근사 분포를 사용하더라도 실제 분포보다 정보 효율성이 높을 수 없음을 의미한다.
4. 정보이론적 해석
KL 발산은 엔트로피와 교차 엔트로피의 차이로 해석할 수 있다.
- 엔트로피(Entropy): 분포 $P$ 자체의 불확실성 또는 최소 평균 코드 길이.
- 교차 엔트로피(Cross Entropy): 분포 $P$를 분포 $Q$로 인코딩했을 때의 평균 코드 길이.
관계도
| 개념 | 수식 | 의미 |
|---|---|---|
| 엔트로피 | $H(P) = -\sum P(x) \log P(x)$ | $P$를 최적으로 표현하기 위한 최소 정보량 |
| 교차 엔트로피 | $H(P, Q) = -\sum P(x) \log Q(x)$ | $P$를 $Q$라는 틀로 표현했을 때의 정보량 |
| KL 발산 | $D_{KL}(P \parallel Q) = H(P, Q) - H(P)$ | $Q$를 사용함으로써 추가로 발생하는 정보 손실 |
5. 주요 활용 분야
KL 발산은 확률 분포를 최적화해야 하는 다양한 머신러닝 및 통계 모델에서 핵심적인 손실 함수로 사용된다.
5.1. 변분 추론 (Variational Inference) 및 VAE
변분 오토인코더(VAE)에서는 잠재 변수(Latent Variable)의 분포 $Q(z|x)$가 사전 분포(Prior)인 $P(z)$(보통 표준정규분포)와 유사해지도록 강제하기 위해 KL 발산을 손실 함수에 포함한다.
5.2. t-SNE (t-distributed Stochastic Neighbor Embedding)
고차원 데이터를 저차원으로 시각화하는 t-SNE는 고차원 공간에서의 유사도 분포 $P$와 저차원 공간에서의 유사도 분포 $Q$ 사이의 KL 발산을 최소화하는 방향으로 점들을 배치한다.
5.3. 실제 데이터셋 적용 사례: 텍스트 분류
특정 문서 집합(예: 뉴스 기사)의 단어 출현 빈도 분포 $P$와 전체 말뭉치(Corpus)의 단어 분포 $Q$를 비교하여, 해당 문서가 일반적인 언어 패턴에서 얼마나 벗어나 있는지(특이도)를 측정하여 주제 분류나 이상치 탐지에 활용한다.
6. 한계 및 대안
비대칭성으로 인해 $D_{KL}(P \parallel Q)$와 $D_{KL}(Q \parallel P)$ 중 어느 쪽을 최소화하느냐에 따라 결과가 달라지는 문제가 발생한다. 이를 해결하기 위해 Jensen-Shannon Divergence (JSD)가 제안되었다.
KL Divergence vs JS Divergence 비교
| 특성 | KL Divergence | JS Divergence |
|---|---|---|
| 대칭성 | 비대칭 ($P \parallel Q \neq Q \parallel P$) | 대칭 ($P \parallel Q = Q \parallel P$) |
| 거리 함수 | 거리 함수 아님 | 거리 함수의 제곱근이 메트릭을 형성 |
| 값의 범위 | $[0, \infty)$ | $[0, 1]$ (밑이 2인 로그 사용 시) |
| 정의 | $D_{KL}(P \parallel Q)$ | $\frac{1}{2}D_{KL}(P \parallel M) + \frac{1}{2}D_{KL}(Q \parallel M)$ (단, $M = \frac{P+Q}{2}$) |
부록: 파이썬 구현 및 시각화
1. 파이썬 구현 예제
<a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%B6%84%EC%84%9D/SciPy" class="wiki-link">SciPy</a> 라이브러리를 이용한 이산 확률 분포의 KL 발산 계산 코드이다.
# 필요한 라이브러리 설치: pip install numpy scipy
import numpy as np
from scipy.special import rel_entr
def calculate_kl_divergence(p, q):
"""
p: 실제 분포 (True Distribution)
q: 근사 분포 (Approximate Distribution)
"""
# rel_entr(p, q)는 p * log(p/q)를 계산함
return np.sum(rel_entr(p, q))
# 예시 데이터: 두 확률 분포 (합이 1이어야 함)
P = np.array([0.4, 0.3, 0.2, 0.1])
Q = np.array([0.3, 0.3, 0.2, 0.2])
kl_pq = calculate_kl_divergence(P, Q)
kl_qp = calculate_kl_divergence(Q, P)
print(f"D_KL(P || Q): {kl_pq:.4f}")
print(f"D_KL(Q || P): {kl_qp:.4f}")
# 결과: 두 값이 다르게 출력되어 비대칭성을 확인할 수 있음
2. 분포 간 차이 시각화 개념
분포의 차이에 따른 KL 발산의 변화는 다음과 같은 경향을 보인다.
- Case A ($P \approx Q$): 두 확률 밀도 함수 그래프가 거의 겹쳐 있으며, $D_{KL}$ 값은 0에 가깝다.
- Case B ($P \neq Q$): 두 그래프의 피크(Peak) 위치가 다르거나 분산이 차이 나며, $D_{KL}$ 값이 증가한다.
- Case C ($Q(x)=0$ 인 지점에서 $P(x)>0$): $Q$가 $P$의 가능성을 완전히 배제한 경우, $\log(P/0)$가 되어 $D_{KL}$ 값은 무한대($\infty$)로 발산한다. 이는 모델 $Q$가 실제 데이터 $P$를 전혀 설명하지 못하는 치명적인 오류 상태를 의미한다.
이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.