본문 바로가기

학술

KL 발산 계산하기

두 개의 다변량 정규분포 \(\mathcal{N}(\mu_1, \Sigma)\)와 \(\mathcal{N}(\mu_2, \Sigma)\) 간의 KL 발산은 다음과 같은 간단한 형태를 갖습니다: \[ D_{\mathrm{KL}}\bigl(\mathcal{N}(\mu_1, \Sigma) \,\big\|\, \mathcal{N}(\mu_2, \Sigma)\bigr) \;=\; \frac12\,(\mu_2 - \mu_1)^\top \Sigma^{-1} (\mu_2 - \mu_1). \] 즉, 공분산 \(\Sigma\)가 동일할 때(특히 \(\Sigma_1 = \Sigma_2 = \Sigma\)) KL 발산에서 “두 평균 벡터 간의 거리”만 남고, 아래와 같이 간단히 표현됩니다. \(\\\) 유도 개요 \(\\\) 1. **KL 발산 정의** \[ D_{\mathrm{KL}}(p \,\|\, q) \;=\; \int p(x)\,\ln \frac{p(x)}{q(x)}\,dx. \] 여기서 \[ p(x) = \mathcal{N}(\mu_1, \Sigma), \quad q(x) = \mathcal{N}(\mu_2, \Sigma) \] 라고 합시다. \(\\\) 2. **로그 가우시안 분포의 차** 정규분포 \(\mathcal{N}(\mu, \Sigma)\)의 로그 확률밀도는(정규화 상수와 함께) \[ \ln p(x) \;=\; - \tfrac12 (x - \mu)^\top \Sigma^{-1} (x - \mu) \;-\; \tfrac12 \ln |\Sigma| \;-\; \tfrac{k}{2}\ln(2\pi), \] 형태를 띱니다(여기서 \(k\)는 차원 수). 따라서 \[ \ln \frac{p(x)}{q(x)} = \ln p(x) - \ln q(x) \;=\; -\tfrac12 (x-\mu_1)^\top \Sigma^{-1} (x - \mu_1) + \tfrac12 (x-\mu_2)^\top \Sigma^{-1} (x - \mu_2), \] (공분산 항은 서로 상쇄되므로, \(\Sigma\)가 동일하면 로그 정규화 상수 부분도 사라집니다.) \(\\\) 3. **기댓값 계산** \[ D_{\mathrm{KL}}(p \,\|\, q) \;=\; \int p(x)\,\ln \frac{p(x)}{q(x)}\,dx \;=\; \int p(x)\, \Big[ -\tfrac12 (x-\mu_1)^\top \Sigma^{-1} (x - \mu_1) + \tfrac12 (x-\mu_2)^\top \Sigma^{-1} (x - \mu_2) \Big] \,dx. \] 위 적분을 \(\mu_1\) 중심의 정규분포에 대해 계산하면, cross-term이 사라지고(기댓값을 취했을 때 \(\mathbb{E}_{\mu_1}[x] = \mu_1\)이므로), 최종적으로 \[ \frac12 (\mu_2 - \mu_1)^\top \Sigma^{-1} (\mu_2 - \mu_1) \] 형태로 정리됩니다. \(\\\) 만약 \(\Sigma = \sigma^2 \mathbf{I}\) (등방 정규분포)라면 \(\Sigma^{-1} = \tfrac{1}{\sigma^2}\mathbf{I}\)가 되어, \[ \frac{1}{2\sigma^2}\|\mu_2 - \mu_1\|^2 \] 와 같은 형태로 단순화됩니다. \(\\\) 4. **DDPM에서 실제로는 \(\sigma_q^2(t)\)가 사용** \(\\\) DDPM의 “정방향(forward)” 과정에서 정해지는 분산 \(\sigma_q^2(t)\)를 “역방향(reverse)” 과정의 모델 \(p_\theta\)에서도 그대로 사용한다는 가정(또는 고정하는 기법)을 둡니다. 이때 두 분포의 공분산이 동일해지고, KL 발산은 평균 차이에 관한 항만 남는 형태가 됩니다. 결국 DDPM에서 \[ D_{KL}\bigl(q(x_{t-1}, x_t \mid x_0) \,\|\, p_\theta(x_{t-1}, x_t)\bigr) \;=\; \frac{1}{2 \sigma_q^2(t)}\,\bigl\|\mu_\theta(x_t, t) \;-\; \mu_q(x_t, x_0)\bigr\|^2 \] 와 같이 쓰이는 이유는, **“두 분포를 동일한 공분산을 갖는 가우시안으로 설정했을 때, KL 발산은 평균 벡터 간의 차 제곱항으로만 남게 되기 때문”**입니다. 이렇게 분산을 고정하거나 동일하게 두면 계산이 크게 단순해지고, 학습 과정에서도 \(\mu_\theta\) 쪽만 학습 대상이 되므로 실제 구현에서도 편리합니다. \(\\\) 정리 \(\\\) 서로 동일한 공분산 \(\Sigma\)를 갖는 두 다변량 정규분포의 KL 발산은 평균 벡터의 차에 대한 \(\Sigma^{-1}\) 가중 거리로 단순화되어, 결과적으로 \[ \boxed{ D_{\mathrm{KL}} \bigl( \mathcal{N}(\mu_1,\Sigma) \;\|\; \mathcal{N}(\mu_2,\Sigma) \bigr) = \frac12\, (\mu_2 - \mu_1)^\top \Sigma^{-1}(\mu_2 - \mu_1) } \] 가 됩니다.

'학술' 카테고리의 다른 글

Softmax-with-Loss 계층의 그래디언트  (0) 2019.03.15