728x90

 Diffusion model은 데이터를 만들어내는 deep generative model 중 하나로, data로부터 noise를 조금씩 더해가면서 data를 완전한 noise로 만드는 forward process(diffusion process)와 이와 반대로 noise로부터 조금씩 복원해가면서 data를 만들어내는 reverse process를 활용한다. Diffusion model은 현재 image 쪽에서는 가장 잘 작동하는 generative model 중 하나이기 때문에 기본으로 알아놓으면 아주 유용할 것 같다. 그러므로 이번 글에서는 diffusion model이 무엇인지에 대해 알아보겠다. 

Overview

 Diffusion model은 위에서도 언급한 것처럼, data에 noise를 조금씩 더해가거나 noise로부터 조금씩 복원해가는 과정을 통해 data를 generate하는 모델이다. 이를 한 눈에 표현하면 아래 그림과 같다. 아래 그림에서 $x_0$는 실제 데이터, $x_T$는 최종 noise, 그리고 그 사이의 $x_t$는 데이터에 noise가 더해진 상태의 latent variable을 의미한다.

Diffusion model

 우선, 위 그림의 오른쪽에서 왼쪽 방향으로 noise를 점점 더해가는 forward process $q$를 진행한다. 그리고 이 forward process를 반대로 추정하는 reverse process $p$를 학습함으로써 noise($x_T$)로부터 data($x_0$)를 복원하는 과정을 학습한다. 그리고 이 reverse process를 활용해서 random noise로부터 우리가 원하는 image, text, graph 등을 generate할 수 있는 모델을 만들어내는 것이다. 그리고 이를 통해 결국, 우리는 실제 data의 분포인 $p(x_0)$를 찾아내는 것을 목적으로 한다. 그럼 이를 좀 더 자세히 살펴보겠다.

Reverse process

 Reverse process $p$는 noise($x_T$)로부터 data($x_0$)를 복원하는 과정이다. 이는 최종적으로 random noise로부터 data를 generate하는 generative model로 사용되기 때문에 diffusion model을 사용하기 위해서는 모델링하는 것이 필수적이지만, 이를 실제로 알아내는 것은 쉽지 않다. 그러므로 우리는 $p_\theta$를 활용해서 이를 approximate한다. 이 때, 이 approximation은 Gaussian transition을 활용한 Markov chain의 형태를 가진다. 이를 식으로 표현하면 다음과 같다.

reverse process의 수식 표현

 위 식에서, 각 단계의 정규 분포의 평균 $\mu_\theta$와 표준편차 $\Sigma_\theta$는 학습되어야 하는 parameter들이다. 그리고 위 식의 시작지점인 noise의 분포는 다음과 같이 가장 간단한 형태의 표준정규분포로 정의한다.

noise의 분포

Forward process

 Forward process $q$는 data($x_0$)으로부터 noise를 더해가면서 최종 noise ($x_T$)형태로 가는 과정이다. 우리가 이 과정의 분포를 알아내야 하는 이유는, reverse process의 학습을 forward process의 정보를 활용해서 하기 때문이다. Forward process는 reverse process와 비슷하지만 약간 다르게, data에 Gaussian noise를 조금씩 더하는 Markov chain의 형태를 가진다. 이를 식으로 표현하면 다음과 같다.

forward process의 수식 표현

 이제부터 약간의 수식 파티를 할 예정인데, 그냥 diffusion model이 이런거구나~ 하고 넘어가실 분들은 아래 내용은 읽지 않아도 좋지만 읽으면 더 좋다. 위와 같은 형태로 forward process를 표현할 때의 장점은 data가 주어졌을 때 임의의 timestep t 시점에서의 $x_t$를 자유롭게 sampling할 수 있다는 점이다. 어떤 data $x_0$가 주어졌을 때 $x_t$의 분포는 다음과 같다.

$x_0$가 주어졌을 때 $x_t$의 분포

위 식에서 $\alpha$는 다음과 같은 식을 따른다.

$\alpha$
$\bar{\alpha}$

 이의 증명은 다음과 같다. (증명은 생략해도 좋다.)

Training

diffusion model의 training loss
위 식의 두 번째 부등호의 증명. 마지막 식에서 분모와 분자를 바꾸고 -를 붙이면 위 식과 같다.
diffusion model의 최종적인 training loss
첨부파일
다운로드
</p|filename="" size="" data-ke-align="alignCenter"|_##]

  • $L_T$: p가 generate하는 noise $x_T$와 q가 $x_0$라는 데이터가 주어졌을 때 generate하는 noise $x_T$ 간의 분포 차이
  • $L_{t-1}$: p와 q의 reverse / forward process의 분포 차이. 이들을 최대한 비슷한 방향으로 학습한다.  
  • $L_0$: latent $x_1$으로부터 data $x_0$를 추정하는 likelihood. 이를 maximize하는 방향으로 학습한다.

diffusion model의 최종 training loss 증명

이에 대한 증명은 다음과 같다.

 결론적으로, 우리가 diffusion model을 학습할 때의 training loss는 정규 분포 사이의 KL divergence 형태로 쉽게 계산될 수 있는 것이다.

 이번 글에서 우리는 VAE, GAN에 이어 다른 generative model인 diffusion model이 무엇인지에 대한 간단한 설명부터 어떻게 diffusion model이 정의되고 학습되는지에 대해서 수식을 통해 알아보았다. 이러한 diffusion model에도 DDPM, D3PM, NCSN 등 다양한 변형 형태가 있는데, 이들에 대해서도 찬찬히 살펴보도록 하겠다.  행복 대학원 중이지만 살짝 바빠서 블로그 쓰기가 쉽지 않은데 학기말 되면 더 쉽지 않을 것이므로 10월 연휴 때 열심히 쓰겠다.. 라고 매번 다짐..

 

References

1. Ho, J., Jain, A., & Abbeel, P. (2020). Denoising diffusion probabilistic models. Advances in Neural Information Processing Systems, 33, 6840-6851.

2. https://lilianweng.github.io/posts/2021-07-11-diffusion-models/ -> 이 글은 정말 추천!

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기