“두 분포가 얼마나 다른가”를 묻는 방법은 하나가 아니다. KL-divergence, JSD, Wasserstein — 이들은 제각각 다른 질문에 대한 답이다. 그런데 왜 VAE는 reverse KL을 쓰고, WGAN은 Wasserstein을 쓰는가? 단순히 “실험적으로 잘 됐다”는 이유 이전에, 각 선택에는 수학적으로 피할 수 없는 이유가 있다.
KL의 비음수성 — 출발점
KL-divergence는 다음과 같이 정의된다.
D(p∥q)=EX∼p[logq(X)p(X)]
이 값이 항상 ≥0이라는 사실은 Gibbs 부등식이다. 증명의 핵심은 log가 엄격 오목이라는 점에 있다.
정리 1
· Gibbs 부등식
임의의 분포 p,q에 대해 D(p∥q)≥0. 등호는 p=q a.s.일 때 정확히 성립한다.
Reverse KL은 q의 support를 p의 support 안으로 강제한다. VAE ELBO의 KL 항이 reverse인 이유가 여기 있다 — 근사 사후 qϕ(z∣x)를 사전 p(z)의 support 밖으로 내보내지 않으려는 설계 철학이다. PPO의 KL penalty가 reverse인 이유도 동일하다: πθ가 πref의 distribution 밖으로 표류하는 것을 막는다.
JSD와 GAN — KL의 두 고질병을 고치다
KL에는 두 가지 고질병이 있다. 비대칭성과 support 불일치 시 ∞ 발산. Jensen–Shannon Divergence는 이를 가장 단순하게 고친다.
JSD(p∥q)=21D(p2p+q)+21D(q2p+q)
평균 분포 m=(p+q)/2는 p와 q 양쪽의 support를 포함하므로 발산 문제가 사라지고, 구성상 대칭이다. 또한 0≤JSD≤log2로 유계다.
GAN의 이론적 토대가 JSD인 이유는 다음 정리에서 드러난다.
정리 2
· GAN의 최적 판별기와 JSD
GAN objective V(G,D)=Epdata[logD(x)]+Epg[log(1−D(x))]의 판별기 최적해는 D∗(x)=pdata(x)/(pdata(x)+pg(x))이며, 이때 maxDV(G,D)=2JSD(pdata∥pg)−2log2.
Generator는 JSD를 최소화하고, 최솟값 0은 pg=pdata일 때만 도달한다. 깔끔한 이론이다. 그런데 실제로는 왜 학습이 불안정한가?
⚠ JSD의 치명적 결함
p와 q의 support가 disjoint이면 JSD(p∥q)=log2 — 상수. Generator의 파라미터에 대한 gradient가 0이 된다. 초기 GAN에서 고차원 이미지 manifold는 거의 항상 이 상황이다.
f-divergence — 모든 발산의 통일 프레임
KL, reverse KL, JSD, Hellinger, TV, χ2는 각각 독립된 공식이 아니다. 볼록함수 f에서 f(1)=0인 경우,
Df(p∥q)=Eq[f(q(x)p(x))]
으로 통일된다. f(t)=tlogt이면 forward KL, f(t)=−logt이면 reverse KL, f(t)=(t−1)2이면 Hellinger.
이 틀의 핵심 성질은 세 가지다. 첫째, Jensen 부등식으로 비음수성이 자동으로 성립한다. 둘째, Data Processing Inequality: 임의의 채널 K에 대해 Df(K∘p∥K∘q)≤Df(p∥q) — 데이터 가공은 모든 f-divergence를 감소시킨다. 셋째, Fenchel–Legendre 변분 표현:
Df(p∥q)=Tsup{Ep[T(X)]−Eq[f∗(T(X))]}
이 변분 표현이 f-GAN의 핵심이다 — 신경망 Tϕ로 Df를 샘플만으로 추정할 수 있다.
Wasserstein — 지리적 거리가 필요할 때
f-divergence는 밀도 비율 p/q만 본다. 분포들이 공간 위에 어떻게 놓여 있는지는 무관하다. Wasserstein은 다른 질문을 한다: “한 분포의 질량을 다른 분포로 옮기는 최소 운반 비용은?”