Understanding Diffusion Models

Understanding Diffusion Models: A Unified Perspective

ELBO

目标:学习一个模型去最大化 p(x)p(x) 的似然

法一:p(x)=p(x,z)dzp(x)=\int p(x,z)dz

法二:p(x)=p(x,z)p(zx)p(x)=\frac{p(x,z)}{p(z|x)}

代理目标:最大化ELBO

logp(x)Eqϕ(zx)[logp(x,z)qϕ(zx)]\log{p(x)} \ge \mathbb E_{q_\phi(z|x)}\Big[\log{\frac{p(x,z)}{q_\phi(z|x)}}\Big]

why?

使用法一证明:

并不能告诉我们太多幕后实际情况的有用信息,而且这个证明并没有直观的给出究竟为什么ELBO实际上是证据的下限

于是使用法二证明:

因此证据就等于ELBO加上KL散度

logp(x)\log{p(x)} 对于 ϕ\phi 总是一个常数,因此,最大化ELBO项就相当于最小化KL散度项

VAE

输入数据经过中间的bottleneck表示步骤后被训练来预测它本身

encoder:学习中间的bottleneck分布 qϕ(zx)q_\phi(z|x) 将输入转换为可能的潜在分布

decoder: 学习确定的函数 pθ(xz)p_\theta(x|z) 将输入的潜在向量 zz 转换为观测 xx

第一项衡量变分分布的decoder的重建似然,保证学到的分布可以建模有效的可以重新生成原始数据的潜在变量;第二项衡量学习到的变分分布和潜在变量的先验信念有多相似,最小化该项可以避免学到的分布坍塌为Dirac delta函数

那么最大化ELBO等价于最大化第一项、最小化第二项

VAE的encoder通常通过对数协方差建模一个多元高斯,先验器通常被选择为一个标准高斯:

KL散度项在分析上可以被计算,重建项可以使用蒙特卡罗方法近似,于是目标变为:

由于每个 zz 被随机采样,通常不可微,因此通过重新参数化技巧解决:重写随机变量为一个确定的噪声变量的函数。于是每个 zz 可以被输入为 xx 的确定函数以及辅助噪声变量 ϵ\epsilon 所计算:

训练VAE后,可以直接从隐空间 p(z)p(z) 采样,然后通过decoder生成新数据。当 zz 的维度小于 xx 时,或许可以学习到重要、有趣的表示,此外,当语义上有意义的隐空间被学习,隐向量可以在通过decoder之前被编辑来控制数据的生成

Hierarchical Variational Autoencoders

一般的HVAE有T个层级,每个隐变量都可以以前面的隐变量为条件

decoding每个 ztz_t 都只以前面的 zt+1z_{t+1} 为条件(可以理解为递归式的VAE),联合分布和后验器定义为:

扩展ELBO为:

代入联合分布、后验器:

变分扩散模型可以更进一步将这个目标分解为可解释的组分

Variational Diffusion Models

三个关键约束:

  • 隐变量维度与数据维度相同

  • 每一步的隐变量编码器为一个预定义的线性高斯模型,不需要学习

  • 最后的时间步T时刻隐变量为一个标准高斯

改写后验器:

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

encoder转移:

q(xtxt1)=N(xt;αtxt1,(1αt)I)(31)q(x_t|x_{t-1})=\mathcal N(x_t;\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)\mathbf I)\tag{31}

改写HVAE的联合分布:

p(x0:T)=p(xT)t=1Tpθ(xt1xt)(32)p(x_{0:T})=p(x_T)\prod_{t=1}^Tp_\theta(x_{t-1|x_t})\tag{32}

p(xT)=N(xT;0,I)(33)p(x_T)=\mathcal N(x_T;0,\mathbf I)\tag{33}

逐渐地添加噪声破坏图像,直至其最终与纯高斯噪声完全相同

VDM的采样过程变为:从p(xT)p(x_T) 采样一个高斯噪声,然后逐渐运行去噪转移 pθ(xt1xt)p_\theta(x_{t-1}|x_t) 生成新的 x0x_0。通过最大化ELBO来优化VDM:

重建项预测给定第一步隐变量后原始数据的对数似然;先验匹配项不需要被优化,假设一个足够大的T,最后的分布为高斯分布,这项实际上为0;一致项使得一张噪声图的去噪步应该匹配一张干净图的加噪步:

上面的结果是可能是次优解,由于一致项作为一个期望在每个时间步有两个随机变量,使用蒙特卡洛估计可能会有较高的方差。改进方案:将encoder转移改写为 q(xtxt1)=q(xtxt1,x0)q(x_t|x_{t-1})=q(x_t|x_{t-1},x_0)根据贝叶斯规则继续改写:

q(xtxt1,x0)=q(xt1xt,x0)q(xtx0)q(xt1x0)(46)q(x_t|x_{t-1},x_0)=\frac{q(x_{t-1}|x_t,x_0)q(x_t|x_0)}{q(x_{t-1}|x_0)}\tag{46}

重新进行推导ELBO:

重建项与普通的VAE相似,可以使用蒙特卡洛估计来近似;先验匹配项表示最终的噪声分布与标准高斯先验分布有多接近,同样的不需要训练,根据假设同样趋于0;去噪匹配项中的 q(xt1xt,x0)q(x_{t-1}|x_t,x_0) 转移步可以看作ground-truth信号,定义了有噪声的图像 xtx_t 应该如何去噪,并获得最后的完全去噪的图像 x0x_0  应该是什么

去噪匹配项中的KL散度难以计算,但是可以使用高斯转移的假设进行优化,根据贝叶斯规则:

q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0)q(x_{t-1}|x_t,x_0)=\frac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}

q(xtxt1)=q(xtxt1)=N(xt;αtxt1,(1αt)I)q(x_t|x_{t-1})=q(x_t|x_{t-1})=\mathcal N(x_t;\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)\mathbf I) ,根据重新参数化技巧,重写采样 xtq(xtxt1)x_t\sim q(x_t|x_{t-1}) :

xt=αtxt1+1αtϵ(59)x_t=\sqrt \alpha_tx_{t-1}+\sqrt{1-\alpha_t}\epsilon\tag{59}

xt1=αt1xt2+1αt1ϵ(60)x_{t-1}=\sqrt \alpha_{t-1}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon\tag{60}

于是:

代入得:

将方差重写,Σq(t)=σq2(t)I\Sigma_q(t)=\sigma_q^2(t)\mathbf I ,则:

σq2(t)=(1αt)(1αˉt1)1αˉt(85)\sigma_q^2(t)=\frac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}\tag{85}

为了匹配近似ground-truth去噪转移步 q(xt1xt,x0)q(x_{t-1}|x_t,x_0) ,将近似 pθ(xt1xt)p_\theta(x_{t-1}|x_{t}) 也建模为高斯分布。由于 α\alpha 项已知,于是近似的方差就可以是 Σq(t)=σq2(t)I\Sigma_q(t)=\sigma_q^2(t)\mathbf I .因此必须参数化它的均值 μθ(xt,t)\mu_\theta(x_t,t) .

两个高斯分布之间的KL散度:

DKL(N(x;μx,Σx)N(y;μy,Σy))=12[logΣyΣxd+tr(Σy1Σx)+(μyμx)TΣy1(μyμx)](86)D_{KL}(\mathcal N(x;\mu_x,\Sigma_x)\parallel\mathcal N(y;\mu_y,\Sigma_y))=\frac{1}{2}\bigg[\log\frac{|\Sigma_y|}{|\Sigma_x|}-d+tr(\Sigma_y^{-1}\Sigma_x)+(\mu_y-\mu_x)^T\Sigma_y^{-1}(\mu_y-\mu_x)\bigg]\tag{86}

那么去噪匹配项中的KL散度可以通过最小化这两个分布的均值差异来减小:

μq(xt,x0)=αt(1αˉt1)xt+αˉt1(1αt)x01αˉt(93)\mu_q(x_t,x_0)=\frac{\sqrt\alpha_t(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)x_0}{1-\bar\alpha_t}\tag{93}

μθ(xt,t)=αt(1αˉt1)xt+αˉt1(1αt)x^θ(xt,t)1αˉt(94)\mu_\theta(x_t,t)=\frac{\sqrt\alpha_t(1-\bar\alpha_{t-1})x_t+\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)\hat x_\theta(x_t,t)}{1-\bar\alpha_t}\tag{94}

因此优化问题简化为:

因此优化VDM归结起来就是学习一个NN从任意噪声版本的图像中预测出原始图像。此外,最小化所有噪声水平上公式(58)(58) 中的求和项可以通过最小化所有时间步的期望来近似:

arg minθ EtU2,T[Eq(xtx0)[DKL(q(xt1xt,x0)pθ(xt1xt))]](100)\underset{\theta}{arg\ min}\ \mathbb E_{t\sim U{2,T}}\big[\mathbb E_{q(x_t|x_0)}[D_{KL}(q(x_{t-1}|x_t,x_0)\parallel p_\theta(x_{t-1}|x_t))]\big]\tag{100}

可以在每个时间步使用随机采样来优化。

学习噪声参数

如何学习噪声参数?一种方法是使用一个NN α^η(t)\hat\alpha_\eta(t) 来建模 αt\alpha_t ,但是很低效。解决方案:

由于 q(xtx0)N(xt;αˉtx0,(1αˉt)I)q(x_t|x_0)\sim \mathcal N(x_t;\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)\mathbf I) ,根据信噪比定义 SNR=μ2σ2\mathrm{SNR}=\frac{\mu^2}{\sigma^2} ,,每个时间步的SNR为:

SNR(t)=αˉt1αˉt(109)\mathrm{SNR}(t)=\frac{\bar\alpha_t}{1-\bar\alpha_t}\tag{109}

12σq2(t)αˉt1(1αt)2(1αˉt)2[x^θ(xt,t)x022]=12(SNR(t1)SNR(t))[x^θ(xt,t)x022](110)\frac{1}{2\sigma_q^2(t)}\frac{\bar\alpha_{t-1}(1-\alpha_t)^2}{(1-\bar\alpha_t)^2}\Big[\left\|\hat x_\theta(x_t,t)-x_0\right\|_2^2\Big]=\frac{1}{2}(\mathrm {SNR}(t-1)-\mathrm{SNR}(t))\Big[\left\|\hat x_\theta(x_t,t)-x_0\right\|_2^2\Big]\tag{110}

SNR表示原始信号与噪声之间的比值,在扩散中我们需要SNR随着t的增加而减小,于是可以表示为:

SNR(t)=exp(ωη(t))(111)\mathrm{SNR}(t)=exp(-\omega_\eta(t))\tag{111}

ωη(t)\omega_\eta(t) 是一个单调递增的NN,于是结合以上的式子就可以优雅的表示 αˉt\bar\alpha_t 以及 1αˉt1-\bar\alpha_t 的值:

αˉt1αˉt=exp(ωη(t))(112)\frac{\bar\alpha_t}{1-\bar\alpha_t}=\exp(-\omega_\eta(t))\tag{112}

αˉt=sigmoid(ωη(t))(113)\therefore \bar\alpha_t=sigmoid(-\omega_\eta(t))\tag{113}

1αˉt=sigmoid(ωη(t))(114)\therefore 1-\bar\alpha_t=sigmoid(\omega_\eta(t))\tag{114}

三种等价形式

预测噪声

根据公式 (69)(69)

x0=xt1αˉtϵ0αˉt(115)x_0=\frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_0}{\sqrt{\bar\alpha_t}}\tag{115}

代入到均值 μq(xt,x0)\mu_q(x_t,x_0)

于是近似的均值 μθ(xt,t)\mu_\theta(x_t,t)

