Paper Info
- Accepted on NeurIPS 2020
- Authors: Jonathan Ho, Ajay Jain, Pieter Abbeel
- Affiliation: UC Berkeley
- arXiv link: https://arxiv.org/abs/2006.11239
- Task: image generation
- TLDR: diffusion probabilistic model로 high quality image 생성 가능
1. Background
Generative adversarial networks (GANs), autoregressive models, flows, variational autoencoders (VAEs) 등을 통해 image, audio를 잘 생성할 수 있으며, 각 분야는 연구가 계속되고 있었음
그에 반해 diffusion probabilistic model (= diffusion model)은 정의하기도 쉽고 학습하기도 쉬운데, 해당 분야에 대한 연구가 이뤄지지 않고 있음
즉, diffusion model이 high quality samples를 생성할 수 있는 지?에 대한 물음에 대한 답이 논문의 motivation임
+ 참고
Diffusion을 알기 위해 ICML 2015에 accept된 Deep Unsupervised Learning using Nonequilibrium Thermodynamics 논문을 직접 읽기보다는, 저자가 설명한 영상 앞부분만 봐도 대충 감 잡는데는 도움이 됨
핵심은 forward process에 대한 reverse process를 Gaussian으로 모델링할 수 있다는 것
2. Method
2.1. Training
- Model input : perturbed image x, timestep t
- Model output : image x를 perturb하는데 사용된 noise에 대한 prediction (noise를 predict)
- Objective : image x를 perturb한 noise와 predicted noise 간의 L2 loss
전반적으로 original diffusion model과 꽤 차이가 있다보니, 2가지 의문점이 드는 것이 자연스러움
- Objective가 왜 저렇게 되는지?
- Model input을 어떻게 넣어주는지?
2.1.1. Objective
Likelihood를 위와 같이 수식적으로 잘 만져서, 최종적으로 Equation 5를 maximize하면 likelihood가 maximize된다고 보면 됨
(Equation 5가 결국 objective가 됨)
Loss는 총 3가지 항이 있음 → prior matching, denoising, reconstruction
1. Prior matching
Forward process의 variance를 constant로 fix하여 prior matching term을 날릴 수 있음
2. Denoising
Denoising term의 본질은 multivariate Gaussian distribution간의 KL divergence이기에, Equation 8로 표현할 수 있음
Equation 8을 수식적으로 잘 만져주면, Equation 12 식이 나오게 됨
Equation 12 앞에 있는 곱해주는 term을 1로 두어, simplified loss인 Equation 14로 학습
(이는 구현의 편의성+ sample quality에 더 좋았기에 사용했다고 함)
참고로 곱해주는 term을 1로 두게 되면 timestep t가 작을수록 loss를 down-weight하는 의미를 가지게 됨
즉, simplified loss로 학습함으로써 모델은 more difficult denoising task인 larger timestep t에 focus하게 됨
3. Reconstruction
실제 input image는 pixel space인 [0, 255]로 discrete함
Discrete log-likelihood를 계산하기 위해, Gaussian discrete decoder를 사용
식이 되게 복잡해보이는데, case로 쪼개서 보면 별거 아님 ㅇㅇ
논문에도 나와있듯이, Gaussian discrete decoder 말고 다른걸 사용해도 됨
2.1.2. Model Input
전반적인 모델 구조로는 Wide ResNet backbone의 U-Net을 조금 변형해서 사용
(group normalization, self-attention, drop-out 등의 변형이 있지만 자세하기 짚지 않고 넘어감)
사실상 image를 input으로 넣는 것은 익숙하다보니 넘어가는데, timestep t를 어떻게 넣어줘야하는 지가 관건
결론만 말하자면, Transformer sinusoidal position embedding + MLP를 거쳐서 Conv block 안에 잘 넣어줌
2.2. Inference
N(0, I)에서 x_T sample해서 timestep을 줄여가면서 image generation하면 됨
여기서 의문이 들 수 있는 포인트라고 하면 x_{t-1}을 왜 저렇게 구하는지? 정도일 듯함
x_t에 noise를 뺀 다음 보정하는 식은 Equation 11을 참고하면 이해할 수 있음
sigma를 어떻게 선택하는지는 forward process에서 사용했던 variance를 사용하거나 Equation 7에서의 값을 사용하면 됨
(논문에서는 어떤 sigma를 선택하든 비슷한 결과를 냈다고 함)
4. Conclusions
The author's conclusions
장점 2가지
1. diffusion model로 high-quality image를 generation할 수 있음
2. diffusion model을 학습할 때, 특별한 어려움이 없음
단점 2가지
1. image generation 속도가 너무 느림
2. negative log likelihood (lossless codelength)가 다른 likelihood model에 비해 안좋음
2번의 이유에 대해서는 diffusion model 자체가 excellent lossy compressor에 대한 inductive bias가 있다라고 표현
(자세한 내용은 Section 4.3 참고)
My Conclusion
수학적으로 어렵진 않지만 볼게 있다보니, 메인 흐름을 놓치기가 쉬운것 같음
또한 적당히 empirical하게 퉁치고 넘어가는 부분도 있긴 하다만, 기존의 연구인 NCSN과의 연관성, 결국은 좋은 performance를 냈다는 점 등은 좋게 생각하며 재미있게 읽었음
Rating
Good
Extra
- Reference 1: Author official tensorflow code (https://github.com/hojonathanho/diffusion/)
- Reference 2: DDPM explain YouTube (https://www.youtube.com/watch?v=vu6eKteJWew)