2025. 3. 31. 19:26ㆍ논문리뷰/Diffusion
이번 글에서 다룰 주제는 DDPM으로 최근 세간에 생성 모델로 많이 알려지게 된 Diffusion 모델의 초기 기폭제가 된 논문이다. 물론 Diffusion이라는 개념 자체는 2015년 논문에 처음 등장하였지만 그 때 당시 성능이 크게 좋지 못해 주목받지 못하였다. 하지만 Jonathan Ho님께서 이 개념을 발전시켜 생성모델에서 엄청난 성능과 학습 안정성을 가지도록 만들었으니...그것이 DDPM되겠다.
논문 리뷰라고 적어놓았지만 실질적으로 전반적인 내용과 그 수식에 대한 정리글이다. 수식에 대해서는 블로그와 권민기님의 유튜브를 많이 참고하였으니 해당 레퍼런스는 마지막 부분에 달아놓겠다.
1. How the Diffusion works?
수식을 들어가기 앞서 Diffusion이 전반적으로 어떻게 돌아가는 지를 살펴보자.
Diffusion은 다음의 2가지 프로세스로 나뉘어진다.
- Forward: 입력 이미지에 노이즈를 조금씩 섞어나가면서 최종적으로 gaussian noise가 되도록 만드는 과정.
- Forward에서는 학습할 파라메터가 존재하지 않는다 (학습 X).
- 사전에 정의된 noise scheduling에 따라서 각 time step에 맞는 노이즈를 삽입한다.
- 이전 time step의 이미지($x_{t-1})$가 주어졌을 때 현재 time step 이미지($x_t$)에 대한 분포는 $q(x_t|x_{t-1})=\mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I})$.
- 분포의 평균과 분산이 위와 같은 이유는 $x_t$의 분산을 계속 1로 유지시켜주기 위함 (안정적인 학습을 위함).
- 평균이 $ \sqrt{1-\beta_t} $, 분산이 $\beta_t$인 normal gaussian distribution이므로 $x_t=\sqrt{1-\beta_t}x_{t-1}+ \beta_t \epsilon, \;$ where $\epsilon=\mathcal{N}(0,1)$.
- 이전 time step 이미지($x_{t-1}$) 정보를 $\sqrt{1-\beta_t}$만큼 감소시키고 노이즈를 $\beta_t$만큼 더하는 것으로, time step을 거치면 거칠 수록 완전한 normal gaussian noise가 됨.
- Reverse: forward 과정에서 만들어진 gaussian noise로부터 점차 노이즈를 제거해나가면서 원래의 입력 이미지로 복원하는 과정.
- UNet 또는 Transformers를 통해 학습이 진행되는 구간.
- 실제로는 다음 step의 이미지 (살짝 denoising된 이미지)를 샘플링하는 분포를 예측하는 것이 아니라 forward 과정 중에 해당 time-step의 이미지에 더해졌을 노이즈를 예측하도록 모델을 학습.
- 학습 중 time-step T (gaussian noise)로부터 time-step 0까지 순차적인 진행을 하는 것이 아닌 time-step 0부터 T사이에 값들을 uniform random sampling 하고 이를 특정 iterations만큼 반복 진행함.
- time-step t는 sinusoidal positional encoding 또는 random fourier encoding을 통해 임베딩되고, 이후 fully-connected layers를 한번 더 통과해 모델에 입력된다.
2. 수학이 더해진 Diffusion
여기서는 diffusion이 수학적으로 어떻게 정의되고 왜 저런 학습 방법을 택하는지에 대한 수학적인 배경을 다룬다.
Forward Process
Diffusion에서는 forward process 즉, 입력 이미지 $x_0$가 주어졌을 때, time-step 0부터 T까지 조금씩 노이지를 더해나가는 과정을 다음과 같은 joint distribution으로 정의하였다.
$$q(x_{1:T}|x_0)=\prod_{i=1}^{T}q(x_t|x_{t-1})$$
먼저 Diffusion은 forward와 reverse 모두 "Marcov chain"이라는 성질을 가정으로 두고 있는데, 간단히 설명해서 현재 상태가 바로 직전의 상태로부터만 영향을 받는 성질을 의미한다. 따라서 다음과 같은 식이 성립한다.
$$q(x_t|x_{t-1})=q(x_t|x_{t-1}, x_{t-2}, \dots, x_0)$$
다시 돌아와서 위 식의 오른쪽 term을 살펴보면,
$$\prod_{i=1}^{T}q(x_t|x_{t-1})=q(x_1|x_0)q(x_2|x_1)\dots q(x_T|x_{T-1})$$
이고, 이는 위에서 설명한 Marcov chain에 의해서 다음과 같이 바뀔 수 있다.
$$=q(x_1|x_0)q(x_2|x_1,x_0)\dots q(x_T|x_{T-1}, x_{T-2}, \dots, x_0)$$
조건부 확률 공식을 통해 바꾸면,
$$=\frac{q(x_1,x_0)}{q(x_0)} \frac{q(x_2,x_1,x_0)}{q(x_1, x_0)} \dots \frac{q(x_T,x_{T-1}, x_{T-2}, \dots, x_0)}{q(x_{T-1}, x_{T-2}, \dots, x_0)}$$
공통되는 항들을 다 나눠주면 $\frac{q(x_0, x_1, \dots, x_T)}{q(x_0)}$만 남게 되고, 이는 $q(x_{1:T}|x_0)$을 조건부 확률 공식으로 변환시킨 것과 같다.
현재 time-step $t$에 대한 분포를 다음과 같이 정의하였다.
$$ q(x_t|x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t\mathbf{I})$$
해당 결과의 분포가 1이 되는 이유는 다음의 성질로부터 온다.
1. $\text{Var}(\alpha x)=\alpha^2 \text{Var}(x)$
2. $\text{Var}(x+y)=\text{Var}(x)+\text{Var}(y)$
위 분포는 normal gaussian 분포이므로 이를 풀어쓰면 $\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}$이고, 이에 대한 분포는$$\text{Var}\left( \sqrt{1 - \beta_t} \, x_{t-1} + \sqrt{\beta_t} \, \epsilon_{t-1} \right)
= \text{Var}\left( \sqrt{1 - \beta_t} \, x_{t-1} \right) + \text{Var}\left( \sqrt{\beta_t} \, \epsilon_{t-1} \right)
= (1 - \beta_t) \, \text{Var}(x_{t-1}) + \beta_t \, \text{Var}(\epsilon_{t-1})$$
여기서 $x_{t-1}$은 분산이 1을 가정하고 있고 noise $\epsilon$은 normal gaussian 이기 때문에 모두 분산이 1로써 사라지게 되고 결국 $(1-\beta_t)+\beta_t=1$이 되어 분산이 1이 되게 된다.
위에서 정리하고 있는 분포는 특정 time-step에서의 이미지 $x_t$를 이전 time-step에서의 이미지 $x_{t-1}$로부터 구하는, 마르코브 체인을 통한, 순차적인 1부터 T까자의 joint distribution이다. 이러한 마르코브 체인을 사용하지 않고 한 번에 구하는 수식도 논문에서 설명하고 있다.
$$\alpha_t=1-\beta_t, \; \bar{\alpha}=\prod_{1}^{t} \alpha_i$$
$$x_t=\sqrt{\bar{\alpha}}x_0+\sqrt{1-\bar{\alpha}}\epsilon, \; \epsilon \sim \mathcal{N}(0, \mathbf{I})$$
증명은 다음과 같다.
$$x_t=\sqrt{1-\beta_t} x_{t-1}+\sqrt{\beta_t} \epsilon_{t-1}$$
$$=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} \epsilon_{t-1}$$
$$= \sqrt{\alpha_t} \left( \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} \right) + \sqrt{1 - \alpha_t} \epsilon_{t-1}$$
$$= \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1}$$
$\text{Var}(x_t)=1$이므로 풀어보면,
$$\alpha_t \alpha_{t-1} + \alpha_t (1-\alpha_{t-1})+(1-\alpha_t) =1$$
$$\alpha_t(1-\alpha_{t-1})+(1-\alpha_t)=1-\alpha_t \alpha_{t-1}$$
이 되므로, 이를 다시 위 식에 대입하면
$$x_t= \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\epsilon}$$
이 나온다 (여기서 $\epsilon$은 모두 gaussian noise이기 때문에 하나의 상수로 근사한다).
이를 $x_0$까지 반복하면,
$$= \sqrt{\alpha_t \alpha_{t-1} \dots \alpha_1} x_{0} + \sqrt{1 - \alpha_t \alpha_{t-1} \dots \alpha_{1}} \bar{\epsilon}$$
$$x_t=\sqrt{\bar{\alpha}}x_0+\sqrt{1-\bar{\alpha}}\epsilon, \; \epsilon \sim \mathcal{N}(0, \mathbf{I})$$
Reverse Process
Foward process에서 얻어지는 gaussian noise $z_t$로부터 조금씩 noise를 제거해나가면서 원래의 이미지를 복원하는 과정이다.
Given noisy image $x_t$, $x_{t-1}$이 나올 확률 분포는 다음과 같이 정의된다.
$$p_\theta (x_{t-1}|x_t)=\mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma^2_t \textbf{I})$$
여기서 딥러닝 모델을 통해 구해지는 부분은 $\mu_\theta$에 해당된다.
위 식을 여러 번의 markov chain으로 연결하여 최종적으로 하고자 하는 것은 $x_0$에 대한 likelihood를 maximize하는 것이다. 이를 negative log likelihood로 나타내면,
$$\mathbb{E}_q \left[ -\log p_\theta(x_0) \right]$$
하지만 위 확률을 maximize하는 것은 매우 어렵기 때문에 이에 대한 ELBO(Evidence of Lower BOund)를 대신 구하여 사용한다. 편의를 위해 전개과정 중에 $\mathbb{E}$는 생략하겠다.
여기서 0부터 t까지 markov chain으로 연결한 확률 분포는,
$$-\log p_\theta(x_{0:T}) = -\log p(x_T) \prod_{t=1}^{T} p_\theta(x_{t-1} \mid x_t)$$
Bayes' rule에 의하여
$$-\log p_\theta(x_0)=-\log \frac{p_\theta(x_{0:T})}{p_\theta(x_{1:T}|x_0)}=-\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)} \frac{q(x_{1:T}|x_0)}{p_\theta(x_{1:T}|x_0)}$$
$$=-\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)} + -\log \frac{q(x_{1:T}|x_0)}{p_\theta(x_{1:T}|x_0)}$$
여기서 오른쪽 term이 q(x_{1:T}|x_0)와 p(x_{1:T}|x_0)의 KL-divergence이므로 항상 0보다 크기 때문에 왼쪽 term을 lower bound로써 사용할 수 있게 된다. 즉,
$$-\log p_\theta(x_{0:T}) \le -\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)}$$
Markov 성질에 의해,
$$-\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)} = - \log \frac{p_\theta(x_T) \prod_{t=1}^{T} p_\theta(x_{t-1} \mid x_t)}{\prod_{t=1}^{T} q(x_t \mid x_{t-1})} $$
$$= - \log p_\theta(x_T) - \sum^T_{t=1} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_t \mid x_{t-1})} $$
$$= - \log p_\theta(x_T) - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_t \mid x_{t-1})} -\log \frac{p_\theta(x_0|x_1)}{q(x_1|x_0)}$$
또 Markov 성질에 의해,
$$q(x_t|x_{t-1})=q(x_t|x_{t-1}, x_0)$$
Bayesian rule에 따라,
$$= \frac{q(x_t, x_{t-1}, x_0)}{q(x_{t-1}, x_0)}$$
$$= \frac{q(x_t, x_{t-1}, x_0)}{q(x_t, x_0)} \cdot \frac{q(x_t, x_0)}{q(x_{t-1}, x_0)}$$
$$= q(x_{t-1}|x_t, x_0) \cdot \frac{q(x_t, x_0)}{q(x_{t-1}, x_0)}$$
이를 대입하면,
$$ - \log p_\theta(x_T) - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_{t-1} \mid x_t, x_0)} \cdot \frac{q(x_{t-1} \mid x_0)}{q(x_t \mid x_0)} -\log \frac{p_\theta(x_0|x_1)}{q(x_1|x_0)}$$
$$= - \log p_\theta(x_T) - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_{t-1} \mid x_t, x_0)} -\sum^T_{t=2} \log \frac{q(x_{t-1} \mid x_0)}{q(x_t \mid x_0)} -\log \frac{p_\theta(x_0|x_1)}{q(x_1|x_0)}$$
두 번째 summation 식을 전개하면 분모, 분자끼리 나뉘어져 사라지므로,
$$= - \log p_\theta(x_T) - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_{t-1} \mid x_t, x_0)} -\log \frac{q(x_1 \mid x_0)}{q(x_T \mid x_0)} -\log \frac{p_\theta(x_0|x_1)}{q(x_1|x_0)}$$
마지막으로 오른쪽 2개의 log term을 합치고, 분모 부분을 맨 앞 log term으로 가져오면,
$$= - \log p_\theta(x_T) - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_{t-1} \mid x_t, x_0)} -\log \frac{p_\theta(x_0|x_1)}{q(x_T \mid x_0)}$$
$$= - \log \frac{p_\theta(x_T)}{q(x_T \mid x_0)} - \sum^T_{t=2} \log \frac{p_\theta(x_{t-1} \mid x_t)}{q(x_{t-1} \mid x_t, x_0)} -\log p_\theta(x_0|x_1)$$
왼쪽 term은 $q(x_T \mid x_0)$와 $p(x_T)$ 간의 KL-divergence, 중간 term은 $t \in (1, T]$ 에서 $q(x_{t-1}|x_t, x_0)$와 $p_\theta(x_{t-1} \mid x_t)$ 간의 KL-divergence으로 표현할 수 있고, 따라서 최종적인 objective loss는 다음과 같다.
$$L=\mathbb{E}_q \left[ D_{KL}(q(x_T \mid x_0) \mid \mid p(x_T)) + \sum_{t \gt 1} D_{KL} (q(x_{t-1} \mid x_t, x_0) \mid \mid p_\theta(x_{t-1} \mid x_t)) - \log p_\theta(x_0 \mid x_1)) \right ]$$
위에서 산출된 Loss 식을 다음과 같이 세 개의 term으로 분리할 수 있는데,
Regularization Term
Input image $x_0$를 T번의 time-step에 걸쳐서 gaussian noise를 조금씩 삽입해줌으로써 완전한 노이즈 형태인 $x_T$로 만들었고, prior distribution $p(x_T)$를 gaussian noise로 가정했기 때문에 $q(x_t \mid x_0) \sim p(x_T)$이고 , 따라서 해당 term은 상수 취급하게 된다.
Reconstruction Term
Reverse process 중 가장 마지막 단계의 likelihood인데 수 많은 time-step 중 1개의 step에 해당되므로 무시하게 된다.
Denoising Term
결국 diffusion에서 optimize하고자 하는 term은 이 부분만 해당된다. Forward process의 각 time-step에 대한 분포와 reverse process의 각 time-step에 대한 분포 간의 KL-divergence이고, 따라서 두 분포 간의 차이를 줄이는 것이 diffusion의 목적이 된다.
Reference
https://www.youtube.com/watch?v=uFoGaIVHfoE&t=429s
https://kimjy99.github.io/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0/ddpm/
'논문리뷰 > Diffusion' 카테고리의 다른 글
[논문 리뷰] An Efficient Architecture For Large-scale Text-to-image Diffusion Models (0) | 2025.03.28 |
---|