【扩散模型】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 ×xt1
x t x_t xt x t − 2 x_{t-2} xt2的关系式:
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(1at1) ϵt1+1at ×ϵt+atat1 ×xt2
利用正态分布和重参数化技巧可以将两个单独采样的正太分布化为一个正太分布,即
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αt1 ×ϵ+αtαt1 ×xt2
同理,可以推断
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=atat1at2at3...a2a1
论文里使用正太分布的公式表示:
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:Tx0):=t=1Tq(xtxt1),q(xtxt1):=N(xt;1βt xt1,βtI)
到最终 β 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(xt1xt,x0)=P(xtx0)P(xtxt1,x0)P(xt1x0)
化简得到
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(xt1xt,x0)N(1aˉtat (1aˉt1)xt+1aˉtat1 (1at)x0,(1aˉt 1at 1aˉt1 )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(xt1xt,x0)N(1aˉtat (1aˉt1)xt+1aˉtaˉt1 (1at)×aˉt xt1aˉt ×ϵ, 1aˉtβt(1aˉt1) 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} xt1,再将得到的 x t − 1 x_{t-1} xt1 t − 1 t-1 t1输入神经网络得到 x t − 2 x_{t-2} xt2,从而一步步计算最终得到 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=1Tpθ(xt1xt),pθ(xt1xt):=N(xt1;μθ(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(0T))=p(x(T))t=1Tp(x(t1)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(1T)p(x(0T))q(x(1T)x(0))q(x(1T)x(0))=dx(1T)q(x(1T)x(0))q(x(1T)x(0))p(x(0T))=dx(1T)q(x(1T)x(0))p(x(T))t=1Tq(x(t)x(t1))p(x(t1)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))logp(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:Tx0)pθ(x0:T)]=Eq[logp(xT)t1logq(xtxt1)pθ(xt1xt)]
继续转化为论文里的公式
在这里插入图片描述
关于最后一步化为 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(xtx0)在前向过程中推导过了,在前向过程中除了随机采样,其他的所有量都是已知的,因此 L T L_T LT就是一个已知的正态分布进行随机采样,故不需要训练。
L t − 1 L_{t-1} Lt1项的 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_{t},\mathbf{x}_{0}) q(xt1xt,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θ(xt1xt):=N(xt1;μθ(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)221
由于两个时刻的高斯分布的方差相差无几,故 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 Lt1=Eq[2σt21μ 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} Lt1C=Ex0,ϵ[2σt21μ t(xt(x0,ϵ),α t1(xt(x0,ϵ)1αt ϵ))μθ(xt(x0,ϵ),t)2]=Ex0,ϵ[2σt21α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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值