ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문공부] Denoising Diffusion Probabilistic Models (DDPM) 설명 2
    Deep-learning 2021. 7. 10. 02:45

    ─ 들어가며 ─

     이 포스트는 DDPM 설명 1(링크)의 후속 포스트로 학습 방법 및 결과에 대한 포스트(완)입니다. 이론적인 내용과 간략한 설명은 이전 포스트를 확인해주세요

     

     

    DDPM post1 의 2번 항목에서에서 도출한 loss function은

    DDPM loss function

    ①은 VAE의 KL divergence와 비슷한 term이고,

    ②는 reverse process와 diffusion process의 분포를 매칭시키는(KL divergence를 낮추는) loss이고

    ③은 reverse process의 마지막 과정으로, VAE의 reconstruction loss에 대응되는 term이라고 볼 수 있습니다.

     

    3. Loss 설명 및 training technique

    이 loss term을 최적화시키는 방법, 그리고 더 좋은 generative model이 되는 loss modification에 대한 설명입니다(결과 및 discussion로 스킵을 원하시면 4.를 확인해주세요).

     

    3-1) ① latent $p_\theta(x_T)$가 $q(x_T|x_0)$에 가까워지게!

    We ignore the fact that the forward process variances $\beta_t$ are learnable by reparameterization and instead fix them to constants (see Section 4 for details). Thus, in our implementation, the approximate posterior $q$ has no learnable parameters, so $L_T$ is a constant during training and can be ignored.

    Section 4

    We set $T=1000$ for all experiments so that We set the forward process variances to constants increasing linearly from $\beta_1=10^{-4}$ to $\beta_T=0.02$.

    논문 내용에서 발췌한 것입니다. 해석하면

    "$\beta_t$가 학습가능하긴 한데, 우리는 constant로 뒀다. 그래서 $q$는 learnable parameters가 아니라 뉴럴넷으로 학습시키지 않는다. 그러므로 ①번 loss는 constant로 학습과정에서 제외된다."

     

    실제로 논문의 내용을 확인하면 $beta_1=10^{-4}$에서 $beta_T=0.02$까지 $T=1000$으로 linear하게 증가한다고 하며, 이 정보에 따라 $q(x_T|x_0)$를 계산해보면

    $q(x_T|x_0)=\mathcal{N}(x_T; 0.00635x_0, 0.99995I)$

    로 거의

    $\mathcal{N} (0, I)$

    에 가깝습니다. 즉 noise latent $x_T$를 얻을때 VAE와 같이 따로 어떤 분포를 따라갈 필요가 없이 $x_T$의 sampling은 Gaussian distribution에서 sampling하게 됩니다.

     

    3-2) ② reverse process가 diffusion process와의 KL divergence가 낮게, 그리고 학습시 technique

    이전 포스트에서 diffusion process와 reverse process가 서로 condition과 target variable이 교차되어 있지만 수식 전개를 통해 condition, target variable을 matching시켜주었습니다.

     

    $$\Bbb{E}_{x_{1:T}~q(x_{1:T}|x_0)}[\sum_{t=2}^Tlog(\frac{p_\theta(x_{t-1}|x_t)}{q(x_{t-1}|x_t, x_0)})]$$

    위 term의 log의 분모 $q(x_{t-1}|x_t, x_0)$는

    $q(x_{t-1}|x_t, x_0)=\mathcal{N}(\widetilde{\mu}(x_t, x_0), \widetilde{\beta}_tI)$

    where,

    $\widetilde{\mu}(x_t, x_0):=\frac{\sqrt{\widetilde{\mu}_{t-1}}\beta_t}{1-\widetilde{\alpha_t}}x_0+\frac{\sqrt{\widetilde{\alpha}_t}(1-\widetilde{\alpha}_{t-1})}{1-\widetilde{\alpha}_t}x_t$, $\widetilde{\beta}_t:=\frac{1-\widetilde{\alpha}_{t-1}}{1-\widetilde{\alpha}_t}\beta_t$

    로 tractable하게 구할 수 있습니다.

     

    neural net으로 model 선언을 할 때 확률모델을 설계한다면 output으로 $\mu_\theta$, $\sigma_\theta$를 추정하게 되는데, 여기서 $\mu_\theta$ 는 위의 $\widetilde{\mu}(x_t, x_0)$와 가까워지도록 학습하게 됩니다. 여기서 $x_t$를 $x_0$에 대한 reparameterization 형태로 나타내고 식을 정리하면

     

    $$\Bbb{E}_{x_0, \epsilon}[\frac{\beta_t^2}{2\sigma^2\alpha_t(1-\widetilde{\alpha}_t)}|\epsilon-\epsilon_\theta(\sqrt{\widetilde{\alpha}_t}+\sqrt{1-\widetilde{\alpha}_t}\epsilon, t) |^2],$$

    $x_t=x_0+\epsilon_\theta(\sqrt{\widetilde{\alpha}_t}+\sqrt{1-\widetilde{\alpha}_t}\epsilon, t)$,        $\mu_\theta(x_t, t)=\frac{1}{\sqrt{\alpha_x}}(x_t-\frac{\beta_t}{\sqrt{1-\widetilde{\alpha}_t}}\epsilon_\theta(x_t,t))$

    가 됩니다. loss 식을 보게 되면 neural net의 output $\epsilon_\theta$이 Gaussian $\epsilon$과의 Mean square error를 최소화하도록 optimize하게 됩니다.

     

    여기서 제가 처음 읽을 때는 좀 이상했던게 neural net의 output이 Gaussian noise에 수렴하도록 하는 것이 직관적으로는 와닿지 않았는데, neural net의 output도 reparameterization을 수행하고, diffusion process $q$ 또한 reparameterization을 하여 두 reparameterization의 uncertainty인 Gaussian을 matching시키는 것이라는 접근으로 이해하였습니다.

     

    여기서 논문의 저자는 optimize할 loss식

    $$\Bbb{E}_{x_0, \epsilon}[\frac{\beta_t^2}{2\sigma^2\alpha_t(1-\widetilde{\alpha}_t)}|\epsilon-\epsilon_\theta(\sqrt{\widetilde{\alpha}_t}+\sqrt{1-\widetilde{\alpha}_t}\epsilon, t) |^2],$$

    의 coefficient를 뺀 

    $$\Bbb{E}_{x_0, \epsilon}[|\epsilon-\epsilon_\theta(\sqrt{\widetilde{\alpha}_t}+\sqrt{1-\widetilde{\alpha}_t}\epsilon, t) |^2],$$

    를 update하는 것이 생성 모델 성능이 더 좋았다고 합니다.

     

    loss의 coefficient는 $t$가 증가함에 따라 작아집니다. 따라서 coefficient를 제거하면 $t$가 큰 process의 loss가 상대적으로 더 커진 것과 같으므로 larger $t$의 process에 더 집중하게 됩니다. 논문에서는 학습의 입장에서도 이미지에 가까운(덜 noisy한) 것에서 noise를 제거하는 것보다 noise가 심한 이미지에서 noise를 제거하는 것에 더 집중하는 모델이 성능이 좋을 것이라고 설명하였습니다.

     

     

    3-3) ③마지막 latent $x_1$에서 data $x_0$로의 reconstruction

    VAE 입장에서는 reconstruction loss와 같습니다.

     

    하지만, VAE는 Gaussian $z~\mathcal{N}(0, I)$에서 image로 reconstruction이었다면 DDPM의 reconstruction은 아주 미세하게(one-process-infinitesimally) noisy한 이미지에서 원래의 image로의 reconstruction이므로 학습되는 모델 입장에서는 보다 쉬운 task라고 할 수 있습니다.\[ \prod_{p \leq 7} \biggl( 1 - \frac{1}{p} \biggr) \]

    수식으로 나타내면

    $$p_\theta(x_0|x_1)=\prod_{i=1}^{D}\int_{\delta_-(x_0^i)}^{\delta_+(x_0^i)}\mathcal{N}(x;\mu_\theta^i(x_1, 1), \sigma_1^2)dx$$

    수식으로 써놓으면 어렵게 보이긴 한데, 실제 구현상에서는 이미지 $x_{t=0}$에 대해 $x_{t=1}$을 집어넣어서 나온 결과가 $x_{t=0}$와의 MSE loss를 최소화하는 것과 같습니다.

     

    4. 결과 및 discussion

    4-1) Result

    한마디로, 좋은 샘플을 만들어냈고, FID 결과가 좋았다고 합니다. IS score의 경우 약간 구리지만요.

    IS(inception score)는 생성된 image로부터 classification을 할 때 얼마나 특정 class로의 추정을 잘 하는지에 대한 score로 classification 성능이 좋으면서 전체 class를 고르게 생성해낼수록 IS score가 높습니다.

    FID(Frechet Inception Distance)는 실제 데이터를 참고하여(정확히는 데이터 분포를 참고) 평균, 공분산을 비교하며 낮을수록 좋습니다.

     

    그런데 논문 저자들이 말하길, 'FID가 좋은데 왜 NLL 결과는 안좋을까?' 하는 의문이 들었다고 합니다. NLL이 높다는 것은 보다 불확실하다는(이미지 픽셀당 평균 확률이 낮은) 의미인데, 이에 대한 해명을 discussion에서 하였습니다.

     

    4-2) Discussion

     

    1. 위 사진의 첫 번째 그래프는 $T-t$가 0에서 1000까지 증가하면서(즉 $t=T$ → $t=0$의 과정, noise-to-image), RMSE가 선형에 가까운 형태로 줄어드는 것을 확인한 그래프입니다.
    2. 두 번째 그래프는 $T-t$가 0에서 1000까지 증가하면서 정보량이 급격하게 증가하는 것을 확인한 그래프입니다.
    3. 세 번째 그래프는 첫 번째 그래프와 두 번째 그래프의 y축을 서로 대응시킨 것으로 정보량이 0에서 0.5까지 증가할 때 대부분의 왜곡(RMSE)이 제거된 것을 확인한 그래프입니다.

     

    이 그래프를 통해서 논문에서는 "세 번째 그림의 0.5까지의 적은 정보량에 이미 noise를 충분히 제거하는(왜곡을 제거하는)(RMSE를 낮추는) 정보가 들어있다. 그러므로 reverse process의 후반부 과정($t=0$에 가까운 시점의 process state)에 나머지 정보량(NLL)이 있고 여기에는 거의 보이지 않는 왜곡(imperceptible distortion)을 줄이는 정보가 있어서 괜찮다."고 해명합니다.

     

    5. 마무리하며

    2편에 걸친 DDPM에 관련된 포스팅은 논문 내용의 모든 것을 담고있지는 않습니다.

    1. 원 논문에서 자주 언급되는 Langevin dynamics에 대해서 저는 잘 몰라서 이에 대해서는 언급하지 않았습니다.
    2. 또한 loss의 optimize 방법으로 갈라지는 몇 가지 갈래가 있습니다. 그 중 reverse process 학습에서 $\mu$의 optimize만 설명하였고 $\sigma$에 대한 설명을 생략하였습니다. 두 방법이 있다고 하였는데 두 방법 모두 학습에 큰 지장을 끼치지 않는다고 합니다.
    3. 또한 Generation과정에서의 여러 technique들도 언급하지 않았습니다. 이에 대해서는 Flow 기반 모델들의 방법과 유사하니 이와 비슷한 접근임을 알고 읽으신다면 이해하실 수 있을 것입니다.

     

    추가로 몇가지 디테일들이 있으나 생략된 것들이 많습니다. 하지만, 이 포스팅의 전체적인 과정을 이해하시면 디테일을 이해하시는 데에 도움이 될거라 생각합니다.

     

    (근본없이 제 논리대로만 읽은 내용이라)혹시 포스팅에 잘못된 정보가 있을 시 댓글로 남겨주시면 감사하겠습니다. :)

     

    댓글

Designed by Tistory.