Diffusion, DDPM 수식 정복하기

저번 논문리뷰로 Variational Autoencoder를 진행했었다.

https://woongchan789.tistory.com/11

 

[Paper review] VAE - Auto-Encoding Variational Bayes (2013, ICLR)

이번에 리뷰할 논문은 VAE (Variational Auto-Encoder)로 잘 알려져있는 'Auto-Encoding Variational Bayes'이다. 현재 multimodel deep generative model, diffusion 등 generative model에 대한 연구가 활발히 이루어지고 있어서 개

woongchan789.tistory.com

사실 VAE 논문리뷰는 diffusion을 공부하기위한 발판이었다..

 

무턱대고 diffusion을 알아가기에는

bayes rule, KL-divergence, ELBO 등 선행지식들이 많이 필요했었기에

VAE를 먼저 시작하였고 리뷰가 끝난 후에는

자신만만한 태도로 diffusion을 시작하였다.

 

하지만 진짜.. VAE 수식파티는 파티도 아니었다.

VAE가 수식파티면 diffusion은 수식올림픽이다.

그냥 전세계인들의 대축제.

 

가뜩이나 generative ai에 관심을 갖고

열심히 해야지 했는데

진짜 안 맞나 싶었다.

 

I don't want

하지만 난 눈물을 자주 흘리진 않지.

 

참고로 DDPM (Denoising Diffusion Probabilistic Models, NeurIPS, 2015)

논문 리뷰겸 글을 쓸려했지만 수식 전개가 대부분이라 차라리 논문 리뷰보다

수식 정복에 초점을 맞춰서 따로 정리해보기로 했다.

 

시작해보도록 하겠다..

 


Diffusion

Diffusion은 요즘 핫한 generative ai의 핵심이 되는 개념이다.

Diffusion은 2015년도에 ICML에서 발표된

'Deep Unsupervised Learning using Nonequilibrium Thermodynamics'

논문에서 처음 공개되었으며 diffusion의 시초라고 알려져있다.

 

Deep Unsupervised Learning using Nonequilibrium Thermodynamics (2015, ICML)

https://arxiv.org/abs/1503.03585

 

Deep Unsupervised Learning using Nonequilibrium Thermodynamics

A central problem in machine learning involves modeling complex data-sets using highly flexible families of probability distributions in which learning, sampling, inference, and evaluation are still analytically or computationally tractable. Here, we devel

arxiv.org

 

해당 논문의 저자들은 generative model의 고질적인 문제인

tractability와 flexibility 사이의 trade-off 문제를

해결하고자 하였다.

 

Tractability는 수치적으로 계산이 가능한 즉, 분석이 가능함을 의미하고

Flexibility는 임의의 데이터에 대해서 유연하게 fit하게 맞출 수 있음을 의미한다.

 

그래서 분석이 가능하도록 tractability에 더 집중하게 되면

복잡한 데이터셋에 대해서는 설명하기 어렵고

flexibility에 더 집중하게 되면 임의의 데이터에 대해서 유연하게 fit하고자 하다보니

샘플을 생성하고 학습 및 평가하는 과정에서 값 비싼 Monte Carlo process가 필요하게된다.

 

그래서 저자들이 선택한 방법은 gaussian distribution처럼

잘 알려진 분포에서 target data 분포로 점진적으로

변환하는 방식으로 generate model을 설계하였으며

 

보다 핵심적으로는 markov chain을 사용해 개념을 제시하였다.

 

이 diffusion의 개념을 발전시켜 loss term과

parameter estimation 과정을 더 학습이 잘 되도록

발전시킨 model이 바로 2020년 NeurIPS에서 공개된

'Denoising Diffusion Probabilistic Models'이다.

 

Denoising Diffusion Probabilistic Models' (2020, NeurIPS)

https://arxiv.org/abs/2006.11239 

 

Denoising Diffusion Probabilistic Models

We present high quality image synthesis results using diffusion probabilistic models, a class of latent variable models inspired by considerations from nonequilibrium thermodynamics. Our best results are obtained by training on a weighted variational bound

arxiv.org

 

Diffusion

Diffusion은 직역하면 '확산'이라는 뜻인데

잉크를 물에 퍼트리면 초기에는 non-uniform 했던 잉크의 분포가

점차 시간이 지남에 따라 uniform 해지는 현상에서 착안하여

diffusion이라는 이름이 탄생하였다.

 

