
KL 발산 — 두 가우시안 간 (closed-form)
39번 KL 발산 은 이산 분포 입니다. 연속 가우시안 두 개 N(μ1,σ1), N(μ2,σ2) 사이의 KL 은 닫힌 식 으로 표현됩니다 (나츠 단위):
DKL(N(μ1,σ1)∥N(μ2,σ2))=logσ1σ2+2σ22σ12+(μ1−μ2)2−21
왜 중요?
VAE (Variational Autoencoder) 의 핵심 항. 학습된 분포 q(z∣x)=N(μ,σ) 를 표준 정규 N(0,1) 에 가깝게 유지하도록 규제:
DKL(N(μ,σ)∥N(0,1))=−21(1+2logσ−μ2−σ2)
매우 자주 보게 되는 수식.
과제
함수 kl_gaussian(mu1, sigma1, mu2, sigma2) 를 완성하세요.
- 네 개의 float (1차원 gaussian).
- 반환: Python
float (nats 단위).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | 같은 파라미터 → 0 | KL(N, N) = 0 |
| 2 | 비음수 | 임의 파라미터에서 ≥ 0 |
| 3 | scipy 일치 | scipy.stats 비교 |
| 4 | VAE 형태 (→N(0,1)) | 단순화 식과 일치 |
| 5 | 비대칭 | KL(P,Q) ≠ KL(Q,P) |