본문 바로가기
논문 정리

Diffusion Models Beat GANs on Image Synthesis (NeurIPS 2021)

by winston1214 2023. 5. 17.
반응형

https://arxiv.org/abs/2105.05233

 

Diffusion Models Beat GANs on Image Synthesis

We show that diffusion models can achieve image sample quality superior to the current state-of-the-art generative models. We achieve this on unconditional image synthesis by finding a better architecture through a series of ablations. For conditional imag

arxiv.org

참고 영상 : https://www.youtube.com/watch?v=gN1FQhQsUTE 

512x512 ImageNet

 

### GAN vs Diffusion

 image generation task에서 사용하는 metric인 FID,IS, Precision은 image diversity 를 제대로 반영하지 못한다는 단점이 있음. 

GAN은 likelihood based model에 비해 diversity 가 떨어지는 치명적인 단점이 존재한다. 이에 따라 GAN의 전형적인 단점으로 손꼽히는 mode collapse 문제가 발생하기 쉽다.

반면에 diffusion model은 likelihood based model 중 하나로 signal 로 부터 noise를 점진적으로 제거하는 방식으로 새로운 sample을 생성하는 방식을 취한다. 해당 논문 전엔 CIFAR 10 에서는 SOTA를 달성했으나 LSUN이나 ImageNet에선 GAN에게 밀리는 성능을 보여왔다. 

따라서 본 논문의 저자들은 GAN은 fidelity를 위해 diversity를 희생한 것이라고 생각하였다. 그래서 이를 극복하기 위해 diversity를 일부 희생하며 fidelity를 높일 수 있는 scheme를 개발하였다.

여기서 fidelity는 precision과 비슷한 개념으로 generative image 들이 얼마나 real image distribution에 속하는를 판단하는 것이다. 반대로 recall 과 비슷한 개념인 diversity는 generative image들의 분포가 얼마나 넓게 퍼져 있는지를 측정하는 것이다.

 

### DDPM

DDPM training process

DDPM은 init image x0에서 T step 만큼 반복하여  noise를 생성하는 forward 방식과 이를 반대로 noise를 제거하는 backward 방식으로 image 를 reconstruction 한다. 그 후, inference 단계에선 diffusion에선 이를 sampling 이라 하는데 이는 임의의 noise를 입력으로 주고 backward로만 하여 새로운 이미지를 생성해나가는 것이다.

간단한 수식을 보면, forward 에서 이미지의 noise를 추가하는 것은 다음과 같다.

xt=1βtxt1+βtϵ    ϵN(0,I)

xt1에서 xt로 noise를 입힐 때, 정규분포를 따르는 noise를 추가하는 과정이다. 여기서 β 의 계산은 normalization 하는 과정이라고 생각하면 된다. 

따라서 이를 수식적으로 다시 정리하자면 다음과 같은 guassian distribution을 따르게 정리한다.

q(xt|xt1):=N(xt;1βtxt1,βtI)

하지만 이는 너무 많은 반복을 하게 되므로 computation time 이 길게 소요된다. 따라서, init image x0 에서 t 시점의 이미지 xt 로 바로 forward 하는 수식이 제안되었다. αt:=1βt 라고 정의하고, α¯t:=Πs=0tαs 라고 할 때

q(xt|x0)=N(xt;α¯tx0,(1α¯t)I)=α¯tx0+ϵ1α¯t,  ϵN(0,I)

로 표현이 된다. 따라서 skip time step 이 가능해진다. 

다음으로 reverse 과정을 수식적으로 표현해보자.

backward 과정은 forward 와 반대로 xt 라는 시점의 이미지가 존재할 때, xt1 의 이미지를 구하는 것으로 xt 가 조건으로 들어간다. 하지만 이 때, init image 에 대한 guide 가 있어야지 backward 가 효과적으로 되므로, backward distribution은 q(xt1|xt,x0)가 된다. gaussian distribution의 mean 에 대한 분포를 μ~t(xt,x0) 과 variance βt~ 라고 할 때, 

μ~t(xt,x0):=αt1¯βt1α¯tx0+αt(1α¯t1)1α¯txt

β~t:=1α¯t11α¯tβt

q(xt1|xt,x0)=N(xt1;μ~(xt,x0),β~tI)

로 정의된다.

따라서 이러한 reverse 과정을 neural network 에 학습을 시켜서 풀고자 하는 것인데, q(xt1|xt,x0)pθ(xt1|xt)에 대한 수식으로 정의하여서 mean 과 covariance matrix (\Sigma\)를 예측하고자 하는 것이다.

pθ(xt1|xt):=Nxt1;μθ(xt,t),Σθ(xt,t))

따라서 해당 분포의 \(  \mu_{\theta}(x_t , t) \) 와 Σθ(xt,t)를 학습을 하고자 하는 것이 DDPM 의 training 과정이다.

따라서 이를 학습시키기 위한 loss term 은 다음과 같다. model의 distribution p(x0)는 true data distribution q(x0)을 배우는 것이다. 그래서 pθ(x0) 를 위한 variational lower bound 는 다음과 같은 식을 따라 

전체 loss : Lvlb:=L0+L1++LT1+LT

init loss : L0:=logpθ(x0|x1)

t-1 loss : Lt1:=DKL(q(xt1|xt,x0)||pθ(xt1|xt))

T loss : LT:=DKL(q(xT|x0)||p(xT))

이러한 loss 를 따른다. 그러나 실제로는 이를 simplify 한 loss 를 사용한다. 그리고 Lvlb 보다 simplifiy 한 loss 를 사용한 것이 더욱 성능이 좋았다는 것을 실험으로 증명했다. 따라서 DDPM 에서 사용하는 loss는