여기서 diffusion process가 무엇인지는 모르겠지만

점차 시간 $t$ 에 따라 무엇인가 퍼지는 프로세스인 것을 의심해볼 수 있다.

 

Forward diffusion process and reverse denoising process

Diffusion은 크게 원본 사진($x_0$)로부터 noise를

조금씩 더해가는 forward diffusion process

gaussian noise($x_T$)로부터 원본($x_0$)으로

복원해나가는 reverse denoising process로 나뉘는데

 

여기서 중요한 가정 2개가 존재한다.

 

1. 현재 상태($x_t$)는 이전 상태($x_{t-1}$)에 의존한다는 markov chain 특성을 가진다.

2. 모든 시점 t에 대해 데이터의 분포는 모두 gaussian distribution이다.

 

즉, diffusion은 한 마디로 gaussian markov chain 이다.

나중에 diffusion의 loss function 수식 전개하는 과정을 보면

알 수 있지만 gaussian markov chain을 가정하고 있기 때문에

 

intractable 해보였던 연산들이 가능해져

비로소 학습이 가능해짐을 알 수 있다.

 

Diffusion process

DDPM에서 diffusion process를

나타낸 그림은 위와 같다.

 

forward diffusion process

오른쪽 원본 그림($x_0$)에서 출발하여 random gaussian noise($x_T$)로,

reverse denoising process

왼쪽 random gaussian noise($x_T$)에서 출발하여 원본 그림($x_0$)로

가는 것임을 다시 한 번 알 수 있는데 직관적으로 아래와 같은 궁금증이 생긴다.

 

How to reverse denoising process

원본 이미지($x_0$)가 주어졌을 때 gaussian noise를

조금씩 섞는 것은 쉽게 가능하다.

 

왜냐하면 gaussian distribution은 사전에 알려진 분포이기 때문에

기존의 이미지로부터 convolution 연산을 통해 noise를 쉽게 섞을 수 있는데

 

그 반대는 어떻게 할 수 있을까?

 

그니까 random gaussian noise 상태에서 강아지사진을 어떻게 만들어낸다는 걸까?

 

지금부터 만들어내는 방법.

즉, loss function을 어떻게 설계하게되면 이미지를 generate할 수 있는지 알아보기로 한다.

 


Background

 

먼저 diffusion, DDPM의 loss function에 대해

수식 전개를 하기 전 diffusion에서 정의하고 있는 것들에 대해 알아보기로 한다.

 

먼저 forward process를 다른 말로 diffusion process라고 정의하고

reverse denoising process를 inverse process라고 한다.

 

noise를 조금씩 순방향으로 섞는 diffusion process

사전에 gaussian markov chain을 가정했기 때문에

markov chain, bayes rule에 따라 다음과 같이 정의한다.

 

Diffusion process =  $q(x_t|x_{t-1})$

 

diffusion process는 q로 정의하여 위와 같이

현재 시점($x_t$)의 데이터 분포는 

이전 시점($x_{t-1}$)에만 의존한다고 정의한다.

 

반대로 random gaussian noise($x_t$) 상태에서 원본 이미지($x_0$)를

복구해나가는 inverse process에서는 p로 정의하여 아래와 같이 나타낼 수 있다.

 

Inverse process =  $p(x_{t-1}|x_t)$

 

inverse process에서는 우리가 궁극적으로

아무것도 모르는 random gaussian noise 상태에서 원하는 이미지를

generate하는 것이기 때문에 이 과정을 학습하는 것이 ddpm의 목적이고

 

우리는 사전에 gaussian markov chain으로 가정했기 때문에

결과적으로 gaussian markov chain의 모수인

$\mu_\theta$, $\sum_\theta$를 parameter로 두어 이를 학습하고자 한다.

 

그래서 inverse process는 $p(x_{t-1}|x_t)$에서 $p_\theta(x_{t-1}|x_t)$로 바뀐다.

 

Inverse process =  $p_\theta(x_{t-1}|x_t)$

 

그렇다면 diffusion process는 별도로 parameter를 둘 필요가 없을까?

noise를 부과할 때도 parameter로 두어 noise를 더하는 정도를 학습하지 않아도 되는 걸까?

 

DDPM에서는 별도의 parameter를 설정하지 않고

noise를 정해진 schedule($\beta_1, \beta_2, ... , \beta_T$)에 따라 더하는 것으로 설정했기에

inverse process와 다르게 parameter가 존재하지 않는다고 한다.

 

