[논문리뷰] Denoising Diffusion Probabilistic Models

Denoising Diffusion Probabilistic Models에 대해 리뷰하겠습니다.

안녕하세요. 이번에는 논문 Denoising Diffusion Probabilistic Models에 대해 리뷰해보겠습니다. Denoising Diffusion Probabilistic Models는 마코브 연쇄 (Markov chain)을 이용해서 데이터에 노이즈를 추가하는 과정을 표현하고 이 반대과정인 노이즈를 걷어내는 과정을 학습합니다. 지난 글에서 설명드린 논문 Generative modeling by estimating gradients of the data distribution 만큼 생성모델에서 중요한 논문입니다. 굉장히 의미 있는 논문이니까 한번 리뷰를 해보겠습니다. 그런데 이 논문 Denoising Diffusion Probabilistic Models 에 대해서는 이미 많은 리뷰가 있어요. 대표적으로 아래의 영상인데요. 아래의 영상을 보고 다 이해 가신다면 이 글을 안보셔도 됩니다. 그런데 영상을 볼 시간이 없거나 영상을 보고 이해가 안되신 분들은 이 글을 쭉 따라와주세요.

Denoising Diffusion Probabilistic Models 의 기본 구조

 

Denoising Diffusion Probabilistic Models
Denoising Diffusion Probabilistic Models의 모형

 

위의 그림은 Denoising Diffusion Probabilistic Models을 표현한 그림입니다. 여기서 맨 오른쪽이 데이터 분포입니다. q(\mathbf{x}_t | \mathbf{x}_{t-1}) 를 이용하여서 데이터 샘플에 노이즈를 주입하여 맨왼쪽처럼 노이즈화 시킵니다. 이 q(\mathbf{x}_t | \mathbf{x}_{t-1}) 는 사람이 정합니다. 그리고 왼쪽에서 오른쪽으로 오는 과정 또한 하나의 마코브 연쇄로 봅니다. 이 과정을 나타내는 transition density 는 p_{\mathbf{\theta}} (\mathbf{x}_{t-1} | \mathbf{x}_t ) 로 표현합니다. 이 논문에서는 노이즈로부터 데이터를 생성해 내는 과정인 p_{\mathbf{\theta}} ( \mathbf{x}_t | \mathbf{x}_{t-1}) 를 추정해서 데이터 샘플을 생성하는 과정을 배웁니다.

Forward Process and Reverse Process

앞에서 q(\mathbf{x}_t | \mathbf{x}_{t-1}) 를 이용해서 데이터에 노이즈를 준다고 하였는데요. 구체적으로 어떤식인지 보겠습니다. q(\mathbf{x}_t | \mathbf{x}_{t-1}) 는 아래의 수식 (1)과 같습니다.

\begin{equation} q(\mathbf{x}_t | \mathbf{x}_{t-1}) = N(\mathbf{x}_t; \sqrt{1-\beta_t} \mathbf{x}_0, \beta_t, \mathbf{I} \quad 0 < \beta_1,\beta_2,...,\beta_N <1 \end{equation}

위에는 t-1 에서 t로 가는 density 를 표현하였는데요. 이것을 나타내는 구체적인 식은 아래의 수식 (2)와 같고. 이것을 Forward Process라고 부릅니다.

\begin{equation}\mathbf{x}_t = \sqrt{1-\beta_t} \mathbf{x}_{t-1} + \sqrt{\beta_t} \mathbf{w}_t, \mathbf{w}_t \sim ~ N ( \mathbf{0}, \mathbf{I}) \end{equation}

이제 이것의 반대과정을 표현하는 transition density p_{\mathbf{\theta}} (\mathbf{x}_{t-1} | \mathbf{x}_t ) 에 대해 알아보겠습니다. p_{\mathbf{\theta}} (\mathbf{x}_{t-1} | \mathbf{x}_t ) 의 수식은 수식 (3) 과 같습니다.

\begin{equation} p_{\mathbf{\theta}} (\mathbf{x}_{t-1} | \mathbf{x}_t ) = N ( \mathbf{x}_{t-1} ; \mathbf{\mu}_{\mathbf{\theta}} ( \mathbf{x}_t, t), \beta_t \mathbf{I}) \end{equation}

위의 수식 (3)은 t에서 t-1로 가는 과정을 나타내는 density 이고요. 실제로 t에서 t-1로 갈때 어떻게 변형되는지는 아래와 같은 수식 (4)으로 정리됩니다. 그리고 이 수식 (4)로 표현되는 과정을 Reverse Process 라고 부릅니다.




\begin{equation} \mathbf{x}_{t-1} = \mathbf{x}_t + ( \mathbf{\mu}_\theta ( \mathbf{x}_t, t) - \mathbf{x}_t) + \sqrt{\beta_t} \tilde{\mathbf{w}}_t, \tilde{\mathbf{w}}_t \sim N(\mathbf{0}, \mathbf{I}) \end{equation}

앞서 설명했듯이 이 논문에서는 Reverse Process를 추정하는 방법에 대해 논하고 있습니다.

Loss function 구성

앞서 설명했듯이 Reverse Process 를 추정하는 것이 이 논문의 핵심 아이디어입니다. 그러면 Loss 함수를 어떻게 만드냐 부터가 문제이지요. ELBO (Evidence Lower BOund) 를 이용하여 Loss를 정의합니다. 여기서부터는 약간 복잡한데요. 계산과정을 다 보이는 것은 어려운 일이니까 결론만 먼저 보여드릴게요. 더 자세한 내용은 논문을 찾아주세요.

K 002

loss는 위와 같이 negative log likelihood 를 최소화 하는 loss를 사용합니다. loss유도는 ELBO 를 사용하듯이 하면 됩니다.

K 003

loss를 변형하면 KL divergence에 대한 꼴로 바뀌는데요. 이것을 좀 더 전개하면 아래와 같은 간단한 loss 형태로 바뀝니다.

K 004




여기서 \epsilon 은 0에서 t시점까지 쌓인 노이즈를 의미하고 \epsilon_{\mathbf{\theta}} 는 이 노이즈를 추정하는 인공신경망입니다.

Score function 과의 관계

이렇게 Loss까지 정의하였는데 이것이 score function 과 무슨 관련이 있을까요? score function 이랑 관계는 왜 중요할까요? 그 이유는 나중에 살펴볼테고요. 사실 위에서 언급한 loss를 수식을 변경해서 쓰면 아래와 같이 바뀌게 됩니다.

\begin{equation} \sum_{t=1}^N ( 1- \bar{\alpha}_t) E_{p(\mathbf{x}_0)} E_{q(\mathbf{x}_t | \mathbf{x}_0)} \left[ \| \mathbf{s}_{\mathbf{\theta}}(\mathbf{x}_t, t) - \nabla_{{\mathbf{x}}_t} \log q ( \mathbf{x}_t | \mathbf{x}_0) \|  \right] \end{equation}

식 (5)에서 보듯이 결국에는 Denoising Diffusion Probabilistic Models 은 Generative modeling by estimating gradients of the data distribution 이 그랬던 것처럼 score function 을 추정하는 방법이라고 볼 수 있네요.

 

 

 

Leave a Comment