DDPM: Diffusion Model Background

DDPM: Denoising Diffusion Probabilistic Model의 Introduction과 background 부분에 서술된 Diffusion 모델 기초에 설명이 부족해 여러 블로그를 참고해 따로 서술해본다.
 
 

0. Abstract

이 논문에서는 nonequilibrium thermodynamics로부터 고안된 잠재 변수 모델 중 하나인 diffusion probabilistic models를 제안한다. 이 diffusion probabilistic model은 high quality image synthesis를 수행 할 수 있다. 이 논문에서는 diffusion probabilistic model과 Langevin dynamics의 denoising score에 적절한 connection을 사용한다.

 

1. Introduction

  • 본 논문은 diffusion probabilistic models의 progress를 소개한다.
  • Diffusion model은 data에 noise를 조금씩 더해가거나 noise로부터 조금씩 복원해가는 과정을 통해 data를 generate하는 모델이다.
  • 이를 한 눈에 표현하면 아래 그림과 같다. 아래 그림에서 x0x_0는 실제 데이터, xTx_T는 최종 noise, 그리고 그 사이의 xtx_t는 데이터에 noise가 더해진 상태의 latent variable을 의미한다.
  • 즉, Diffusion model의 goal은 pθ(x0)=∫pθ(x0:T)dx1:Tp_{\theta}(x_0) = \int p_{\theta}(x_{0:T}) dx_{1:T} 를 찾는 것이다. (pθ(x0:T)p_{\theta}(x_{0:T})는 reverse process에 해당하며, x1,…,xTx_1,…,x_T는 x0∼q(x0)x_0 \sim q(x_0)와 같은 차원의 latents)
  • 우선, 위 그림의 오른쪽에서 왼쪽 방향으로 noise를 점점 더해가는 forward process q(xt∣xt−1)q(x_{t}|x_{t-1})를 진행한다. 그리고 이 forward process를 반대로 추정하는 reverse process pθ(xt−1∣xt)p_{\theta}(x_{t-1}|x_t)를 학습함으로써 noise(xT)noise(x_T)로부터 data(x0)data(x_0) 를 복원하는 과정을 학습한다.
  • 이 reverse process를 활용해서 random noise로부터 우리가 원하는 image, text, graph등을 generate할 수 있는 모델을 만들어내는 것이다.
 

2. Background

(1) Forward Diffusion Process (q)

  • Forward Diffusion Process, q는 markov chain으로 data(x0)data(x_0)부터 noise를 더해가면서 최종 noise(xT)noise(x_T) 형태로 가는 과정이다. (sampling의 반대방향) 우리가 이 과정의 분포를 알아내야 하는 이유는, reverse process의 학습을 forward process의 정보를 활용해서 하기 때문이다.
 
forward process의 수식 표현
forward process의 수식 표현
  • data에 noise를 추가할 때, variance schedule {βt∈(0,1)}t=1T\{\beta_t \in (0,1)\}_{t=1}^{T} 를 이용하여 scaling을 한 후 더해준다.
    • 매 step마다 gaussian distribution에서 reparameterize를 통해 sample하게 되는 형태로 noise는 추가되는데, 이때 단순히 noise만을 더해주는게 아니라  1−βt\sqrt{1-\beta_t}로 scaling하는 이유는 variance가 발산하는 것을 막기 위함이다.
    • variance를 unit하게 가둠으로써 forward-reverse 과정에서 variance가 일정수준으로 유지될 수 있게 된다
      • xt=1−βt xt−1+βt∗ϵ(1−βt)2+βt=1x_t = \sqrt{1-\beta_t}\ x_{t-1} + \beta_t * \epsilon \\ (\sqrt{1-\beta_t})^2 + \beta_t = 1
    • 이 값은 learnable parameter로 둘 수도 있지만, 실험을 해보니 상수로 두어도 큰 차이가 없어서 constant로 두었다고 한다.
    • 데이터가 이미지와 비슷할 때에는 이 값을 매우 작게 설정하다가 gaussian distribution에 점점 가까워질 수록 이 값을 크게 설정 (10^-4에서 0.02로 linear하게 증가)
  • t번의 sampling을 통해 매 step을 차근차근 밟아가면서 x0x_0에서 xtx_t를 만들 수도 있지만, 한번에 이를 할 수도 있다.
    • 재귀적으로 식을 정리하다보면, 어떤 data x0x_0가 주어졌을 때 xtx_t의 분포는 다음과 같다.
    • at:=1−βt and αtˉ:=∏s=1tαsq(xt∣x0)=N(xt;αtˉx0, (1−αtˉ)I)a_t := 1-\beta_t \ and \ \bar{\alpha_t} := \prod_{s=1}^{t}\alpha_s \\ q(x_t|x_0) = \mathcal{N}(x_t;\sqrt{\bar{\alpha_t}}x_0,\ (1-\bar{\alpha_t})\mathrm{I})
    • 한 step씩 학습을 하면 메모리와 resource가 너무 많이 든다. 그러나 이런식으로 한번에  를 만들고 나면, 여기서 loss를 구한 다음에 t에 대한 expectation을 구하는 식으로 학습이 가능하다 (어차피 stochastic gradient를 사용하기 때문에 이런식으로 학습해도 무방)
 
reparameterize 증명
reparameterize 증명
 

(2) Reverse Diffusion Process (p)

  • Reverse Diffusion Process p는 noise(xT)noise(x_T)로부터 data(x0)data(x_0)을 복원하는 과정이다.
  • 최종적으로 random noise로부터 data를 generate하는 generative model로 사용되기 때문에 diffusion model을 사용하기 위해서는 모델링하는 것이 필수적이지만, 이를 실제로 알아내는 것은 쉽지 않다.
    • → 우리가 알고 싶은건 q(xt−1∣xt)q(x_{t-1}|x_t)이나, 이를 알긴 어려움.

  • 그러므로 우리는 pθpθ 를 활용해서 이를 approximate한다. 이 때, 이 approximation은 Gaussian transition을 활용한 Markov chain의 형태를 가진다. 이를 식으로 표현하면 다음과 같다.
reverse process의 수식 표현
reverse process의 수식 표현
  • 위 식에서, 각 단계의 정규 분포의 평균 μθ\mu_θ 와 표준편차 ∑θ\sum_θ 는 학습되어야 하는 parameter들이다. 그리고 위 식의 시작 지점인 noise의 분포는 다음과 같이 가장 간단한 형태의 표준정규분포로 정의한다.
p(xT)=N(xT;0,I)p(x_T) = \mathcal{N}(x_T;0,\mathrm{I})
 

(3) Objective Function (Loss)

  • 이렇게 reverse process와 forward process가 무엇인지를 알았으니 이제 pθp_\theta의 parameter 추정을 위해 diffusion model을 어떻게 학습을 하는지에 대해 알아보겠다.
  • 우리는 앞서 언급했듯이 실제 data의 분포인 pθ(x0)p_\theta(x_0)를 찾아내는 것을 목적으로 하기 때문에 결국 이의 likelihood를 최대화(음의 likelihood를 최소화)하는 것이 우리가 원하는 목적이다. 이를 식으로 나타내면 다음과 같다.
Diffusion Model의 Loss Function
Diffusion Model의 Loss Function
증명 보기
−log⁡pθ(x0)≤−log⁡pθ(x0)+DKL(q(x1:T∣x0)∣∣pθ(x1:T∣x0))=−log⁡pθ(x0)+Ex1:T∼q(x1:T∣x0)[log⁡q(x1:T∣x0)pθ(x0:T)/pθ(x0)]=−log⁡pθ(x0)+Ex1:T∼q(x1:T∣x0)[log⁡q(x1:T∣x0)pθ(x0:T)+log⁡pθ(x0)]=Eq[log⁡q(x1:T∣x0)pθ(x0:T)]=Eq[−log⁡pθ(x0:T)q(x1:T∣x0)]-\log {p_\theta}(x_0) \leq -\log {p_\theta}(x_0) + D_{KL}(q(x_{1:T}|x_0)||p_{\theta}(x_{1:T}|x_0)) \\ = -\log p_\theta(x_0) + \mathbb{E}_{x_{1:T}\sim q(x_{1:T}|x_0)}[\log {q(x_{1:T}|x_0) \over p_{\theta}(x_{0:T})/p_\theta(x_0)}] \\ = -\log p_\theta(x_0) + \mathbb{E}_{x_{1:T}\sim q(x_{1:T}|x_0)}[\log {q(x_{1:T}|x_0) \over p_{\theta}(x_{0:T})}+\log p_\theta(x_0)] \\ = \mathbb{E}_q[\log{q(x_{1:T}|x_0) \over p_\theta(x_{0:T})}] \\ = \mathbb{E}_q[-\log{ p_\theta(x_{0:T})\over q(x_{1:T}|x_0)}]
DKLD_{KL}: 쿨백-라이블러 발산 (Kullback–Leibler divergence, KLD)
  • 두 확률분포의 차이를 계산하는 데에 사용
  • DKL(P∣∣Q)=∑iP(i)log⁡P(i)Q(i)D_{KL}(P||Q) = \sum_iP(i) \log {P(i) \over Q(i)}
 
  • 또한 training loss의 세 번째 등호는 우리가 reverse process와 forward process를 Markov chain으로 정의했기 때문에 Markov property에 의해 성립한다.
    • Markov property

      어떤 시간에 특정 state에 도달하든 그 이전에 어떤 state를 거쳐왔든 다음 state로 갈 확률은 항상 같다는 성질

  • 마지막으로, 위 식을 좀 더 쉽게 계산하기 위해 다음과 같은 Gaussian 분포 간의 KL divergence 형태로 식을 변형한다.
