본문 바로가기
  • 책상 밖 세상을 경험할 수 있는 Playground를 제공하고, 수동적 학습에서 창조의 삶으로의 전환을 위한 새로운 라이프 스타일을 제시합니다.
CV

[2026-1] 김지원 - Denoising Diffusion Probabilistic Models

by jw103203 2026. 6. 12.

논문 소개 : Denoising Diffusion Probabilistic Models (DDPM)

Jonathan Ho, Ajay Jain, Pieter Abbeel (UC Berkeley) · NeurIPS 2020
arXiv: 2006.11239 · 공식 구현

들어가며

요즘 이미지 생성의 표준이 되어버린 디퓨전 모델, 그 출발점이 된 논문임. 사실 디퓨전 모델 자체는 2015년 Sohl-Dickstein et al.이 비평형 열역학(nonequilibrium thermodynamics)에서 아이디어를 빌려와 처음 제안했음. 다만 그때까진 "정의는 깔끔하고 학습도 잘 되는데, 정작 고품질 샘플을 만들어낸 적은 없는" 모델이었음.

이 논문의 기여를 한 줄로 요약하면 이렇게 정리됨.

  • 디퓨전 모델이 실제로 GAN급, 때로는 그 이상의 고품질 샘플을 뽑을 수 있음을 처음으로 보여줌 (CIFAR10 FID 3.17)
  • 특정 파라미터화를 통해 디퓨전 모델이 denoising score matching + Langevin dynamics와 등가임을 밝힘
  • 복잡한 변분 하한(variational bound)을 가중치를 단순화한 MSE 형태의 목적함수로 축약함 (\(L_\text{simple}\))

당시 GAN이 지배하던 생성 모델 판에서 "학습 안정적이고, likelihood 평가도 가능하고, 샘플 품질도 좋은" 대안을 제시했다는 점에서 의미가 큰 논문임.


1. 배경: 디퓨전 모델이란

디퓨전 모델은 두 개의 마르코프 체인으로 구성됨. 하나는 데이터를 점점 망가뜨리는 forward process, 다른 하나는 그걸 되돌리는 reverse process임.

Forward process (diffusion process)

깨끗한 데이터 \(\mathbf{x}_0\)에 가우시안 노이즈를 조금씩 더해가며 \(T\) 스텝에 걸쳐 완전한 노이즈로 만드는 과정임. 핵심은 이 과정에 학습 파라미터가 전혀 없다는 점임. 분산 스케줄 \(\beta_1, \dots, \beta_T\)만 정해주면 끝임.

$$q(\mathbf{x}_{t} \mid \mathbf{x}_{t-1}) := \mathcal{N}\!\left(\mathbf{x}_{t};\, \sqrt{1-\beta_t}\,\mathbf{x}_{t-1},\; \beta_t \mathbf{I}\right)$$

여기서 한 가지 아주 유용한 성질이 있음. 임의의 시점 \(t\)의 \(\mathbf{x}_t\)를 닫힌 형태(closed form)로 한 번에 샘플링할 수 있다는 거임. \(\alpha_t := 1 - \beta_t\), \(\bar{\alpha}_t := \prod_{s=1}^{t} \alpha_s\)로 두면:

$$q(\mathbf{x}_t \mid \mathbf{x}_0) = \mathcal{N}\!\left(\mathbf{x}_t;\, \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0,\; (1-\bar{\alpha}_t)\mathbf{I}\right)$$

$$\mathbf{x}_t = \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{\epsilon}$$

한 줄로 어떤 시점의 노이즈 데이터든 만들 수 있음. 이게 나중에 학습 효율의 핵심이 됨.

Reverse process

여기가 실제로 학습하는 부분임. 노이즈 \(\mathbf{x}_T \sim \mathcal{N}(0, \mathbf{I})\)에서 시작해서 한 스텝씩 되돌려 데이터를 복원함.

$$p_\theta(\mathbf{x}_{t-1} \mid \mathbf{x}_t) := \mathcal{N}\!\left(\mathbf{x}_{t-1};\, \boldsymbol{\mu}_\theta(\mathbf{x}_t, t),\; \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t)\right)$$

\(\beta_t\)가 충분히 작으면 forward와 reverse가 같은 함수 형태(가우시안)를 갖게 되므로, reverse도 가우시안으로 두는 게 정당화됨. 신경망은 이 가우시안의 평균 \(\boldsymbol{\mu}_\theta\)만 예측하면 됨.


