
KL Divergence [medium]
v1 엔트로피 는 단일 분포 의 불확실성. 두 분포 p,q 의 차이 를 측정하는 것이 Kullback-Leibler divergence:
DKL(p∥q)=∑ipilog2qipi
p = 진실 (target), q = 근사 (model). VAE, t-SNE, RL (PPO), language model 의 구석구석에 등장.
성질
| 성질 | 설명 |
|---|
| DKL≥0 | Gibbs 부등식, =0⟺p=q |
| 비대칭 | DKL(p∥q)=DKL(q∥p) |
| 스케일 의존 | log2 (비트) vs ln (내트) 선택에 따라 상수배 |
| qi=0,pi>0 | 수학적으로 ∞ — 수치적으로 q 를 ε 로 clip |
| pi=0 | pilog(⋅)=0 |
Cross-Entropy 와의 관계
H(p,q)=H(p)+DKL(p∥q)
p 가 고정이면 cross-entropy 최소화 = KL 최소화.
과제
함수 kl_divergence(p, q, epsilon=1e-12) 를 완성하세요.
p, q: 1D 확률 배열 (합 ≈ 1 가정).
epsilon: q 에 대한 clip 하한 (0 나눗셈 방지).
- 반환: Python
float, 비트 단위 (log2).
- pi=0 → 해당 항 0 (by convention).
- qi 작으면 max(qi,ϵ) 로 clip 후 계산.
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | DKL(p∥p)=0 | |
| 2 | 비음수: DKL≥0 (랜덤 분포) | |
| 3 | 비대칭: DKL(p∥q)=DKL(q∥p) | |
| 4 | p= one-hot: DKL=−log2qhot | |
| 5 | q 에 0 있어도 finite (ε clip) | |
| 6 | cross_entropy = H(p) + D_KL(p‖q) 관계 | |
| 7 | scipy entropy(p, q, base=2) 와 일치 | |