μθ(xt,t)=1αtxt1αt1αˉtαtϵ^θ(xt,t)(125)\mu_\theta(x_t,t)=\frac{1}{\sqrt\alpha_t}x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}\sqrt\alpha_t}\hat\epsilon_\theta(x_t,t)\tag{125}

那么优化项就变为:

因此,通过预测原始图像 x0x_0 学习VDM等价于去学习预测噪声,另外,一些工作也发现预测噪声会有更好的表现。

预测分数

Tweedie公式给定从指数族分布中的样本的真实平均值可以通过样本的最大似然估计(经验平均值)加上一些涉及估计分数的校正项得到

E[μzz]=z+Σzzlogp(z)\mathbb E[\mu_z|z]=z+\Sigma_z\nabla_z\log p(z)

在VDM里面,通常被用来减少样本的偏差,如果观测样本都在潜在分布的一端,那么负的分数将会变大并且校正原始的样本的最大似然估计为正确的均值。我们使用它来预测给定后验器样本后的 xtx_t 的真实均值,我们知道:q(xtx0)=N(xt;αˉtx0,(1αˉt)I)q(x_t|x_0)=\mathcal N(x_t;\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)\mathbf I) ,于是根据 Tweedie公式:

E[μxtxt]=xt+(1αˉt)xtlogp(xt)(131)\mathbb E[\mu_{x_t}|x_t]=x_t+(1-\bar\alpha_t)\nabla_{x_t}\log p(x_t)\tag{131}

于是:

αˉtx0=xt+(1αˉt)logp(xt)(132)\sqrt{\bar\alpha_t}x_0=x_t+(1-\bar\alpha_t)\nabla\log p(x_t)\tag{132}

x0=xt+(1αˉt)logp(xt)αˉt(133)\therefore x_0=\frac{x_t+(1-\bar\alpha_t)\nabla\log p(x_t)}{\sqrt{\bar\alpha_t}}\tag{133}

再次代入到均值 μq(xt,x0)\mu_q(x_t,x_0)

于是近似的均值 μθ(xt,t)\mu_\theta(x_t,t)

μθ(xt,t)=1αtxt+1αtαtsθ(xt,t)(143)\mu_\theta(x_t,t)=\frac{1}{\sqrt\alpha_t}x_t+\frac{1-\alpha_t}{\sqrt\alpha_t}s_\theta(x_t,t)\tag{143}

那么优化项就变为:

在这里,sθ(xt,t)s_\theta(x_t,t) 是一个NN用来学习预测分数函数 xtlogp(xt)\nabla_{x_t}\log p(x_t) ,也就是在任意噪声水平 tt 下, xtx_t 在数据空间中的梯度

二者联系

可以看到,两者之间存在一个随时间变化的常数因子!分数函数衡量应该在数据空间中如何移动来最大化对数似然;

“intuitively, since the source noise is added to a natural image to corrupt it, moving in its opposite direction “denoises” the image and would be the best update to increase the subsequent log probability.” (Luo, 2022, p. 17) 🔤直观上,由于源噪声被添加到自然图像中以破坏它,因此沿其相反方向移动会对图像进行“去噪”,并且将是增加后续对数概率的最佳更新。🔤

于是,学习建模分数函数就等价于建模原噪声的负值(乘上一个比例因子)

因此,我们有三种等价目标:预测原始图像 x0x_0 、源噪声 ϵ0\epsilon_0 、任意噪声水平时的图像的分数 logp(x0)\nabla\log p(x_0)

参考

[1] Z. Luo, F. K. Gustafsson, Z. Zhao, J. Sjölund, and T. B. Schön, “Image Restoration with Mean-Reverting Stochastic Differential Equations.” arXiv, May 31, 2023. Accessed: Nov. 13, 2023. [Online]. Available: http://arxiv.org/abs/2301.11699


Understanding Diffusion Models
https://summerwrain.github.io/2023/11/13/Understanding diffusion/
作者
SummerRain
发布于
2023年11月13日
许可协议