Lsimple:=Et[1,T],x0q(x0),ϵN(0,I)[||ϵϵθ(xt,t)||2]

이다.

그래서 결국 ϵθ를 학습하는 과정이고, 이러한  ϵθ 를 이용하여 sampling 할 때, μ를 추정할 수 있는데, 이는 다음과 같은 공식을 따른다.

μθ(xt,t)=1αt(xt1αt1αt¯ϵθ(xt,t))

ϵ 을 통해서 μ를 구했고, 마지막으로 covariance를 구해야한다. 하지만, μ 값을 통해 convariance를 구할 순 없다. 따라서 DDPM 에서는 앞서 정의한 constant βt를 통해 convariance를 constant 로 설정하였다.

그리고 이를 학습하는 neural network 는 U-Net 구조를 따른다.

 

### Improved DDPM

Improved DDPM 은 DDPM 에서 2가지를 고치면서 성능을 높인 방법이다. 

먼저, DDPM 에서의 covariance값을 constant 로 사용하였는데, 이를 개선하여 covariance도 학습을 시키는 방법을 제안하였다.

Σθ(xt,t)=exp(vlogβt+(1v)logβ~t)

여기서 v 는 model의 output 값이다.

그리고 기존 DDPM 에서 loss term 을 수정하였는데, 이는 다음과 같다.

Lsimple+λLvlb

Lvlb 대신 Lsimple을 사용한 DDPM 과 달리 Improved DDPM 은 두 loss 를 모두 사용하여서 이를 통해, sampling  step 을 적게 가져가면서 학습을 시킬 수 있었다.

 

### DDIM

참고

https://happy-jihye.github.io/diffusion/diffusion-2/

 

[Paper Review] DDIM: Denoising Diffusion Implicit Models 논문 리뷰

jihye’s study blog

happy-jihye.github.io

 

DDIM 에서는 DDPM과 동일하게 marginal distribution을 구성하지만 inference 과정에서 사용되는 joint distribution 과정을 다르게 distribution을 구성하였다.

DDPM은 xt가 바로 이전 step 값 xt1에 의해 결정되는 markov chain 이지만, DDIM은 xt가 바로 이전 step 값 xt1 과 x_{0} 에 의해 결정되는 non-markovian chain 이다. 

최근엔 DDPM 으로 학습을 하고, DDIM 으로 sampling 하는 과정을 주로 사용하기 때문에 sampling 과정만 보겠다.

왜냐하면 DDIM은 sampling 속도가 빠르기 때문이다. 

빠른 이유에 대해서 보면, non-markovian chain 으로 임의의 step에 대해서만 모델을 학습했기 때문에, generative process 에서도 일부만 sampling 할 수 있어서 sampling 을 빠르게 할 수 있다. 그러나 이러한 방식으로 인해, training process 에서는 더 많은 step 에 대해 필요하다. 따라서 주로 DDPM으로 학습시키고 DDIM 으로 sampling 하는 과정을 쓰는 것이다. 

 

### To make diffusion models beat GAN

Classifier Guidance 를 이용

diffusion model에 classifier p(y|xt) 를 같이 학습을 시키면 더욱 좋은 conditional image synthesis를 할 수 있다는 것이다. 여기서 classifier 는 t 시점의 image 를 주었을 때, 해당 이미지에 대한 class 가 무엇인지 맞추게하는 것이다. 

그러면 이걸 어떻게 condition을 줄까? 바로 calssifier 의 gradient 를 전달해주는 것이다. 

conditional reverse process 는 다음과 같다.

q(xt|xt+1,y)pθ(xt|xt+1)pϕ(y|xt)

여기서 pθ 는 Nerual Network of reverse process 를 의미하고 pϕ는 classifier on image 를 의미한다. 여기서 y는 label 을 의미한다.

그러면 이 식을 계산의 용이성을 위해 log를 취하여 풀어쓰면

log(pθ(xt|xt+1)pϕ(y|xt))logp(z)+C4N(μ+Σg,Σ)

처럼 된다. 여기서 C 는 constant 이고, g는 gradient of classifier를 의미한다. 이런 식으로 classifier의 gradient 를 전달해주는 방식으로 conditional reverse process 가 진행된다. 즉, gradient의 covariance 만큼 mean 을 이동시켜서 condition 을 주게 하는 것이다. 

classifier sampling guide algorithm box

Algorithm 1 은 DDPM method 를 사용하였을 때, classifier guide 를 주는 알고리즘 박스이고, Algorithm 2 는 DDIM 을 사용하였을 때 classifier guide 를 주는 알고리즘 박스이다.

Algorithm 1 에선 μθ(xt)Σθ(xt) 에서 μΣ 를 각각 뽑는 과정을 거친다. 그 다음에 conditional 상태이기 때문에 uncoditional 인 상태에선 μΣ 에서 뽑는 거였더라면 condition 에선 sΣΔxtlogpϕ(y|xt) 만큼 mean shift 한 상태로 sampling 한다. Σ 부분은 앞서 말한 g 를 풀어쓴 것과 같다. 그리고 s 는 mean shift 에 대한 scale constant 인데, 이는 hyper parameter로 1로 주었을 땐, 좋은 결과가 나오진 않았지만 10으로 크게 줬을 때 좋은 생성 결과가 나왔음을 ablation study 로 증명하였다.

그리고 Algorithm 2 에서도 마찬가지로 normalization 한 상태로 class condition을 주어서 sampling을 한다.

 

반응형