variance schedule of forward process

 

diffusion process는 $q(x_t|x_{t-1})$이고

inverse process는 $p_\theta(x_{t-1}|x_t)$임을 알고

이제 과연 어떻게 generate하는지 알아가보기로 한다.

 


Variational Auto-encoder VS Diffusion

 

앞선 VAE 포스팅에서 loss function인 ELBO를 증명을 해보았었다.

https://woongchan789.tistory.com/11

 

[Paper review] VAE - Auto-Encoding Variational Bayes (2013, ICLR)

이번에 리뷰할 논문은 VAE (Variational Auto-Encoder)로 잘 알려져있는 'Auto-Encoding Variational Bayes'이다. 현재 multimodel deep generative model, diffusion 등 generative model에 대한 연구가 활발히 이루어지고 있어서 개

woongchan789.tistory.com

 

Diffusion에서 loss function의 전개는

VAE의 loss function에서 시작하여 약간의 전환을 통해 시작하고 있다.

 

수식 전개는 아래 블로그에서 단계적으로 정말 친절하게 잘 설명해주셔서

많은 부분을 참고하였다. (감사합니다!)

https://developers-shack.tistory.com/8

 

[논문공부] Denoising Diffusion Probabilistic Models (DDPM) 설명

─ 들어가며 ─ 심심할때마다 아카이브에서 머신러닝 카테고리에서 그날 올라온 논문들이랑 paperswithcode를 봅니다. 아카이브 추세나 ICLR, ICML 등 주변 지인들 학회 쓰는거 보니까 이번 상반기에

developers-shack.tistory.com

 

VAE loss function

 

VAE loss term

다시 복습해보자면

우리는 원본 이미지 $x_0$가 등장할 확률을 maximize해야하고

 

위의 식에서는 negative log likelihood로 변환되어

$-\log p_\theta(x_0)$를 minimize해야하는 식으로 전개가 시작된다.

 

②번 식에서 bayes rule이 적용되고

④번 식에서 KL-divergence의 non-negative property가 적용되어 부등호로 변환된 후 

⑤번 식에서 분자의 오른쪽 항과 분모를 묶어 마지막으로 전개했는데

 

ㅎㅎ 너무 뜬금없지만 저렇게 하이라이트를 주니까

누가봐도 Diffusion에서는 분자의 왼쪽 항과 분모를 묶을 것 같긴한데

 

맞다.

 

Diffusion에서는 분자의 왼쪽 항과 분모를 묶음으로써 전개를 시작한다.

 

Diffusion loss function

 

Diffusion loss term

그래서 VAE와 Diffusion loss term을 두 개를 비교해보면 아래와 같다.

 

VAE VS Diffusion loss term

중요한 점은 빨간색으로 하이라이트한 부분이다.

 

사실 Diffusion loss term에서 왼쪽 $\log p_\theta(x_T)$ term은 

제쳐두고 오른쪽 term이 diffusion의 핵심이라고 많이 표현되는데

 

저 의미를 곱씹어 보면

결국 우리는 앞서 negative log likelihood의 문제로 변환하여

저 loss term을 minimize하는 문제로 바꿨기에

 

사실상 $q(x_T|x_0)$와 $p_\theta(x_0|x_T)$간의

KL-divergence를 최소화하는 문제이다.

 

diffusion의 핵심이 바로 $q(x_T|x_0)$와

$p_\theta(x_0|x_T)$간의 거리를 최소화하는 것이며

 

직관적으로 봤을 때 각각 condition도 다르고 다른 방향인데

어떻게 p가 q를 보고 배울 수 있는지,

저 빨간 박스를 포함한 loss function이 어떻게 계산이 되는지,

 

시작해보기로 한다.

 


Intractable Diffusion loss function 증명

 

위에서 Diffusion loss function을 전개할 때 integral을 포함한

expectation의 형태로 전개를 해보았는데

 

이번에는 markov chain property와

time step $t$는 discrete하기 때문에 $\sum$을 활용하여 전개해보고자한다.

 

looks intractable Diffusion loss function

굳이 위에서 구해본 Diffusion loss를 다시 한번

$\sum$ 합의 형태로 전개하면서 증명하는 이유는

 

위에서 구했던 loss는 우항이 사실상 저 형태로는 계산이 불가능하고

이제 밑에서 증명함과 동시에 계산할 수 있는 공식의 형태로

바꿔야 할 필요가 있기 때문이다.

 

