19.5 확산 모델과 score 기반 모델

실습 · 연습문제 1개

forward 과정의 사후분포 q(x_{t-1} | x_t, x_0) ddpm-posterior

DDPM의 forward 과정은 q(xt∣xt−1)=N(1−βt xt−1, βt)q(x_t \mid x_{t-1}) = \mathcal{N}\big(\sqrt{1 - \beta_t}\,x_{t-1},\ \beta_t\big)이고, 닫힌 형태의 주변분포는 q(xt∣x0)=N(αˉt x0, 1−αˉt)q(x_t \mid x_0) = \mathcal{N}\big(\sqrt{\bar\alpha_t}\,x_0,\ 1 - \bar\alpha_t\big), αˉt=∏s=1t(1−βs)\bar\alpha_t = \prod_{s=1}^{t}(1 - \beta_s)이다. αˉ0=1\bar\alpha_0 = 1로 둔다.

x0x_0를 알 때 한 step 앞의 사후분포는 가우시안이다.

q(xt−1∣xt,x0)=N(μ~t(xt,x0), β~t)q(x_{t-1} \mid x_t, x_0) = \mathcal{N}\big(\tilde\mu_t(x_t, x_0),\ \tilde\beta_t\big)

reverse 과정의 각 step은 이 분포에서 x0x_0 자리에 신경망의 예측을 넣은 것이다. 함수 posterior(x0, xt, t, betas)를 완성해 (mean, var)를 반환한다.

인자 의미
x0, xt 같은 shape의 배열(또는 스칼라)
t 1 이상 len(betas) 이하의 정수 시각
betas (T,) 배열. betas[t - 1]이 βt\beta_t

힌트: 베이즈 정리로 q(xt−1∣xt,x0)∝q(xt∣xt−1) q(xt−1∣x0)q(x_{t-1} \mid x_t, x_0) \propto q(x_t \mid x_{t-1})\,q(x_{t-1} \mid x_0)이다. 두 가우시안 인자의 정밀도(분산의 역수)를 더하면 사후 정밀도가 되고, 사후 평균은 각 인자가 말하는 xt−1x_{t-1}의 값을 정밀도로 가중평균한 것이다(11.4장). 정리하면

β~t=1−αˉt−11−αˉt βt,μ~t=αˉt−1 βt1−αˉt x0+1−βt (1−αˉt−1)1−αˉt xt\tilde\beta_t = \frac{1 - \bar\alpha_{t-1}}{1 - \bar\alpha_t}\,\beta_t, \qquad \tilde\mu_t = \frac{\sqrt{\bar\alpha_{t-1}}\,\beta_t}{1 - \bar\alpha_t}\,x_0 + \frac{\sqrt{1 - \beta_t}\,(1 - \bar\alpha_{t-1})}{1 - \bar\alpha_t}\,x_t

이다. t=1t = 1이면 x0x_0가 이미 주어졌으므로 평균은 x0x_0, 분산은 0이다(위 식에 αˉ0=1\bar\alpha_0 = 1을 넣어도 같다). var는 mean과 같은 shape으로 반환한다. 테스트는 Monte Carlo 시뮬레이션과도 비교한다.