2. 학습 목적함수: 변분 하한에서 출발

학습은 negative log likelihood에 대한 변분 하한을 최소화하는 것으로 시작함.

$$\mathbb{E}\!\left[-\log p_\theta(\mathbf{x}_0)\right] \leq \mathbb{E}_q\!\left[-\log \frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}\mid\mathbf{x}_0)}\right] =: L$$

이걸 그대로 몬테카를로로 추정하면 분산이 큼. 그래서 논문은 이걸 KL divergence 항들의 합으로 다시 씀 (Rao-Blackwellization).

$$L = \mathbb{E}_q\!\left[\underbrace{D_{\mathrm{KL}}\!\left(q(\mathbf{x}_T\mid\mathbf{x}_0)\,\|\,p(\mathbf{x}_T)\right)}_{L_T} + \sum_{t>1}\underbrace{D_{\mathrm{KL}}\!\left(q(\mathbf{x}_{t-1}\mid\mathbf{x}_t,\mathbf{x}_0)\,\|\,p_\theta(\mathbf{x}_{t-1}\mid\mathbf{x}_t)\right)}_{L_{t-1}} \underbrace{-\log p_\theta(\mathbf{x}_0\mid\mathbf{x}_1)}_{L_0}\right]$$

여기서 forward posterior \(q(\mathbf{x}_{t-1}\mid\mathbf{x}_t, \mathbf{x}_0)\)는 \(\mathbf{x}_0\)로 조건부를 걸면 tractable한 가우시안이 됨. 따라서 모든 KL 항이 가우시안끼리의 비교라서, 고분산 몬테카를로 대신 닫힌 형태로 계산할 수 있음. 이게 분산을 크게 줄여줌.

각 항의 역할을 보면:

  • \(L_T\): forward variance를 상수로 고정하면 학습 파라미터가 없으므로 상수 → 무시 가능
  • \(L_{t-1}\) (\(1 < t \le T\)): reverse process의 핵심 학습 항
  • \(L_0\): 마지막 디코더 항 (이산 데이터 likelihood 처리)

3. 핵심 아이디어: \(\boldsymbol{\epsilon}\)-prediction

이 논문에서 가장 중요한 부분임. \(L_{t-1}\) 항을 풀어보면 reverse process의 평균 \(\boldsymbol{\mu}_\theta\)가 forward posterior 평균 \(\tilde{\boldsymbol{\mu}}_t\)를 예측하도록 학습되는 형태가 나옴.

$$L_{t-1} = \mathbb{E}_q\!\left[\frac{1}{2\sigma_t^2}\left\|\tilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) - \boldsymbol{\mu}_\theta(\mathbf{x}_t, t)\right\|^2\right] + C$$

가장 직관적인 선택은 \(\boldsymbol{\mu}_\theta\)가 직접 \(\tilde{\boldsymbol{\mu}}_t\)를 예측하게 하는 거임. 그런데 저자들은 여기서 한 발 더 나아감. \(\mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon}\)으로 재파라미터화하면, 결국 모델이 추가된 노이즈 \(\boldsymbol{\epsilon}\)을 예측하도록 바꿀 수 있음.

$$\boldsymbol{\mu}_\theta(\mathbf{x}_t, t) = \frac{1}{\sqrt{\alpha_t}}\!\left(\mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t)\right)$$

즉 신경망 \(\boldsymbol{\epsilon}_\theta\)는 "이 노이즈 낀 이미지에 어떤 노이즈가 섞였는지"를 맞히는 일을 함. 이렇게 두면 목적함수가 다음과 같이 정리됨.

$$\mathbb{E}_{\mathbf{x}_0,\, \boldsymbol{\epsilon}}\!\left[\frac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar{\alpha}_t)}\left\|\boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\!\left(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon},\; t\right)\right\|^2\right]$$

이 형태가 바로 여러 노이즈 스케일에 걸친 denoising score matching(Song & Ermon, NCSN)과 닮았다는 게 핵심 통찰임. 그리고 샘플링 절차(Algorithm 2)는 \(\boldsymbol{\epsilon}_\theta\)를 데이터 밀도의 학습된 gradient처럼 쓰는 Langevin dynamics를 닮음. 학습은 score matching처럼, 샘플링은 Langevin처럼 — 이 둘이 변분 추론 아래에서 하나로 묶인다는 걸 보여준 거임.