즉, intractable한 Diffusion loss의 우항의 KL-divergence를

tractable할 수 있도록 markov chain property를 사용함과 동시에

 

time step $t$는 discrete하니까 $\sum$ 합의 형태로 나타내

tractable하도록 수식을 전개해보고자 한다.

 

전체 전개식을 정리한 것은 아래와 같은데..

할 수 있다.

 

Diffusion loss function proof

 


 

PART 1

 

part 1

① : bayes rule에 따라 $\log p_\theta(x_0)$를 재표현한 뒤 펼쳐서 1,2,3,...,T의 형식으로 표현

② :

을 곱해준다.

③ : KL-divergence는 non-negative이기에 intractable한 초록색 부분을 제거 및 부등호로 변경

④ : notation을 0,1,2,...,T에서 0:T로 묶어서 재표현

⑤ : markov chain property에 따라 $p_\theta(x_{0:T})$과 $q(x_{1:T}|x_0)$의 notation 변경

💡 $q(x_{1:T}|x_0) = \prod_{t=1}^{T}q(x_t|x_{t-1})$

출처: https://aigong.tistory.com/589

💡 $p_\theta(x_{0:T}) = p_\theta(x_T) \prod_{t=1}^{T}p_\theta(x_{t-1}|x_{t})$ 

출처: https://aigong.tistory.com/589
A reverse process that follows the Markov chain property

⑥ : t의 시작이 0이 아닌 1로 변환됨과 동시에 log의 성질에 따라 분리

 


 

PART 2

 

part 2

 

⑦ : t=1일 때의 summation을 따로 분리. (t=2 이후로의 summation) + (t=1 일 때의 term)으로 분리

⑧ : $q(x_t|x_{t-1})$을 재표현

intractable한 수식을 tractable하도록 $x_0$을 포함하여 재표현

 

Proof of equation 8

 

⑨ : 8번 수식에서 summation 안에 있는 것들을 log의 성질에 따라 분리

 


 

PART 3

 

part 3

 

⑩ : ⑨번식의 summation (⑨번식의 파란색 부분)을 전개하면

소거법으로 정리되어 $\log \frac {q(x_1|x_0)}{q(x_T|x_0)}$로 정리 가능

 

Proof of equation 10

 

⑪ : log의 성질로 두 개의 term을 합침

⑫ : 마지막 term의 분모를 첫 번째 term과 합침으로써 최종 loss function 정의

 


Diffusion loss function 의미

 

Diffusion loss function

 

최종적으로 전개된 Diffusion loss function은 위와 같다.

저걸 이제 minimize하면 되는 것인데..

 

총 3개의 term으로 구성된 Diffusion loss function를 보며

각각의 term에 대한 의미를 알아보기로 한다.

 

① $L_T$

DDPM에서는 diffusion process 과정에서 noise의 주입정도를 사전에 정해진 schedule에 따라 fixed하였기에 별도의 학습가능한 parameter를 설정해두지 않은 $q(x_T|x_0)$으로 정의하였다. 또한 DDPM에서는 diffusion process $q$는 $x_T$를 항상 gaussian distribution을 따르도록 하기 때문에 $q(x_T|x_0)$와 $p(x_T)$는 별반 다를게 없을 정도로 거의 유사하여 결과적으로, $L_T$는 항상 0에 가까운 상수가 나온다고 한다. 그래서 $L_T$는 학습과정에서 무시한다.

 

② $L_{t-1}$

요놈이 문제다.
결과를 먼저 말해보면 3개의 term 중 $L_T$, $L_0$ 모두 영향력이 적거나 무시되어
$L_{t-1}$ term만 minimize하는 것으로 목적함수가 변경되는데
이는 밑에서 차근차근 알아보기로 한다.

 

③ $L_0$

$L_0$은 전체적으로 보았을 때 무수히 많은 time step T (일반적으로, T = 1000) 중
단일 시점에서의 log likelihood 값이기에
값이 너무나 작아 무시한다고 한다.

 

결과적으로 우리는 $L_{t-1}$를 minimize하는 문제로 바뀌는데

DDPM에서는 이를 간소화하여 tractable하고

parameter estimation을 더 쉽게 제안한다.

 

(연산만 봤을 때는 하나도 안 쉽다.

정말 세상엔 대단하신 분들이 많다.)

 

본격적으로 시작하기에 앞서

