当前位置:AIGC资讯 > AIGC > 正文

【扩散模型】DDPM论文理解

DDPM(Denoising Diffusion Probabilistic Models)

更详细解读可以参考(这几个视频看完基本对DDPM的原理就能够把握了)

李宏毅
大白话AI
b站公式推导1
b站公式推导2

基本过程

扩散模型受扩散现象的启发,通过逐步向图片中加入高斯噪声来模拟这种现象,并通过逆向过程从(随机)噪声中生成图片。


添加噪声的两个条件:(1)整个过程的状态都服从马尔科夫性质(2)每一步加入的噪声变化都比较少,则变化过程可以近似为高斯分布。

前向过程

加入噪声的混合公式:

将原始干净的图片x0通过此公式多次叠加噪声直到xT。
可以用式子来表达前一时刻和后一时刻的关系:

式中每一步的 ϵ \epsilon ϵ都是基于标准正太分布的重新采样的随机数。而且每一步的 β \beta β并不相同,从最开始某个接近0的数逐渐递增,到最后接近1,以模拟扩散过程的速度越来越快。即

为简化推导,令 α t = 1 − β t \alpha_t=1-\beta_t αt​=1−βt​得到
x t = 1 − α t × ϵ t + α t × x t − 1 x_t=\sqrt{1-\alpha_t}\times\epsilon_t+\sqrt{\alpha_t}\times x_{t-1} xt​=1−αt​ ​×ϵt​+αt​ ​×xt−1​
则 x t x_t xt​和 x t − 2 x_{t-2} xt−2​的关系式:
x t = a t ( 1 − a t − 1 ) ϵ t − 1 + 1 − a t × ϵ t + a t a t − 1 × x t − 2 x_{t}=\sqrt{a_{t}(1-a_{t-1})}\epsilon_{t-1}+\sqrt{1-a_{t}}\times\epsilon_{t}+\sqrt{a_{t}a_{t-1}}\times x_{t-2} xt​=at​(1−at−1​) ​ϵt−1​+1−at​ ​×ϵt​+at​at−1​ ​×xt−2​
利用正态分布和重参数化技巧可以将两个单独采样的正太分布化为一个正太分布,即
x t = 1 − α t α t − 1 × ϵ + α t α t − 1 × x t − 2 x_t=\sqrt{1-\alpha_t\alpha_{t-1}}\times\epsilon+\sqrt{\alpha_t\alpha_{t-1}}\times x_{t-2} xt​=1−αt​αt−1​ ​×ϵ+αt​αt−1​ ​×xt−2​
同理,可以推断
x t = 1 − α ‾ t × ϵ + α ‾ t × x 0 x_t=\sqrt{1-\overline{\alpha}_t}\times\epsilon+\sqrt{\overline{\alpha}_t}\times x_0 xt​=1−αt​ ​×ϵ+αt​ ​×x0​
其中,
α ‾ t = a t a t − 1 a t − 2 a t − 3 . . . a 2 a 1 \overline{\alpha}_t=a_ta_{t-1}a_{t-2}a_{t-3}...a_2a_1 αt​=at​at−1​at−2​at−3​...a2​a1​
论文里使用正太分布的公式表示:
q ( x 1 : T ∣ x 0 ) : = ∏ t = 1 T q ( x t ∣ x t − 1 ) , q ( x t ∣ x t − 1 ) : = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_{1:T}|\mathbf{x}_{0}):=\prod_{t=1}^{T}q(\mathbf{x}_{t}|\mathbf{x}_{t-1}),\quad q(\mathbf{x}_{t}|\mathbf{x}_{t-1}):=\mathcal{N}(\mathbf{x}_{t};\sqrt{1-\beta_{t}}\mathbf{x}_{t-1},\beta_{t}\mathbf{I}) q(x1:T​∣x0​):=t=1∏T​q(xt​∣xt−1​),q(xt​∣xt−1​):=N(xt​;1−βt​ ​xt−1​,βt​I)
到最终 β t \beta_t βt​会趋于1,均值趋于0,方差趋于1,即最终的图像近似为高斯分布的随机噪声图像。

反向过程

由后一时刻的图片求解出前一时刻的图片,利用贝叶斯公式
P ( x t − 1 ∣ x t , x 0 ) = P ( x t ∣ x t − 1 , x 0 ) P ( x t − 1 ∣ x 0 ) P ( x t ∣ x 0 ) P(x_{t-1}|x_t,x_0)=\frac{P(x_t|x_{t-1},x_0)P(x_{t-1}|x_0)}{P(x_t|x_0)} P(xt−1​∣xt​,x0​)=P(xt​∣x0​)P(xt​∣xt−1​,x0​)P(xt−1​∣x0​)​
化简得到
P ( x t − 1 ∣ x t , x 0 ) ∼ N ( a t ( 1 − a ˉ t − 1 ) 1 − a ˉ t x t + a t − 1 ( 1 − a t ) 1 − a ˉ t x 0 , ( 1 − a t 1 − a ˉ t − 1 1 − a ˉ t ) 2 ) P(x_{t-1}|x_{t},x_{0})\sim N\left(\frac{\sqrt{a_{t}}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}x_{t}+\frac{\sqrt{a_{t-1}}(1-a_{t})}{1-\bar{a}_{t}}x_{0},\left(\frac{\sqrt{1-a_{t}}\sqrt{1-\bar{a}_{t-1}}}{\sqrt{1-\bar{a}_{t}}}\right)^{2}\right) P(xt−1​∣xt​,x0​)∼N(1−aˉt​at​ ​(1−aˉt−1​)​xt​+1−aˉt​at−1​ ​(1−at​)​x0​,(1−aˉt​ ​1−at​ ​1−aˉt−1​ ​​)2)
由于反向过程的 x t x_t xt​已知, x 0 x_0 x0​需要求解,故通过前向过程的关系式将 x 0 x_0 x0​替换,得到
P ( x t − 1 ∣ x t , x 0 ) ∼ N ( a t ( 1 − a ˉ t − 1 ) 1 − a ˉ t x t + a ˉ t − 1 ( 1 − a t ) 1 − a ˉ t × x t − 1 − a ˉ t × ϵ a ˉ t , ( β t ( 1 − a ˉ t − 1 ) 1 − a ˉ t ) 2 \begin{aligned}P(x_{t-1}|x_{t},x_{0})&\sim N\left(\frac{\sqrt{a_{t}}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}x_{t}+\frac{\sqrt{\bar{a}_{t-1}}(1-a_{t})}{1-\bar{a}_{t}}\right.\\&\times\frac{x_{t}-\sqrt{1-\bar{a}_{t}}\times\epsilon}{\sqrt{\bar{a}_{t}}},\left(\sqrt{\frac{\beta_{t}(1-\bar{a}_{t-1})}{1-\bar{a}_{t}}}\right)^{2}\end{aligned} P(xt−1​∣xt​,x0​)​∼N(1−aˉt​at​ ​(1−aˉt−1​)​xt​+1−aˉt​aˉt−1​ ​(1−at​)​×aˉt​ ​xt​−1−aˉt​ ​×ϵ​, ​1−aˉt​βt​(1−aˉt−1​)​ ​ ​2​
其中的 ϵ \epsilon ϵ是 x 0 x_0 x0​到任意时刻 t t t的图片 x t x_t xt​直接加噪的噪声,因此可以训练神经网络对输入 x t x_t xt​和步骤 t t t,输出估计的 ϵ \epsilon ϵ,从而求解出 x t − 1 x_{t-1} xt−1​,再将得到的 x t − 1 x_{t-1} xt−1​和 t − 1 t-1 t−1输入神经网络得到 x t − 2 x_{t-2} xt−2​,从而一步步计算最终得到 x 0 x_0 x0​。
论文里提到反向过程可以看成如下公式:
p θ ( x 0 : T ) : = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) , p θ ( x t − 1 ∣ x t ) : = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{0:T}):=p(\mathbf{x}_T)\prod_{t=1}^Tp_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t),\quad p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t):=\mathcal{N}(\mathbf{x}_{t-1};\boldsymbol{\mu}_\theta(\mathbf{x}_t,t),\boldsymbol{\Sigma}_\theta(\mathbf{x}_t,t)) pθ​(x0:T​):=p(xT​)t=1∏T​pθ​(xt−1​∣xt​),pθ​(xt−1​∣xt​):=N(xt−1​;μθ​(xt​,t),Σθ​(xt​,t))
使用神经网络来估计参数。

训练过程Loss推导