참고로 \(\mathbf{x}_0\)를 직접 예측하는 파라미터화도 가능하지만, 실험 초기에 샘플 품질이 더 나빴다고 밝힘. 그래서 \(\boldsymbol{\epsilon}\)-prediction을 택함.

Σ는 어떻게?

reverse process의 분산 \(\boldsymbol{\Sigma}_\theta\)는 학습하지 않고 \(\sigma_t^2 \mathbf{I}\)로 시간 의존 상수로 고정함. \(\sigma_t^2 = \beta_t\)든 \(\sigma_t^2 = \tilde{\beta}_t\)든 실험 결과가 비슷했음. 오히려 분산을 학습시키면 학습이 불안정해지고 샘플 품질도 떨어졌음 (Table 2).


4. 단순화된 목적함수 \(L_\text{simple}\)

여기가 실용적으로 가장 중요한 부분임. 위 목적함수 앞에 붙은 복잡한 가중치 \(\dfrac{\beta_t^2}{2\sigma_t^2\alpha_t(1-\bar{\alpha}_t)}\)를 그냥 버리고 단순한 MSE로 학습했더니 오히려 샘플 품질이 더 좋아졌음.

$$L_\text{simple}(\theta) := \mathbb{E}_{t,\,\mathbf{x}_0,\,\boldsymbol{\epsilon}}\!\left[\left\|\boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\!\left(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon},\; t\right)\right\|^2\right]$$

학습 알고리즘이 충격적으로 간단해짐.

Training (Algorithm 1)

  1. \(\mathbf{x}_0 \sim q(\mathbf{x}_0)\) 데이터 샘플
  2. \(t \sim \mathrm{Uniform}(\{1, \dots, T\})\) 랜덤 시점
  3. \(\boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I})\) 노이즈 샘플
  4. \(\left\|\boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\!\left(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\boldsymbol{\epsilon},\; t\right)\right\|^2\)에 대해 gradient step

Sampling (Algorithm 2)

  • \(\mathbf{x}_T \sim \mathcal{N}(0, \mathbf{I})\)에서 시작해서 \(t = T, \dots, 1\)로 한 스텝씩 디노이징

왜 가중치를 버리는 게 더 나은가? 원래 가중치는 \(t\)가 작은 항(노이즈가 거의 없는 쉬운 디노이징)에 큰 비중을 줌. 가중치를 빼면 자연스럽게 작은 \(t\) 항의 비중이 줄고, 모델이 더 어려운 큰 \(t\)의 디노이징에 집중하게 됨. 이 재가중이 샘플 품질을 끌어올림. 다만 이건 진짜 likelihood를 최적화하는 건 아니라서, likelihood(codelength)는 약간 손해를 봄. 품질과 likelihood 사이의 트레이드오프임.


5. 실험 결과

세팅은 다음과 같음.

  • \(T = 1000\), \(\beta_t\)는 \(10^{-4}\)에서 \(0.02\)까지 선형 증가
  • 백본은 U-Net (PixelCNN++ 기반, group norm, 16×16 해상도에 self-attention)
  • 시간 \(t\)는 Transformer sinusoidal position embedding으로 주입
  • CIFAR10 모델 35.7M 파라미터, LSUN/CelebA-HQ 모델 114M

Sample quality (CIFAR10)

Model IS ↑ FID ↓
StyleGAN2 + ADA 9.74 3.26
NCSN 8.87 25.32
SNGAN-DDLS 9.09 15.42
Ours (\(L_\text{simple}\)) 9.46 3.17

unconditional 모델인데도 FID 3.17로 당시 문헌의 대부분 모델(클래스 조건부 모델 포함)을 능가했음. 이게 디퓨전 모델의 가능성을 증명한 결정적 수치임.

LSUN 256×256에서도 ProgressiveGAN과 비슷한 품질을 냈음 (Bedroom FID 4.90).

Ablation (Table 2)