DDPM에서는 어떻게 쉽게 $L_{t-1}$를 간소화하였는지

흐름만 알고 넘어가기로 한다.


앞서 noise를 주입할 때 정해진 schedule $\beta_t$에 따라 주입한다고 DDPM에서 정의하였다.

$\beta_t$를 이용하여 뭔가 $\alpha_t$를 정의하고 풀어나가는 것을 유추할 수 있다.


오.. 앞서 정의한 $\alpha_t$를 이용해서 $L_{t-1}$의 분모 항을

다소 복잡하지만.. 평균 $\tilde{\mu}_t$이 저런식으로 나오는 gaussian distribution으로

나타낼 수 있게 되면서..


결과적으로 저렇게 된다..

 

이게 진짜 MAGIC아닐까..?

p와 q로 나타내져있어 intractable해보였던 $L_{t-1}$ term이

최종적으로 다 대입함으로써 연산이 가능해져버린 수식으로 나와버렸다..

 

인생의 덧없음을 느끼며..

시작해보기로 한다..

 


DDPM에서 제안하는 loss function

 

지금부터 DDPM에서 제안하는 loss function을

정말 자세하게 파고들고자 한다.

 

수식 전개하는 과정에서 미리 알고 계시거나

굳이 증명하는 과정을 보고 싶지 않으시다면 과감하게 skip하셔도 될 것 같다.

 

아래에서 전개되는 많은 부분들을 아래 블로그에서 참고하였으니

꼭 들어가셔서 보시길 권장드린다. (정말 감사합니다.)

https://xoft.tistory.com/33

 

[개념 정리] Diffusion Model 과 DDPM 수식 유도 과정

이전글 에서 Diffusion Model과 DDPM(Denosing Diffusion Probabilistic Model)의 개념에 대해서 알아봤습니다. 이번 글에서는 수식 유도 과정을 다뤄보겠습니다. 이전글에서 Diffusion모델은 Noise를 주입을 위해 사

xoft.tistory.com

 

크게 절차는 아래와 같다.

 

1. KL-divergence when the two distributions are gaussian

2. $q(x_t|x_0)$ 계산

3. $q(x_{t-1}|x_t, x_0)$ 계산

4. $p_\theta(x_{t-1}|x_t)$ 계산

5. 최종 DDPM loss 계산

 

할 수 있다. ㄱㄱ

 


STEP 1

KL-divergence when the two distributions are gaussian

 

우선 두 개의 분포가 모두 gaussian 일 때,

$\mu$와 $\sigma$로 표현가능한 KL-divergence를 증명해보고자 하는데

 

이는 diffusion에서 diffusion process, reverse denoising process 모두

gaussian distribution을 가정하고 있기 때문에

훨씬 간단하게 전개가 가능해진다.

 

먼저, 가우스 적분이 사용되니 미리 알고 넘어가도록 하자.

 


 

0. background

 

Gaussian integral (1)
Gaussian integral (2)

자세한 증명과정은 여기에 자세하게 나와있다.

 

KL-divergence의 공식은 아래와 같으며

왼쪽 term $\int p(x)\log p(x)dx$과 오른쪽 term $\int p(x)\log q(x)dx$를

나눠서 각각 전개해보고자 한다.

 

KL-divergence

 

1. $\int p(x)\log p(x)dx$

 

먼저 왼쪽 term $ \int p(x) \log p(x)dx$를 계산해보도록 한다.

기본적인 가우스 함수는 아래와 같다.

 

Gaussian function

Gaussian function을 p(x)에 넣고 최종적으로 유도한 식은 아래와 같다.

 

Integral p(x)logp(x) 증명

 

마지막 최종 KL-divergence에서 $\sigma$가 $\sigma_1$가 된 이유는

이제 2번째로 $\int p(x)\log q(x)dx$를 전개하는 과정에서

구분하고자 아래첨자를 마지막에 넣었으며

 

gaussian distribution 표현식으로 p와 q는

아래와 같음을 알고 다음으로 넘어가기로 한다.

 

 

 

2. $\int p(x)\log q(x)dx$

 

이번엔 $\int p(x)\log q(x)dx$를 전개해보고자 한다.

 

위에서 p(x)에 gaussian function을 직접 대입하고 전개해나간 것과 동일하게

q(x)에 $\mu_2, \sigma_2$가 포함된 gaussian function으로 대입을 진행한다.

 

Integral p(x)logq(x) 증명

 

