4장. 해부: 확산 모델

논문 읽기 · 2부. 논문 한 쪽 해부

고급 · 약 15분 · 연습문제 5

요약

DDPM의 핵심 식을 한 줄씩: 잡음을 더하는 전방 과정, 한 번에 t단계로 가는 닫힌 꼴, 재매개변수화, 잡음 예측 손실, 샘플링, 신호 대 잡음비와 열방정식의 연결

이미지 생성 모델의 대부분은 확산 모델입니다. 아이디어는 단순합니다. 사진에 잡음을 조금씩 더해 결국 완전한 잡음으로 만드는 과정은 쉽습니다. 그 과정을 거꾸로, 잡음에서 조금씩 잡음을 걷어 내는 법을 신경망에게 가르치면, 순수한 잡음에서 새 사진을 만들 수 있습니다. 이 장에서는 2020년 논문 “Denoising Diffusion Probabilistic Models”(Ho 외)의 핵심 식들을 해부합니다. 필요한 것은 정규분포의 성질(확률과 통계 2·4장)과 기댓값(3장)입니다.

4.1 전방 과정

q(xt∣xt−1)=N ⁣(xt; 1−βt xt−1, βtI),t=1,…,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_tI\right), \qquad t = 1, \dots, T.

읽기. N(x;μ,Σ)\mathcal N(\mathbf x; \boldsymbol\mu, \Sigma)는 “x\mathbf x에 대한, 평균 μ\boldsymbol\mu 공분산 Σ\Sigma인 정규밀도”입니다. 그러므로 이 식은

xt=1−βt xt−1+βt ϵt,ϵt∼N(0,I).\mathbf x_t = \sqrt{1 - \beta_t}\,\mathbf x_{t-1} + \sqrt{\beta_t}\,\boldsymbol\epsilon_t, \qquad \boldsymbol\epsilon_t \sim \mathcal N(\mathbf 0, I).
  • βt\beta_t: 단계 tt에서 더하는 잡음의 분산(잡음 스케줄, noise schedule). 논문은 β1=10−4\beta_1 = 10^{-4}에서 βT=0.02\beta_T = 0.02까지 선형으로 늘리고 T=1000T = 1000을 씁니다.
  • 신호를 1−βt\sqrt{1 - \beta_t}배로 줄이는 이유: 분산을 1로 유지하려고. Var(xt−1)=1\mathrm{Var}(\mathbf x_{t-1}) = 1이면 Var(xt)=(1−βt)+βt=1\mathrm{Var}(\mathbf x_t) = (1 - \beta_t) + \beta_t = 1(독립인 것의 분산은 더해짐).

질문 1. 학습하는 매개변수가 없습니다. 전방 과정은 우리가 정하는 고정된 마르코프 체인(확률과 통계 12장)입니다.

4.2 한 번에 t단계로

αt=1−βt\alpha_t = 1 - \beta_t, αˉt=∏s=1tαs\bar\alpha_t = \prod_{s=1}^t\alpha_s로 두면

정리 4.1. q(xt∣x0)=N ⁣(αˉt x0, (1−αˉt)I)q(\mathbf x_t \mid \mathbf x_0) = \mathcal N\!\left(\sqrt{\bar\alpha_t}\,\mathbf x_0,\ (1 - \bar\alpha_t)I\right), 곧

xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I).\mathbf x_t = \sqrt{\bar\alpha_t}\,\mathbf x_0 + \sqrt{1 - \bar\alpha_t}\,\boldsymbol\epsilon, \qquad \boldsymbol\epsilon \sim \mathcal N(\mathbf 0, I).

증명 (두 단계). x2=α2(α1x0+1−α1ϵ1)+1−α2ϵ2\mathbf x_2 = \sqrt{\alpha_2}(\sqrt{\alpha_1}\mathbf x_0 + \sqrt{1 - \alpha_1}\boldsymbol\epsilon_1) + \sqrt{1 - \alpha_2}\boldsymbol\epsilon_2. 잡음 부분은 독립인 정규분포 두 개의 합이므로 정규분포이고, 분산은 α2(1−α1)+(1−α2)=1−α1α2\alpha_2(1 - \alpha_1) + (1 - \alpha_2) = 1 - \alpha_1\alpha_2입니다(확률과 통계 4장). 귀납적으로 일반 tt. □

의미. 학습 때 1000단계를 차례로 돌 필요 없이, 아무 tt나 골라 한 번에 xt\mathbf x_t를 만들 수 있습니다.

