Skip to main content

Diffusion Models

Diffusion Models は、data に少しずつ noise を加えていく forward process と、その noise を少しずつ取り除いて data を生成する reverse process からなる generative model です。

Generative models overview

画像出典: Lilian Weng, “What are Diffusion Models?”。VAE、GAN、Flow-based model、Diffusion Model などの generative model の位置づけが示されています。

基本 idea

Diffusion Model では、まず clean data x0x_0 に対して、少しずつ Gaussian noise を加えていきます。十分な step を経ると、data はほぼ standard Gaussian noise になります。

次に、model はこの process を逆向きにたどります。つまり、noise から始めて、少しずつ denoise しながら data sample を生成します。

DDPM

画像出典: Lilian Weng, “What are Diffusion Models?”。Forward diffusion process と reverse denoising process が示されています。

代表的な model: DDPM

DDPM、つまり Denoising Diffusion Probabilistic Model は、diffusion model の代表的な定式化です。DDPM では、forward process は固定された Markov chain として定義され、reverse process は neural network によって学習されます。

Sampling の直感

Sampling では、pure noise から開始します。

xTN(0,I)x_T \sim \mathcal{N}(0, I)

そして、reverse process を通じて次第に noise を取り除きます。

xTxT1x0x_T \to x_{T-1} \to \cdots \to x_0

最終的に、x0x_0 が生成された sample になります。

Diffusion example

画像出典: Lilian Weng, “What are Diffusion Models?”。Noise から画像が段階的に生成される様子が示されています。

数式で見る diffusion の二つの Markov chain

DDPM では、forward process は固定された Markov chain として定義されます。

q(x1:Tx0)=t=1Tq(xtxt1)q(x_{1:T}\mid x_0)=\prod_{t=1}^{T}q(x_t\mid x_{t-1})

各 step では、少しだけ Gaussian noise を加えます。

q(xtxt1)=N(xt;1βtxt1,βtI)q(x_t\mid x_{t-1})=\mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t\mathbf{I})

ここで、βt\beta_t は noise schedule です。この式の気持ちは、「clean data を少しずつ壊して、最終的にはほぼ Gaussian noise にする」ということです。

Reverse process は、model parameter θ\theta を使って次のように学習されます。

pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)p_\theta(x_{0:T})=p(x_T)\prod_{t=1}^{T}p_\theta(x_{t-1}\mid x_t) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1}\mid x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))

この式の気持ちは、「noise から一気に画像を作るのではなく、各時刻で一段階だけ denoise する条件付き分布を学ぶ」というものです。Diffusion model の安定性は、この難しい生成問題を多数の小さな denoising 問題へ分解している点にあります。

関連ページ