模型的输出为
p ( x ( 0 ⋯ T ) ) = p ( x ( T ) ) ∏ t = 1 T p ( x ( t − 1 ) ∣ x ( t ) ) p\big(\mathbf{x}^{(0\cdots T)}\big)=p\big(\mathbf{x}^{(T)}\big)\prod_{t=1}^Tp\big(\mathbf{x}^{(t-1)}|\mathbf{x}^{(t)}\big) p(x(0⋯T))=p(x(T))t=1∏T​p(x(t−1)∣x(t))
由于我们只对最终的输出 x 0 x_0 x0​感兴趣,因此对联合概率密度求积分得到 x 0 x_0 x0​的边缘分布
p ( x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) p ( x ( 0 ⋯ T ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) p ( x ( 0 ⋯ T ) ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) = ∫ d x ( 1 ⋯ T ) q ( x ( 1 ⋯ T ) ∣ x ( 0 ) ) ⋅ p ( x ( T ) ) ∏ t = 1 T p ( x ( t − 1 ) ∣ x ( t ) ) q ( x ( t ) ∣ x ( t − 1 ) ) . \begin{gathered} p\big(\mathbf{x}^{(0)}\big)=\int d\mathbf{x}^{(1\cdots T)}p\big(\mathbf{x}^{(0\cdots T)}\big)\frac{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)}{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)} \\ =\int d\mathbf{x}^{(1\cdots T)}q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)\frac{p\big(\mathbf{x}^{(0\cdots T)}\big)}{q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)} \\ =\int d\mathbf{x}^{(1\cdots T)}q\big(\mathbf{x}^{(1\cdots T)}|\mathbf{x}^{(0)}\big)\cdot p\big(\mathbf{x}^{(T)}\big)\prod_{t=1}^{T}\frac{p\big(\mathbf{x}^{(t-1)}|\mathbf{x}^{(t)}\big)}{q\big(\mathbf{x}^{(t)}|\mathbf{x}^{(t-1)}\big)}. \end{gathered} p(x(0))=∫dx(1⋯T)p(x(0⋯T))q(x(1⋯T)∣x(0))q(x(1⋯T)∣x(0))​=∫dx(1⋯T)q(x(1⋯T)∣x(0))q(x(1⋯T)∣x(0))p(x(0⋯T))​=∫dx(1⋯T)q(x(1⋯T)∣x(0))⋅p(x(T))t=1∏T​q(x(t)∣x(t−1))p(x(t−1)∣x(t))​.​
则negative log likelihood:
− L = d x ( 0 ) q ( x ( 0 ) ) l o g ∫ p ( x ( 0 ) ) -L=d\mathbf{x}^{(0)}q\big(\mathbf{x}^{(0)}\big)\mathrm{log}\int p\big(\mathbf{x}^{(0)}\big) −L=dx(0)q(x(0))log∫p(x(0))
可化为
E q [ − log ⁡ p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = E q [ − log ⁡ p ( x T ) − ∑ t ≥ 1 log ⁡ p θ ( x t − 1 ∣ x t ) q ( x t ∣ x t − 1 ) ] \mathbb{E}_q[-\log\frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_0)}]=\mathbb{E}_q[-\log p(\mathbf{x}_T)-\sum_{t\geq1}\log\frac{p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)}{q(\mathbf{x}_t|\mathbf{x}_{t-1})}] Eq​[−logq(x1:T​∣x0​)pθ​(x0:T​)​]=Eq​[−logp(xT​)−t≥1∑​logq(xt​∣xt−1​)pθ​(xt−1​∣xt​)​]
继续转化为论文里的公式

关于最后一步化为 D K L D_{KL} DKL​,即KL散度。

可以查看对KL散度简短的理解介绍
KL散度

