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을 표현한 그림입니다. 여기서 맨 오른쪽이 데이터 분포입니다. 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를 정의합니다. 여기서부터는 약간 복잡한데요. 계산과정을 다 보이는 것은 어려운 일이니까 결론만 먼저 보여드릴게요. 더 자세한 내용은 논문을 찾아주세요.
loss는 위와 같이 negative log likelihood 를 최소화 하는 loss를 사용합니다. loss유도는 ELBO 를 사용하듯이 하면 됩니다.
loss를 변형하면 KL divergence에 대한 꼴로 바뀌는데요. 이것을 좀 더 전개하면 아래와 같은 간단한 loss 형태로 바뀝니다.
여기서 \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 을 추정하는 방법이라고 볼 수 있네요.
그림이 깨져서 안보이는것같아용 ㅠㅠ
관심 가져주셔서 감사합니다. 옛날에 썼던 글이여서 어떤 그림이 들어갔는지는 모르겠습니다. ㅜㅜ 저위에 올려둔 youtube영상이나 본 논문에 있는 그림을 넣었던 것 같습니다. ㅜㅜ