3. 최종 $D_{KL}(p||q)$ when p, q are gaussian distribution

 

위에서 구한 $\int p(x)\log p(x)dx$와 $\int p(x)\log q(x)dx$를

직접 대입하여 정리하면 아래와 같이 정리할 수 있다.

 

최종 KL-divergence when p, q are gaussian distribution

 


 

우리는 앞서 $L_{t-1}$ term 만

minimize하면 되는 것으로 목적함수를 변경했었다.

 

L_{t-1} term

 

$L_{t-1}$ term은 q와 p의 KL-divergence를 의미하고,

 

우리는 위에서 q와 p가 gaussian distribution일 때

$\mu, \sigma$로 KL-divergence를 나타내는 방법을 알아보았기에

$L_{t-1}$를 다시 나타내보고자 한다.

 

이 때, $\sigma$는 학습 parameter가 없기 때문에 상수 처리를 해버리면

$\mu_1, \mu_2$를 포함한 항만 남아지게 된다.

 

KL-divergence when p, q are gaussian distribution

 

그래서, 학습 parameter가 없는 것들은 다 상수 처리를 하게되면

KL-divergence는 다음과 같이 표현이 가능해진다.

 

KL-divergence when sigma has no learning parameters

 

위의 식을 $L_{t-1}$ term에

대입해서 생각해보면

L_{t-1} term

(위에선 $KL(p, q)$인데 $L_{t-1}$에서는 $KL(q, p)$이니 조심하자!)

 

결국엔 $q(x_{t-1}|x_t, x_0)$ 평균($\mu_1$)과

$p_\theta(x_{t-1}|x_t)$의 평균($\mu_2$)을

최소화하는 문제로 간단해지는 것을 알 수 있다.

 

그래서, $\mu_1$과 $\mu_2$를 정리해서 재표현하면

 

L_{t-1} term

 

논문에서 표현한 아래와 같이 정리해볼 수 있다.

 

L_{t-1} term

 

어우..

정리해보자!

 

즉, 우리는

$L_{t-1}$를 minimize하는 일이

 

KL-divergence는 p와 q가 gaussian distribution을 따르기에

$\mu, \sigma$가 포함된 식으로 다시 나타낼 수 있으며

 

$\sigma$가 학습 parameter가 없기 때문에

상수로 처리 해버리게 되면

 

위와 같이 $q(x_{t-1}|x_t, x_0)$ 평균($\mu$)과 $p_\theta(x_{t-1}|x_t)$의 평균($\mu$)에 대해

위 식이 최소화될 수 있도록 $p_\theta$ network를 학습시키는 것으로 변경이 된다.

 

그렇다면 다음 step....?

뻔하지.

 

$q(x_{t-1}|x_t, x_0)$의 평균($\tilde {\mu}_t$)과

$p_\theta(x_{t-1}|x_t)$의 평균($\mu_\theta$)을 계산하면 된다.

 

그러기 위해선 $q(x_t|x_0)$를

알아야 전개가 가능하기에

$q(x_t|x_0)$를 먼저 구해보기로 한다.

 


STEP 2

$q(x_t|x_0)$ 계산

 

 

먼저, $q(x_t|x_{t-1})$는 논문에서 아래와 같이 정의하고 있다.

여기서 $\beta_t$는 t에 따라 점차적으로 증가하는 작은 상수 값이며

 

이전 시점 $x_{t-1}$에서 $\sqrt {1-\beta_t}$만큼 가져오고,

$\beta_t$만큼 noise를 섞어 $x_t$를 만드는 구조이다.

 

또한, 논문에서는 다음과 같이 $1-\beta_t$를 $\alpha_t$로 정의하고

$\bar a_t$를 t시점까지의 $\alpha_t$의 product로 정의하고 있다.

 

a_t , bar a_t notation

우리는 확률변수 X가 gaussian distribution을 따른다고 알려져 있을 때,

X를 $\mu$와 $\sigma$를 사용해서 다시 나타낼 수 있는데

이를 reparameterization trick이라 하며 아래와 같이 재표현할 수 있다.

 

Reparameterization trick

 

따라서, $x_t$를 reparameterization trick을 사용하여 다시 나타내보면

$q(x_t|x_{t-1})$는 평균($\mu$)이 $\sqrt {1-\beta_t}x_{t-1} = \sqrt {\alpha_t}x_{t-1}$이고

표준편차($\sigma$)가 $\sqrt{\beta_t} = \sqrt{1-\alpha_t}$이기에

아래와 같이 나타낼 수 있다.

 

x_t using reparameterization trick

 

여기서 $x_{t-1}$에 다시 위의 일반식에 t-1을 대입한 $x_{t-1}$을

넣어서 쭉쭉쭉 t=0 까지 진행하다보면

$x_0$으로 $x_t$를 나타낼 수 있게 된다.

 

x_t를 x_0가 포함된 식으로 전개

 

여기서 중간에 $\epsilon_{t-2}$와 $\epsilon_{t-1}$이 $\bar \epsilon_{t-2}$로 합쳐지는데

 

이는 $N(0, \sigma_1^2 I)$와 $N(0, \sigma_2^2 I)$ 두 개의 gaussian이 존재할 때

이를 $N(0, (\sigma_1^2 + \sigma_2^2)I$로 merge함에 따라 생겨나게 된다.

 

merging two the gaussians

 

즉, $q(x_t|x_{t-1})$라는 식에서

$x_t = \sqrt {\bar \alpha_t}x_0 + \sqrt {1 - \bar \alpha_t}\epsilon$ 이라는

$q(x_t|x_0)$을 도출해내었으며

 

$q(x_t|x_0)$는 평균($\mu$)이 $\sqrt {\bar \alpha_t}x_0$이고

표준편차($\sigma$)가 $\sqrt {1 - \bar \alpha_t}$인 gaussian distribution임을 알 수 있다.

 

 

 


STEP 3

$q(x_{t-1}|x_t, x_0)$ 계산

 

 

3-0. remind

 

L_{t-1} term

 

우리는 $q(x_{t-1}|x_t, x_0)$을 계산하고자 필요한 $q(x_t|x_0)$을

STEP2에서 알아보았으니 STEP2에서 나온 결과인 $q(x_t|x_0)$를 이용하여

$L_{t-1}$ term의 분자항인 $q(x_{t-1}|x_t, x_0)$를 계산해보고자 한다.

 

 

 

3-1. $q(x_{t-1}|x_t, x_0)$ 전개

 

 

① : bayes rule에 따라 변환

② :

Gaussian function

 

먼저 q는 gaussian distribution이므로

3개의 gaussian distribution의 곱셈으로 이루어진

$q(x_{t-1}|x_t, x_0)$ 형태를 지수 함수의 꼴로 표현할 수 있다.

 

여기서, 앞에 곱해져있는 $\frac {1}{\sqrt {2\pi\sigma^2}}$는

생략하고자 propto($\propto$)로 표현하였다.

 

3개의 gaussian distribution 각각의 평균($\mu$)과 분산($\sigma^2$)는 아래와 같다.

 


 

1. $q(x_t|x_{t-1}, x_0)$

 

$q(x_t|x_{t-1}, x_0)$는 markov chain property에 따라

이전 시점에만 의존하기에 사실상 $q(x_t|x_{t-1})$와 동일하다. 

따라서, $q(x_t|x_{t-1})$의 평균 $\sqrt {\alpha_t}x_{t-1}$ 그리고 분산 $\beta_t$이

$q(x_t|x_{t-1}, x_0)$의 평균과 분산이 된다.

 

2. $q(x_{t-1}|x_0)$

 

STEP2에서 구했던 $q(x_t|x_0)$이 여기서 사용된다.

시점 t에 t-1만 대입하면 되므로

평균은 $\sqrt {\bar \alpha_{t-1}}x_0$, 분산은 $1 - \bar \alpha_{t-1}$가 된다.

 

3. $q(x_{t}|x_0)$

 

STEP2의 결과를 통해 우리는 미리 구했으므로

평균은 $\sqrt {\bar \alpha_t}x_0$, 분산은 $1 - \bar \alpha_t$가 된다.

 


 

③ : 전개

④ : $x_{t-1}$의 2차항과 1차항만 정리하고 나머지는 상수로 처리한다.

 

 

결국엔 2차항과 1차항에 곱해진 부분만 정리하는 것만으로

$\sigma$, $\mu$를 알 수 있기 때문이다.

 

그러면 이제 마지막으로 위에서 정리한 것을 토대로

$q(x_{t-1}|x_t, x_0)$의 평균과 분산을 알아보기로 한다.

 

3-2. $q(x_{t-1}|x_t, x_0)$ $\sigma^2$ 계산

 

 

3-3. $q(x_{t-1}|x_t, x_0)$ $\mu$ 계산

 

 

3-4. 최종 $q(x_{t-1}|x_t, x_0)$

 

분자항($q(x_{t-1}|x_t, x_0)$)의 평균과 표준편차를

정리해보면 논문에서 제시한 $\mu$와 $\sigma$를 도출해내었음을 알 수 있다.

 

 

3-5. $q(x_{t-1}|x_t, x_0)$의 평균($\tilde {\mu}_t$) 중 $x_0$를 $x_t$에 대해 정리

 

3-4를 통해 드디어 $q(x_{t-1}|x_t, x_0)$의

평균과 표준편차를 다 구했기에 이제 끝내고 싶다.

 

But, 아직 끝나지 않았지.

However, 난 끝내고 싶어.

Nevertheless, 뭔가 더 남은 것 같은 기분은 뭘까?

 

 

그렇다.

아까 $x_t$를 $x_0$로 정리한 식을 이번에 $x_0$를 $x_t$로 정리한 후 대입하여

$\tilde {\mu}_t$를 $x_t$에 대해 정리하여야만 최종 loss term을 도출해낼 수 있다.

 

 

 

 

그래서 다시 정리해보면 아래와 같이 정리될 수 있다.

 

 

 


STEP 4

$p_\theta(x_{t-1}|x_t)$ 계산

 

L_{t-1} term

 

우리는 STEP3를 통해 $q(x_{t-1}|x_t, x_0)$의 평균, 표준편차를 최종적으로 정리하였으니

이제 분모항 $p_\theta(x_{t-1}|x_t)$을 해볼 차례이다.

 

우리의 목적은 $L_{t-1}$ term을 minimize하고자 하는 것이기 때문에

사실 p의 분포를 q의 분포에 approximate하는 것과 동일해진다.

 

따라서, p의 분포는 q의 분포와 동일하게 가져가면 되나

학습을 시키기 위해 t에 따라 값이 변화하여 최적에 수렴할 수 있도록

$\theta$라는 weight parameter로 바꿔야 한다.

 

이 때, 우리가 STEP3를 통해 

$q(x_{t-1}|x_t, x_0)$의 평균, 표준편차는 아래와 같음을 증명했다.

 

 

 

여기서, $x_t$는 입력값이고 $\alpha_t$도 고정된 값이기 때문에

시간 t에 따라 바뀔 수 있도록 변화를 걸 수 있는 부분은

gaussian distribution을 따르는 $\epsilon$밖에 남지 않는다.

 

따라서, $p_\theta(x_{t-1}|x_t)$의 평균 $\mu_\theta (x_t, t)$는

$\tilde {\mu} _t$에서 $\epsilon$ 부분만 $\theta$라는 weight parameter로 바뀐

아래와 같은 식으로 평균이 정의된다. 

 

 

$\beta_t = 1 - \alpha-t$이니 $\epsilon$이 $\epsilon_\theta$가 된 것말고는

$\tilde {\mu}_t$와 전체적으로 동일한 것을 알 수 있다.

 

 


STEP 5

최종 DDPM Loss 계산

 

길고 길었다.

'최최종_DDPM_LOSS_계산'을 할 차례이다.

 

우선, STEP4까지 알아내었던 

$q(x_{t-1}|x_t, x_0)$의 평균 $\tilde {\mu} _t (x_t, 0)$,

$p_\theta(x_{t-1}|x_t)$의 평균 $\mu_\theta (x_t, t)$을 정리해보면 아래와 같다.

 

 

그리고 이전에 $L_{t-1}$ term을 아래와 같이 정의했었다.

 

L_{t-1} term

 

대입해서 전개해보기로 한다.

 

 

최종적으로 논문에서 제안하는 DDPM의 loss function을

드디어 아래와 같이 도출해내었다.

 

DDPM loss function

 

참고로, 실제 학습할 때는 앞에 곱해져있는 weight term을 제외하고

뒤에 부분만 사용하여 loss를 계산한다고 한다.

 

 


 

길고 길었다.

진짜 diffusion은 신이다...

 

수식 전개를 차근차근 끝까지 완수해낸 것은 처음이라

수식 표현이 잘못된 부분이 많을 것 같다..

만약 잘못된 부분이 있다면 알려주시면 감사하겠습니다.

 

다음엔 뭘 리뷰하지..

일단 너무 후련하니까 내일 생각해보기로 한다..

댓글

Designed by JB FACTORY