
KL 발산 (Kullback–Leibler Divergence)
두 분포가 얼마나 다른지 측정. 교차엔트로피와 엔트로피의 차이 (36번, 37번):
DKL(p∥q)=∑ipilog2qipi=H(p,q)−H(p)
주요 성질
- 비음수: DKL≥0, 같으면 0 (Gibbs 부등식).
- 비대칭: DKL(p∥q)=DKL(q∥p) 일반적으로. 그래서 "거리"가 아니라 "발산".
q_i = 0 이지만 p_i > 0 인 경우 ∞ → 실무에선 클리핑.
머신러닝에서
- VAE의 인코더 정규화 (prior와 posterior 비교)
- 강화학습 policy update 제약
- 일반화의 cross entropy loss 해석
과제
함수 kl_divergence(p, q) 를 완성하세요.
- 반환: Python
float, bits.
p_i > 0 인 항만 계산, q 는 클리핑.
테스트 케이스
| # | 이름 | p | q | 기대 |
|---|
| 1 | p == q → 0 | [0.3, 0.7] | [0.3, 0.7] | 0 |
| 2 | 단순 | [0.5, 0.5] | [0.25, 0.75] | ≈ 0.208 |
| 3 | 비음수 | 무작위 p, q | >= 0 | |
| 4 | 비대칭 | 임의 다른 분포 | KL(p,q) != KL(q,p) | |
| 5 | H(p,q) - H(p) 관계 | 임의 | 성립 | |