其中, L T L_T LT​项的 p ( x T ) p(x_T) p(xT​)是已知的要变化的图像,近似为高斯噪声图像, q ( x t ∣ x 0 ) q(\mathbf{x}_t|\mathbf{x}_0) q(xt​∣x0​)在前向过程中推导过了,在前向过程中除了随机采样,其他的所有量都是已知的,因此 L T L_T LT​就是一个已知的正态分布进行随机采样,故不需要训练。
而 L t − 1 L_{t-1} Lt−1​项的 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_{t},\mathbf{x}_{0}) q(xt−1​∣xt​,x0​)是在反向过程中推导的已知的后验概率,而后一部分就是神经网络需要找到的分布
p θ ( x t − 1 ∣ x t ) : = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_{\theta}(\mathbf{x}_{t-1}|\mathbf{x}_{t}){:}=\mathcal{N}(\mathbf{x}_{t-1};\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t},t),\boldsymbol{\Sigma}_{\theta}(\mathbf{x}_{t},t)) pθ​(xt−1​∣xt​):=N(xt−1​;μθ​(xt​,t),Σθ​(xt​,t))
根据两个高斯分布的KLD公式:
log ⁡ σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 \log\frac{\sigma_2}{\sigma_1}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac12 logσ1​σ2​​+2σ22​σ12​+(μ1​−μ2​)2​−21​
由于两个时刻的高斯分布的方差相差无几,故 log ⁡ σ 2 σ 1 \log\frac{\sigma_2}{\sigma_1} logσ1​σ2​​可视为一个常数,因此的目标就是最小化两个均值差
L t − 1 = E q [ 1 2 σ t 2 ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 ] + C L_{t-1}=\mathbb{E}_q\left[\frac{1}{2\sigma_t^2}\|\widetilde{\boldsymbol{\mu}}_t(\mathbf{x}_t,\mathbf{x}_0)-\boldsymbol{\mu}_\theta(\mathbf{x}_t,t)\|^2\right]+C Lt−1​=Eq​[2σt2​1​∥μ ​t​(xt​,x0​)−μθ​(xt​,t)∥2]+C
同理,替换 x 0 x_0 x0​得到
L t − 1 − C = E x 0 , ϵ [ 1 2 σ t 2 ∥ μ ~ t ( x t ( x 0 , ϵ ) , 1 α t ( x t ( x 0 , ϵ ) − 1 − α ‾ t ϵ ) ) − μ θ ( x t ( x 0 , ϵ ) , t ) ‾ ∥ 2 ] = E x 0 , ϵ [ 1 2 σ t 2 ∥ 1 α t ( x t ( x 0 , ϵ ) − β t 1 − α ˉ t ϵ ) − μ θ ( x t ( x 0 , ϵ ) , t ) ∥ 2 ] \begin{aligned}L_{t-1}-C&=\mathbb{E}_{\mathbf{x}_{0},\boldsymbol{\epsilon}}\left[\frac{1}{2\sigma_{t}^{2}}\|\widetilde{\boldsymbol{\mu}}_{t}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),\frac{1}{\sqrt{\boldsymbol{\alpha}}_{t}}\big(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon})-\sqrt{1-\overline{\alpha}_{t}}\boldsymbol{\epsilon}\big)\right)-\underline{\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),t)}\|^{2}\right]\\&=\mathbb{E}_{\mathbf{x}_{0},\boldsymbol{\epsilon}}\left[\frac{1}{2\sigma_{t}^{2}}\|\frac{1}{\sqrt{\alpha_{t}}}\left(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon})-\frac{\beta_{t}}{\sqrt{1-\bar{\alpha}_{t}}}\boldsymbol{\epsilon}\right)-\boldsymbol{\mu}_{\theta}(\mathbf{x}_{t}(\mathbf{x}_{0},\boldsymbol{\epsilon}),t)\|^{2}\right]\end{aligned} Lt−1​−C​=Ex0​,ϵ​[2σt2​1​∥μ ​t​(xt​(x0​,ϵ),α ​t​1​(xt​(x0​,ϵ)−1−αt​ ​ϵ))−μθ​(xt​(x0​,ϵ),t)​∥2]=Ex0​,ϵ​[2σt2​1​∥αt​ ​1​(xt​(x0​,ϵ)−1−αˉt​ ​βt​​ϵ)−μθ​(xt​(x0​,ϵ),t)∥2]​
再将系数比值简化化为1,得到最核心的最小化目标:
L s i m p l e ( θ ) : = E t , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ‾ t x 0 + 1 − α ‾ t ϵ , t ) ∥ 2 ] L_{\mathrm{simple}}(\theta){:}=\mathbb{E}_{t,\mathbf{x}_{0},\boldsymbol{\epsilon}}\big[\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_{\theta}(\sqrt{\overline{\alpha}_{t}}\mathbf{x}_{0}+\sqrt{1-\overline{\alpha}_{t}}\boldsymbol{\epsilon},t)\|^{2}\big] Lsimple​(θ):=Et,x0​,ϵ​[∥ϵ−ϵθ​(αt​ ​x0​+1−αt​ ​ϵ,t)∥2]
因此,DDPM的核心就是模拟预测输入图像的noise。
而对于第三项 L 0 L_0 L0​按如下公式进行离散化处理

对于此处的边界认为从 x 0 x_0 x0​到 x 1 x_1 x1​和从 x 1 x_1 x1​到 x 0 x_0 x0​是完全相同的,实际上也可以将 x 1 x_1 x1​直接当作最后的输出了。(CVPR2024有篇论文Tackling the Singularities at the Endpoints of Time Intervals in Diffusion Models针对 x 1 x_1 x1​到 x 0 x_0 x0​处进行处理从而解决了扩散模型生成纯白和纯黑的问题)

神经网络训练和采样过程

训练过程

采样过程生成图片


进行采样时加入增加随机性,方差对结果影响不大。

相关论文和代码下载

有时候论文网站arXiv.org打开比较慢,已经将相关论文和代码上传到网盘,需要的可以自取

链接: https://pan.baidu.com/s/1J1h8R4KyY7k6NgS2t7YOZg?pwd=3ss8

总结

更新时间 2024-08-24