파라미터화 / 목적함수 IS FID
\(\tilde{\boldsymbol{\mu}}\) 예측, 진짜 변분 하한 8.06 13.22
\(\boldsymbol{\epsilon}\) 예측, 진짜 변분 하한 7.67 13.51
\(\boldsymbol{\epsilon}\) 예측, \(L_\text{simple}\) 9.46 3.17
  • \(\tilde{\boldsymbol{\mu}}\) 예측은 진짜 변분 하한으로 학습할 때만 잘 됨 (단순 MSE로는 망함)
  • 분산 \(\boldsymbol{\Sigma}\)를 학습시키면 불안정 (표의 빈칸들)
  • \(\boldsymbol{\epsilon}\) 예측은 변분 하한에선 \(\tilde{\boldsymbol{\mu}}\)와 비슷하지만, \(L_\text{simple}\)과 결합했을 때 압도적

결론은 명확함. \(\boldsymbol{\epsilon}\)-prediction + \(L_\text{simple}\) 조합이 핵심임.


6. 부가 논의: 압축, 점진적 생성, 자기회귀와의 연결

Progressive coding

디퓨전 모델은 likelihood 자체는 다른 likelihood 기반 모델만큼 경쟁력 있진 않음. 흥미로운 건, lossless codelength의 절반 이상이 사람 눈에 안 보이는 미세한 디테일을 기술하는 데 소모된다는 점임 (rate 1.78 bits/dim, distortion 1.97 bits/dim). 즉 디퓨전 모델은 뛰어난 lossy 압축기로서의 inductive bias를 가짐.

Progressive generation

reverse process를 진행하면서 매 시점의 \(\hat{\mathbf{x}}_0\)를 들여다보면, 큰 스케일의 특징이 먼저 나타나고 디테일이 마지막에 채워짐. coarse-to-fine으로 이미지가 형성되는 거임. 이건 conceptual compression의 힌트로 해석됨.

자기회귀 디코딩과의 연결

변분 하한을 다시 쓰면 디퓨전 모델을 일반화된 비트 순서(bit ordering)를 가진 자기회귀 모델로 해석할 수 있음. 좌표를 마스킹하는 특수한 forward process를 상상하면 그게 정확히 autoregressive 학습이 됨. 가우시안 디퓨전은 이걸 "좌표 재배열로는 표현 못 하는" 더 일반적인 순서로 확장한 것으로 볼 수 있고, 디퓨전 길이를 데이터 차원에 묶지 않아도 된다는 유연성(\(T=1000\))도 가짐.

Interpolation

\(q\)를 stochastic encoder로 써서 latent에서 두 이미지를 보간한 뒤 reverse process로 디코딩하면, 포즈·피부톤·헤어스타일·표정·배경 같은 속성이 부드럽게 변하는 그럴듯한 보간이 나옴.


7. 정리 및 의의

이 논문이 묶어낸 연결고리들을 정리하면 이렇게 됨.

  • 디퓨전 모델 ↔ 변분 추론으로 학습하는 마르코프 체인
  • 디퓨전 모델 ↔ denoising score matching + annealed Langevin dynamics
  • 디퓨전 모델 ↔ 자기회귀 모델 (일반화된 비트 순서)
  • 디퓨전 모델 ↔ 점진적 lossy 압축

개인적으로 이 논문의 진짜 임팩트는 두 가지라고 생각함. 하나는 복잡한 변분 하한을 "노이즈를 맞히는 MSE 한 줄"로 단순화해서 누구나 학습할 수 있게 만든 실용성임. 다른 하나는 score-based 모델과 디퓨전 모델이 사실 같은 것을 다른 언어로 말하고 있었다는 이론적 통합임. 이 두 가지가 합쳐지면서 이후 DDIM, ADM(guided diffusion), Latent Diffusion(Stable Diffusion), 그리고 score SDE 프레임워크로 이어지는 거대한 흐름의 토대가 됐음.

지금 보면 \(T=1000\) 스텝 샘플링은 너무 느리다는 명백한 한계가 있고(이건 DDIM 등 후속 연구가 해결함), likelihood 경쟁력도 부족함. 그럼에도 "디퓨전이 진짜 된다"는 걸 증명한 출발점으로서, 생성 모델 역사에서 빼놓을 수 없는 논문임.


한 줄 요약

노이즈를 점점 더하고(forward), 그걸 되돌리도록 신경망에게 "섞인 노이즈를 맞혀봐"(\(\boldsymbol{\epsilon}\)-prediction + \(L_\text{simple}\))라고 시켰더니, GAN급 이미지가 나왔음.