질문 3 (극단값). αˉt→0\bar\alpha_t \to 0(tt가 큼)이면 xt≈ϵ\mathbf x_t \approx \boldsymbol\epsilon, 원래 그림의 흔적이 없는 순수한 잡음입니다. αˉt→1\bar\alpha_t \to 1이면 xt≈x0\mathbf x_t \approx \mathbf x_0.

정의 4.2. SNR(t)=αˉt1−αˉt\mathrm{SNR}(t) = \dfrac{\bar\alpha_t}{1 - \bar\alpha_t}를 신호 대 잡음비(signal-to-noise ratio)라 합니다. 신호 분산과 잡음 분산의 비이고, tt가 커질수록 0으로 줄어듭니다. 이후의 많은 논문은 잡음 스케줄을 SNR로 기술합니다.

4.3 역과정과 학습 목표

역과정 pθ(xt−1∣xt)p_\theta(\mathbf x_{t-1} \mid \mathbf x_t)를 신경망으로 모델링합니다. 원래는 데이터의 로그 가능도의 하한(ELBO, 5장)을 최대화해야 하지만, 논문은 그것을 정리하면 아주 단순한 목표가 됨을 보였습니다.

Lsimple(θ)=Et, x0, ϵ[∥ϵ−ϵθ ⁣(αˉt x0+1−αˉt ϵ, t)∥2].\mathcal L_{\text{simple}}(\theta) = \mathbb E_{t,\,\mathbf x_0,\,\boldsymbol\epsilon}\left[\left\lVert\boldsymbol\epsilon - \boldsymbol\epsilon_\theta\!\left(\sqrt{\bar\alpha_t}\,\mathbf x_0 + \sqrt{1 - \bar\alpha_t}\,\boldsymbol\epsilon,\ t\right)\right\rVert^2\right].

읽기 (안쪽부터).

  1. 데이터에서 그림 x0\mathbf x_0, 균등하게 단계 tt, 표준정규 잡음 ϵ\boldsymbol\epsilon을 뽑습니다.
  2. 정리 4.1로 잡음 섞인 그림 xt\mathbf x_t를 만듭니다.
  3. 신경망 ϵθ(xt,t)\boldsymbol\epsilon_\theta(\mathbf x_t, t)가 “어떤 잡음이 섞였는가”를 맞힙니다.
  4. 맞힌 잡음과 실제 잡음의 제곱오차를 평균내어 최소화합니다.

질문 5 (어디서 왔는가). 제곱오차는 정규분포 가정의 음의 로그 가능도(확률과 통계 7장)이고, 기댓값은 몬테카를로로 어림합니다(미니배치 SGD, 최적화 5장). 결국 잡음을 맞히는 회귀 문제입니다.

왜 잡음을 맞히는가? xt\mathbf x_t와 ϵ\boldsymbol\epsilon을 알면 x0=xt−1−αˉtϵαˉt\mathbf x_0 = \frac{\mathbf x_t - \sqrt{1 - \bar\alpha_t}\boldsymbol\epsilon}{\sqrt{\bar\alpha_t}}로 원래 그림을 되찾을 수 있습니다. 잡음 예측은 깨끗한 그림의 예측과 같은 정보를 가지며, 실험적으로 학습이 더 안정적이었습니다.

4.4 샘플링

xT∼N(0,I)\mathbf x_T \sim \mathcal N(\mathbf 0, I)에서 시작해 t=T,…,1t = T, \dots, 1에 대해

xt−1=1αt(xt−βt1−αˉt ϵθ(xt,t))+σtz,z∼N(0,I).\mathbf x_{t-1} = \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) + \sigma_t\mathbf z, \qquad \mathbf z \sim \mathcal N(\mathbf 0, I).

예측한 잡음의 일부를 빼고, 줄였던 크기를 되돌리고(1/αt1/\sqrt{\alpha_t}), 약간의 새 잡음을 더합니다. 1000번의 신경망 계산이 필요해서 느리며, 이를 줄이는 것(DDIM, 고차 ODE 풀이기)이 이후 연구의 큰 주제입니다(미분방정식 7장).

4.5 열방정식과의 연결

βt\beta_t가 작으면 전방 과정은 “조금씩 줄이고 조금씩 퍼뜨리기”이고, 연속 시간 극한에서 확률 미분방정식이 됩니다. 그 확률밀도는 확산 방정식(미분방정식 9장의 열방정식에 끌어당기는 항이 붙은 것)을 따릅니다. 확산 모델이라는 이름이 여기서 왔고, 2021년 이후의 논문은 이 연속 시간 관점(점수 기반 모델, 확률 흐름 ODE)으로 씁니다.

4.6 이 장의 요약

  • 전방: xt=1−βtxt−1+βtϵ\mathbf x_t = \sqrt{1 - \beta_t}\mathbf x_{t-1} + \sqrt{\beta_t}\boldsymbol\epsilon, 분산 1을 유지.
  • 닫힌 꼴: xt=αˉtx0+1−αˉtϵ\mathbf x_t = \sqrt{\bar\alpha_t}\mathbf x_0 + \sqrt{1 - \bar\alpha_t}\boldsymbol\epsilon. SNR =αˉt/(1−αˉt)= \bar\alpha_t/(1 - \bar\alpha_t).
  • 학습: 섞인 잡음을 맞히는 제곱오차 회귀.
  • 샘플링: 잡음에서 시작해 예측 잡음을 조금씩 뺌. 연속 극한은 확산 방정식.

쓰이는 곳. 이미지·영상·음성 생성 모델(Stable Diffusion, 확산 트랜스포머), 분자·단백질 설계, 로봇 정책 학습(diffusion policy), 기상 예측, 역문제(흐린 사진 복원, MRI 재구성)가 이 장의 식을 출발점으로 씁니다.

문제

4.1 [계산] · 확인 문제

β1=0.1\beta_1 = 0.1, β2=0.2\beta_2 = 0.2일 때 값을 구합니다. (소수 넷째 자리까지)

값 답
αˉ2\bar\alpha_2 [?]
x0\mathbf x_0의 계수 αˉ2\sqrt{\bar\alpha_2} [?]
잡음의 계수 1−αˉ2\sqrt{1 - \bar\alpha_2} [?]
정답
0.72
0.8485
0.5292
풀이

αˉ2=0.9⋅0.8=0.72\bar\alpha_2 = 0.9\cdot0.8 = 0.72, 0.72≈0.8485\sqrt{0.72} \approx 0.8485, 0.28≈0.5292\sqrt{0.28} \approx 0.5292입니다. 두 계수의 제곱의 합은 1입니다.

4.2 [계산] · 확인 문제

αˉt=0.2\bar\alpha_t = 0.2일 때 신호 대 잡음비는?

정답
0.25
풀이

0.2/0.8=0.250.2/0.8 = 0.25입니다.

4.3 [계산] · 확인 문제

1차원에서 x0=2x_0 = 2, αˉt=0.64\bar\alpha_t = 0.64, 뽑힌 잡음 ϵ=0.5\epsilon = 0.5이면 xtx_t는?

정답
1.9
풀이

xt=0.8⋅2+0.6⋅0.5=1.6+0.3=1.9x_t = 0.8\cdot2 + 0.6\cdot0.5 = 1.6 + 0.3 = 1.9입니다.

4.4 [계산] · 확인 문제

위 문제에서 신경망이 잡음을 정확히 ϵθ=0.5\epsilon_\theta = 0.5로 맞혔다면, xtx_t에서 되찾은 x^0\hat x_0은?

정답
2
풀이

x^0=1.9−0.6⋅0.50.8=1.60.8=2\hat x_0 = \frac{1.9 - 0.6\cdot0.5}{0.8} = \frac{1.6}{0.8} = 2입니다.

4.5 [증명]

Var(xt−1)=I\mathrm{Var}(\mathbf x_{t-1}) = I이고 ϵt\boldsymbol\epsilon_t가 xt−1\mathbf x_{t-1}과 독립이면 Var(xt)=I\mathrm{Var}(\mathbf x_t) = I임을 보이고, 신호를 줄이지 않고 xt=xt−1+βtϵt\mathbf x_t = \mathbf x_{t-1} + \sqrt{\beta_t}\boldsymbol\epsilon_t로 하면 어떻게 되는지 설명합니다.

풀이

독립이므로 Var(xt)=(1−βt)I+βtI=I\mathrm{Var}(\mathbf x_t) = (1 - \beta_t)I + \beta_tI = I입니다. 줄이지 않으면 분산이 1+βt1 + \beta_t배가 되어 TT단계 뒤 1+∑βt1 + \sum\beta_t로 계속 커집니다(값의 범위가 단계마다 달라짐). 이것도 쓰이는 방식(분산 폭발형, variance-exploding)이며, DDPM의 방식은 분산 보존형(variance-preserving)이라 부릅니다.