Diffusion Model의 최종적인 Loss Function
Diffusion Model의 최종적인 Loss Function
  • 위 식에서 각각의 term이 가지는 의미를 하나씩 살펴보면 다음과 같다. 앞서 정리해 둔 수식들을 활용해보자.
    • LT: p가 generate하는 noise(xT)noise(x_T)와 qq가 x0x_0라는 데이터가 주어졌을 때 generate하는 noise(xT)noise(x_T) 간의 분포 차이
      • q(xT∣x0)q(x_T|x_0)와 p(xT)p(x_T)

        (1) q(xt∣x0)=N(xt;αtˉx0, (1−αtˉ)I)q(x_t|x_0) = \mathcal{N}(x_t;\sqrt{\bar{\alpha_t}}x_0,\ (1-\bar{\alpha_t})\mathrm{I})

        (2) p(xT)=N(xT;0,I)p(x_T) = \mathcal{N} (x_T;0,\mathrm{I})

    • Lt−1: p와 q의 reverse / forward process의 분포 차이. 이들을 최대한 비슷한 방향으로 학습한다.
      • q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)와 pθ(xt−1∣xt)p_{\theta}(x_{t-1}|x_t)
        (1) q(xt−1∣xt)q(x_{t-1}|x_t)는 알 수 없지만, q(xt−1∣xt,x0)q(x_{t-1}|x_t, x_0)은 알 수 있다.
        by Bayes’ rule → posterior, prior 사용! P(xt−1∣xt)=P(xt∣xt−1)P(xt−1)P(xt)P(x_{t-1}|x_t) = {P(x_t|x_{t-1}) P(x_{t-1}) \over P(x_t)}

        q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)q(x_{t-1}|x_t, x_0) = q(x_t|x_{t-1}, x_0){q(x_{t-1}|x_0)\over q(x_t|x_0)}

        ∴reverse conditional probability, q(xt−1∣xt,x0)=N(xt−1;μ~(xt,x0),β~tI)μ~t(xt,x0)=αˉt−11−αtˉβtx0 +αt(1−αˉt−1)1−αˉtxt, βt~=(1−αˉt−1)1−αˉt\therefore reverse\ conditional \ probability,\\ \ q(x_{t-1}|x_t, x_0) = N(x_{t-1}; \tilde{\mu}(x_t,x_0), \tilde{\beta}t\mathrm{I}) \\ \tilde{\mu}t(x_t,x_0) = \sqrt{\bar{\alpha}{t-1}\over1-\bar{\alpha_t}}\beta_tx_0 \ + {\sqrt{\alpha_t}(1-\bar{\alpha}{t-1})\over 1-\bar{\alpha}t}x_t, \ \tilde{\beta_t} = {(1-\bar{\alpha}{t-1})\over 1-\bar{\alpha}_t}

        (2) pθ(xt−1∣xt):=N(xt−1;μθ(xt,t), ∑θ(xt,t))p_{\theta}(x_{t-1}|x_t):=\mathcal{N}(x_{t-1};\mu_{\theta}(x_t,t),\ \sum_\theta (x_t,t))

    • L0: latent x1으로부터 data x0를 추정하는 likelihood. 이를 maximize하는 방향으로 학습한다.
      •  
증명 보기
최종 Loss Function 증명
최종 Loss Function 증명
 
  • 결론적으로, 우리가 diffusion model을 학습할 때의 training loss는 정규 분포 사이의 KL divergence 형태로 쉽게 계산될 수 있는 것이다.
 

References

  1. Ho, J., Jain, A., & Abbeel, P. (2020). Denoising diffusion probabilistic models.  Advances in Neural Information Processing Systems, 33, 6840-6851.
  1. https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
  1. https://happy-jihye.github.io/diffusion/diffusion-1/
  1. https://process-mining.tistory.com/182
 
 

다음 글