2 minute read

DDPM 개념 정리

https://huggingface.co/blog/annotated-diffusion 이 사이트를 기준으로 정리한 글이다. 설명은 해당 사이트에서 보는게 나을 듯 하다.

GAN, VAE 모두 노이즈를 단순한 분포에서 데이터 샘플로 변환하는 것이며, Diffusion 또한 순수한 노이즈인 상태에서 신경망이 점차적으로 데이터의 노이즈를 제거하는 방법을 학습한다.

Diffusion은 아래와 같은 2개 프로세스로 구성되어 있다.

  • forward process \(q\)
    • 이미지에 가우시안 노이즈를 점점 추가하여 순수한 노이즈가 될 떄 까지 만든다. 각 time step \(t\)에서 가우시안 분포의 일부 노이즈를 샘플링하여 이전 time step의 이미지에 노이즈를 추가한다.
  • reverse process \(p_\theta\)
    • 이 부분에서 신경망 학습이 들어가며, forward process를 통해 만들어진 순수한 노이즈로 시작해서 실제 이미지가 나올 때까지 이미지의 노이즈를 점차적으로 제거한다.

forward, reverse process 모두 \(t\)로 인덱싱 되어있으며, 모두 유한한 time step \(T\)동안 발생한다. \(T=1000\)으로 논문에서 1000스텝을 사용한다. forward process를 통해 마지막으로 isotropic Gaussian distribution을 얻을 수 있다.


수식에 대해 자세히 알아보자

신경망이 최적화해야 할 loss함수를 이해하기 위함이다.

beta값을 통한 노이즈 스케줄링에 대한 내용이 원본글에 포함되어 있으니 확인 필요.

  • \( \mathbf{x}_0 \sim q(\mathbf{x}_0) \):   \( q(\mathbf{x}_0) \)는 실제 데이터 분포이며, \( \mathbf{x}_0 \)라는 랜덤 변수(여기선 실제 이미지)가 \( q(\mathbf{x}_0) \)라는 확률 분포를 따라 샘플을 추출하여 이미지를 얻을 수 있으며 있다.

  • time step \(t\)에서 각각의 새로운 이미지는 평균과 분산이 있는 조건부 가우스 분포(conditional gaussian distribution)에서 추출된다.

  • 그리고 우리는 reverse process의 conditional distribution인 \( P(\mathbf{x}_{t-1} \mid \mathbf{x}_t) \)를 알고 있다면, 여기서 가우시안 노이즈 \( \mathbf{x}_T \)를 샘플링하여 프로세스를 역으로 실행할 수 있다.

이 조건부 확률을 계산하려면 가능한 모든 이미지의 분포를 알아야 하기 때문에 매우 어렵기에 이 조건부 확률 분포를 근사화(학습) 하기 위해 신경망을 활용한다.

이를 \( p_\theta(x_{t-1} x_t) \)라고 부르며, theta는 경사 하강법에 의해 업데이트 되는 신경망의 매개변수이다.

그리고 이 p_\theta(x_{t-1} | x_t) 조건부 분포 또한 정규 분포이기에 평균과 분산또한 학습되야 한다. 그래서 각 평균과 분산의 식에도 세타가 붙어 파라미터화 된 것을 식에서 확인할 수 있다. 그러나 논문에서는 분산을 학습시켜도 값이 비슷하기에, 고정된 상태로 유지하고 신경망이 이 조건부 확률 분포의 평균만 학습하도록 한다. 나중 diffusion 논문에서는 개선되어 reverse process에서 분산도 학습하는 것을 확인할 수 있다. 어쨌든 DDPM에서 신경망은 조건부 확률 분포의 평균만 학습 및 표현하면 된다.

\(\mathbf{x}_0\) : 데이터 분포로부터의 실제 이미지를 의미한다.


Defining an objective function (by reparametrizing the mean)

forward process q와 reverse process를 구성하면 loss의 각 항(L_0제외)은 실제로 두 가우스 분포 사이의 KL divergence이며, 이는 평균에 대한 L2 loss로 명시적으로 작성할 수 있다.

Sohl-Dickstein 등이 제시한 바와 같이 구성된 포워드 프로세스 q의 직접적인 결과는 X_0을 조건으로 하는 임의의 노이즈 레벨에서 X_t를 샘플링할 수 있다는 것입니다(가우시안 합도 가우시안이기 때문입니다). 이는 X_t를 샘플링하기 위해 q를 반복해서 적용할 필요가 없으므로 매우 편리합니다. (한 번에 X_t값을 구해 샘플링 가능하다.)



출처

https://huggingface.co/blog/annotated-diffusion
https://www.youtube.com/watch?v=jaPPALsUZo8&t=5132s&ab_channel=%EB%AA%A8%EB%91%90%EC%9D%98%EC%97%B0%EA%B5%AC%EC%86%8C

Updated: