Diffusion模型详解
1 引言
在上一篇《基于流的深度生成模型》中详解介绍了有关流的生成模型理论和方法。目前为止,基于GAN生成模型,基于VAE的生成模型,以及基于flow的生成模型它们都可以生成较高质量的样本,但每种方法都有其局限性。GAN在对抗训练过程中会出现模式崩塌和训练不稳定的问题;VAE则严重依赖于目标损失函数;流模型则必须使用专门的框架来构建可逆变换。本文主要介绍关于扩散模型,其灵感来自于非平衡热力学。它们定义了扩散步骤的马尔可夫链,将随机噪声缓慢地添加到数据中,然后学习逆向扩散过程以从噪声中构造所需的数据样本。 与VAE或流模型不同,扩散模型是通过固定过程学习的,并且中间的隐变量与原始数据具有高维数维度。
- 优点: 扩散模型既易于分析又很灵活。要知道易处理性和灵活性是生成建模中两个相互冲突的目标。易于处理的模型可以进行分析评估和拟合数据,但它们不能轻易地描述丰富数据集中的结构。灵活的模型可以拟合数据中的任意结构,但是从这些模型中评估、训练或采样的成本会很高。
- 缺点: 扩散模型依赖于长马尔可夫扩散步骤链来生成样本,因此在时间和计算方面成本会很高。目前已经提出了新的方法来使该过程更快,但采样的整体过程仍然比GAN慢。
2 前向扩散过程
给定从真实数据分布x0∼q(x){\bf{x}}_0\sim q({\bf{x}})x0∼q(x)中采样的数据点,在一个前向扩散过程,在TTT步里逐步向样本中添加少量高斯噪声,从而产生一系列噪声样本x1,⋯,xT{\bf{x}}_1,\cdots,{\bf{x}}_Tx1,⋯,xT,其步长由方差计划{βt∈(0,1)}t=1T\{\beta_t\in(0,1)\}_{t=1}^T{βt∈(0,1)}t=1T来控制,则有q(xt∣xt−1)=N(xt;1−βxt−1,βtI)q(x1:T∣x0)=∏t=1Tq(xt∣xt−1)q({\bf{x}}_t|{\bf{x}}_{t-1})=\mathcal{N}({\bf{x}}_t;\sqrt{1-\beta}{\bf{x}}_{t-1},\beta_t {\bf{I}})\quad q({\bf{x}}_{1:T}|{\bf{x}}_0)=\prod_{t=1}^Tq({\bf{x}}_t|{\bf{x}}_{t-1})q(xt∣xt−1)=N(xt;1−βxt−1,βtI)q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)在扩散过程进行的时候,随着时长步长ttt的增大,数据样本x0{\bf{x}}_0x0逐渐失去其可区分的特征。最终,当T→∞T\rightarrow \inftyT→∞, xT{\bf{x}}_TxT等价于各向同性高斯分布(各向同性的高斯分布即球形高斯分布,特指的是各个方向方差都一样的多维高斯分布,协方差为正实数与单位矩阵相乘)。
上述过程的一个很好的特性是可以使用重新参数化技巧以封闭形式在任意时间步长ttt对xt{\bf{x}}_txt进行采样。 令αt=1−βt\alpha_t=1-\beta_tαt=1−βt和αˉt=∏i=1Tαi\bar{\alpha}_t=\prod_{i=1}^T \alpha_iαˉt=∏i=1Tαi,进而则有:xt=αtxt−1+1−αtzt−1=αtαt−1xt−2+1−αtαt−1zˉt−2=⋯=αˉtx0+1−αˉtzq(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)\begin{aligned}{\bf{x}}_t&=\sqrt{\alpha_t}{\bf{x}}_{t-1}+\sqrt{1-\alpha_t}{\bf{z}}_{t-1}\\&=\sqrt{\alpha_t\alpha_{t-1}}{\bf{x}}_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}{\bf{\bar{z}}}_{t-2}\\&=\cdots\\&=\sqrt{\bar{\alpha}_t}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_t}{\bf{z}}\\q({\bf{x}}_t|{\bf{x}}_0)&=\mathcal{N}({\bf{x}}_t;\sqrt{\bar{\alpha}_t}{\bf{x}}_0,(1-\bar{\alpha}_t){\bf{I}})\end{aligned}xtq(xt∣x0)=αtxt−1+1−αtzt−1=αtαt−1xt−2+1−αtαt−1zˉt−2=⋯=αˉtx0+1−αˉtz=N(xt;αˉtx0,(1−αˉt)I)其中zt−1,zt−2,⋯∼N(0,I){\bf{z}}_{t-1},{\bf{z}}_{t-2},\cdots \sim\mathcal{N}({\bf{0}},{\bf{I}})zt−1,zt−2,⋯∼N(0,I),zˉt−2{\bar{\bf{z}}}_{t-2}zˉt−2融合两个高斯分布。当合并两个具有不同方差N(0,σ12I)\mathcal{N}({\bf{0}},\sigma^2_1{\bf{I}})N(0,σ12I)和N(0,σ22I)\mathcal{N}({\bf{0}},\sigma^2_2{\bf{I}})N(0,σ22I)的高斯分布时,得到的新的高斯分布是N(0,(σ12,σ22)I)\mathcal{N}({\bf{0}},(\sigma^2_1,\sigma_2^2){\bf{I}})N(0,(σ12,σ22)I),其中合并的标准差为(1−αt)+αt(1−αt−1)=1−αtαt−1\sqrt{(1-\alpha_t)+\alpha_t(1-\alpha_{t-1})}=\sqrt{1-\alpha_{t}\alpha_{t-1}}(1−αt)+αt(1−αt−1)=1−αtαt−1通常情况下,噪声越大更新的步长也会随着调大,则有β1<β2⋯<βT\beta_1<\beta_2\cdots<\beta_Tβ1<β2⋯<βT,所以αˉ1>⋯>αˉT\bar{\alpha}_1>\cdots>\bar{\alpha}_Tαˉ1>⋯>αˉT。
3 更新过程
Langevin动力学是物理学中的一个概念,用于对分子系统进行统计建模。结合随机梯度下降,随机梯度朗之万动力学可以仅使用马尔可夫更新链中的梯度∇xlogp(x)\nabla_{\bf{x}} \log p({\bf{x}})∇xlogp(x)从概率密度p(x)p({\bf{x}})p(x)生成样本:xt=xt−1+ϵ2∇xlogp(xt−1)+ϵzt,zt∼N(0,I){\bf{x}}_t={\bf{x}}_{t-1}+\frac{\epsilon}{2}\nabla_{\bf{x}} \log p({\bf{x}}_{t-1})+\sqrt{\epsilon}{\bf{z}}_t,\quad {\bf{z}}_t\sim\mathcal{N}({\bf{0}},{\bf{I}})xt=xt−1+2ϵ∇xlogp(xt−1)+ϵzt,zt∼N(0,I)其中ϵ\epsilonϵ为步长。当T→∞T\rightarrow \inftyT→∞时,ϵ→0\epsilon\rightarrow 0ϵ→0,x{\bf{x}}x_T则等于真实概率密度p(x)p({\bf{x}})p(x)。与标准SGD相比,随机梯度Langevin动力学将高斯噪声注入到参数更新中,以避免陷入到局部最小值中。
4 反向扩散过程
如果将上述过程进行反转并从概率分布q(xt−1∣xt)q({\bf{x}}_{t-1}|{\bf{x}}_t)q(xt−1∣xt)中进行采样,则能够从高斯噪声输入xT∼N(0,I){\bf{x}}_T\sim \mathcal{N}({\bf{0}},{\bf{I}})xT∼N(0,I)中重新构造真实样本。需要注意的是如果βt\beta_tβt足够小,q(xt−1,xt)q({\bf{x}}_{t-1},{\bf{x}}_t)q(xt−1,xt)也将是高斯分布。但这需要使用整个数据集进行估计,因此需要学习一个模型pθp_\thetapθ来近似这些条件概率,以便进行反向扩散过程pθ(x0:T)=p(xT)∏t=1Tpθ(xt−1∣xt)pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))p_\theta({\bf{x}}_{0:T})=p({\bf{x}}_T)\prod_{t=1}^T p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)\quad p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}_\theta({\bf{x}}_t,t),{{\bf{\Sigma}}_\theta({\bf{x}}_t,t)})pθ(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt)pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))当条件为x0{\bf{x}}_0x0时,反向条件概率是容易估计处理的:q(xt−1∣xt,x0)=N(xt−1;μ(xt,x0),β~tI)q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}({\bf{x}}_t,{\bf{x}}_0),\tilde{\beta}_t{\bf{I}})q(xt−1∣xt,x0)=N(xt−1;μ(xt,x0),β~tI)使用贝叶斯法则可以得到q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)∝exp[−12((xt−αtxt−1)2βt+(xt−1−αˉt−1x0)21−αˉt−1−(xt−αˉtx0)21−αˉt)]=exp[−12(xt2−2αtxtxt−1+αtxt−12βt+xt−12−2αˉt−1x0xt−1+αˉt−1x01−αˉt−1−(xt−αˉtx0)21−αˉt)]=exp[−12((αtβt+11−αˉt−1)xt−12−(2αtβtxt+2αˉt−11−αˉt−1x0)xt−1+C(xt,x0))]\begin{aligned}q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)&=q({\bf{x}}_{t}|{\bf{x}}_{t-1},{\bf{x}}_0)\frac{q({\bf{x}}_{t-1}|{\bf{x}}_0)}{q({\bf{x}}_t|{\bf{x}}_0)}\\&\propto\exp\left[-\frac{1}{2}\left(\frac{({\bf{x}}_t-\sqrt{\alpha_t}{\bf{x}}_{t-1})^2}{\beta_t}+\frac{({\bf{x}}_{t-1}-\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0)^2}{1-\bar{\alpha}_{t-1}}-\frac{({\bf{x}}_t-\sqrt{\bar{\alpha}_t}{\bf{x}}_0)^2}{1-\bar{\alpha}_t}\right)\right]\\&=\exp\left[-\frac{1}{2}\left(\frac{{\bf{x}}^2_t-2\sqrt{\alpha_t}{\bf{x}}_t{\bf{x}}_{t-1}+\alpha_t{\bf{x}}_{t-1}^2}{\beta_t}+\frac{{\bf{x}}_{t-1}^2-2\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0{\bf{x}}_{t-1}+\bar{\alpha}_{t-1}{\bf{x}}_0}{1-\bar{\alpha}_{t-1}}-\frac{({\bf{x}}_t-\sqrt{\bar{\alpha}_t}{\bf{x}}_0)^2}{1-\bar{\alpha}_t}\right)\right]\\&=\exp\left[-\frac{1}{2}\left(\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar{\alpha}_{t-1}}\right){\bf{x}}^2_{t-1}-\left(\frac{2\sqrt{\alpha_t}}{\beta_t}{\bf{x}}_t+\frac{2\sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}}{\bf{x}}_0\right){\bf{x}}_{t-1}+C({\bf{x}}_t,{\bf{x}}_0)\right)\right]\end{aligned}q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)∝exp[−21(βt(xt−αtxt−1)2+1−αˉt−1(xt−1−αˉt−1x0)2−1−αˉt(xt−αˉtx0)2)]=exp[−21(βtxt2−2αtxtxt−1+αtxt−12+1−αˉt−1xt−12−2αˉt−1x0xt−1+αˉt−1x0−1−αˉt(xt−αˉtx0)2)]=exp[−21((βtαt+1−αˉt−11)xt−12−(βt2αtxt+1−αˉt−12αˉt−1x0)xt−1+C(xt,x0))]其中C(xt,x0)C({\bf{x}}_t,{\bf{x}}_0)C(xt,x0)函数与xt−1{\bf{x}}_{t-1}xt−1无关。按照标准高斯密度函数,均值和方差可以参数化如下β~t=1/(αtβt+11−αˉt−1)=1/(αt−αˉt+βtβt(1−αˉt−1))=1−αˉt−11−αˉt⋅βtμ~t(xt,x0)=(αtβtxt+αˉt−11−αˉt−1x0)/(αtβt+11−αˉt−1)=(αtβtxt+αˉt−11−αˉt−1x0)1−αˉt−11−αˉt⋅βt=αt(1−αˉt−1)1−αˉtxt+αˉt−1βt1−αˉtx0\begin{aligned}\tilde{\beta}_t&=1\left/\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar{\alpha}_{t-1}}\right)\right.=1\left/\left(\frac{\alpha_t-\bar{\alpha}_t+\beta_t}{\beta_t(1-\bar{\alpha}_{t-1})}\right)\right.=\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\cdot \beta_t\\\tilde{\boldsymbol{\mu}}_t({\bf{x}}_t,{\bf{x}}_0)&=\left(\frac{\sqrt{\alpha}_t}{\beta_t}{\bf{x}}_t+\frac{\sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}}{\bf{x}}_0\right)\left/\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar{\alpha}_{t-1}}\right)\right.\\&=\left(\frac{\sqrt{\alpha}_t}{\beta_t}{\bf{x}}_t+\frac{\sqrt{\bar{\alpha}_{t-1}}}{1-\bar{\alpha}_{t-1}}{\bf{x}}_0\right)\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\cdot\beta_t\\&=\frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}{\bf{x}}_t+\frac{\sqrt{\bar{\alpha}_{t-1}\beta_t}}{1-\bar{\alpha}_t}{\bf{x}}_0\end{aligned}β~tμ~t(xt,x0)=1/(βtαt+1−αˉt−11)=1/(βt(1−αˉt−1)αt−αˉt+βt)=1−αˉt1−αˉt−1⋅βt=(βtαtxt+1−αˉt−1αˉt−1x0)/(βtαt+1−αˉt−11)=(βtαtxt+1−αˉt−1αˉt−1x0)1−αˉt1−αˉt−1⋅βt=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1βtx0将x0=1αˉt(xt−1−αˉtzt){\bf{x}}_0=\frac{1}{\sqrt{\bar{\alpha}_t}}({\bf{x}}_t-\sqrt{1-\bar{\alpha}_t}{\bf{z}}_t)x0=αˉt1(xt−1−αˉtzt)带入到以上公式中则有μ~t=αt(1−αˉt−1)1−αˉtxt+αˉt−1βt1−αˉt1αˉt(xt−1−αˉtzt)=1αt(xt−βt1−αˉtzt)\begin{aligned}\boldsymbol{\tilde{\mu}}_t&=\frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}{\bf{x}}_t+\frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}\frac{1}{\sqrt{\bar{\alpha}_t}}({\bf{x}}_t-\sqrt{1-\bar{\alpha}_t}{\bf{z}}_t)\\&=\frac{1}{\sqrt{\alpha_t}}\left({\bf{x}}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}{\bf{z}}_t\right)\end{aligned}μ~t=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1βtαˉt1(xt−1−αˉtzt)=αt1(xt−1−αˉtβtzt)这种设置与VAE非常相似,因此可以使用变分下限来优化负对数似然,进而则有−logpθ(x0)≤−logpθ(x0)+DKL(q(x1:T)∣x0∣∣pθ(x1:T∣x0))=−logpθ(xθ)+E1:T∼q(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)/pθ(x0)]=−logpθ(x0)+Eq[logq(x1:T∣x0)pθ(x0:T)+logpθ(x0)]=Eq[logq(x1:T∣x0)pθ(x0:T)]LVLB=Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]≥−Eq(x0)logpθ(x0)\begin{aligned}-\log p_\theta({\bf{x}}_0)&\le -\log p_\theta({\bf{x}}_0)+D_{\mathrm{KL}}(q({\bf{x}}_{1:T})|{\bf{x}}_0||p_\theta({\bf{x}}_{1:T}|{\bf{x}}_0))\\&=-\log p_\theta({\bf{x}}_\theta)+\mathbb{E}_{1:T\sim q({\bf{x}}_{1:T}|{\bf{x}}_0)}\left[\log \frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})/p_\theta({\bf{x}}_0)}\right]\\&=-\log p_\theta({\bf{x}}_0)+\mathbb{E}_q\left[\log \frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})}+\log p_\theta ({\bf{x}}_0)\right]\\&=\mathbb{E}_q\left[\log \frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})}\right]\\L_{\mathrm{VLB}}&=\mathbb{E}_{q({\bf{x}}_{0:T})}\left[\log \frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})}\right]\ge -\mathbb{E}_{q({\bf{x}}_0)}\log p_\theta({\bf{x}}_0)\end{aligned}−logpθ(x0)LVLB≤−logpθ(x0)+DKL(q(x1:T)∣x0∣∣pθ(x1:T∣x0))=−logpθ(xθ)+E1:T∼q(x1:T∣x0)[logpθ(x0:T)/pθ(x0)q(x1:T∣x0)]=−logpθ(x0)+Eq[logpθ(x0:T)q(x1:T∣x0)+logpθ(x0)]=Eq[logpθ(x0:T)q(x1:T∣x0)]=Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)]≥−Eq(x0)logpθ(x0)使用Jensen不等式也很容易得到相同的结果。假设要最小化交叉熵作为学习目标,则有LCE=−Eq(x0)logpθ(x0)=−Eq(x0)log(∫pθ(x0:T)dx1:T)=−Eq(x0)log(∫q(x1:T∣x0)pθ(x0:T)q(x1:T∣x0)dx1:T)=−Eq(x0)log(Eq(x1:T∣x0)pθ(x0:T)q(x1:T∣x0))≤−Eq(x0:T)logpθ(x0:T)q(x1:T∣x0)=Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]=LVTB\begin{aligned}L_{\mathrm{CE}}&=-\mathbb{E}_{q({\bf{x}}_0)}\log p_\theta({\bf{x}}_0)\\&=-\mathbb{E}_{q({\bf{x}}_0)}\log\left(\int p_\theta({\bf{x}}_{0:T})d {\bf{x}}_{1:T}\right)\\&=-\mathbb{E}_{q({\bf{x}}_0)}\log\left(\int q({\bf{x}}_{1:T}|{\bf{x}}_0)\frac{p_\theta({\bf{x}}_{0:T})}{q({\bf{x}}_{1:T}|{\bf{x}}_0)}d{\bf{x}}_{1:T}\right)\\&=-\mathbb{E}_{q({\bf{x}}_0)}\log\left(\mathbb{E}_{q({\bf{x}}_{1:T}|{\bf{x}}_0)}\frac{p_\theta({\bf{x}}_{0:T})}{q({\bf{x}}_{1:T}|{\bf{x}}_0)}\right)\\ &\le -\mathbb{E}_{q({\bf{x}}_{0:T})}\log\frac{p_\theta({\bf{x}}_{0:T})}{q({\bf{x}}_{1:T}|{\bf{x}}_0)}\\&=\mathbb{E}_{q({\bf{x}}_{0:T})}\left[\log\frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})}\right]=L_{\mathrm{VTB}}\end{aligned}LCE=−Eq(x0)logpθ(x0)=−Eq(x0)log(∫pθ(x0:T)dx1:T)=−Eq(x0)log(∫q(x1:T∣x0)q(x1:T∣x0)pθ(x0:T)dx1:T)=−Eq(x0)log(Eq(x1:T∣x0)q(x1:T∣x0)pθ(x0:T))≤−Eq(x0:T)logq(x1:T∣x0)pθ(x0:T)=Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)]=LVTB为了将方程中的每个项转换为可解析计算的,可以将目标进一步重写为几个KL散度和熵项的组合LTVB=Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]=Eq[log∏t=1Tq(xt∣xt−1)pθ(xT)∏t=1Tpθ(xt−1∣p(xt))]=Eq[−logpθ(xT)+∑t=1Tlogq(xt∣xt−1)pθ(xt−1∣xt)]=Eq[−logpθ(xT)+∑t=2Tlogq(xt∣xt−1)pθ(xt−1∣xt)+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logpθ(xT)+∑t=2Tlog(q(xt−1∣xt,x0)pθ(xt−1∣xt)⋅q(xt∣x0)q(xt−1∣x0))+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logpθ(xT)+∑t=2Tlogq(xt−1∣xt,x0)pθ(xt−1∣xt)+∑t=2Tlogq(xt∣x0)q(xt−1∣x0)+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logpθ(xT)+∑t=2Tlogq(xt−1∣xt,x0)pθ(xt−1∣xt)+logq(xT∣x0)q(x1∣x0)+logq(x1∣x0)pθ(x∣x1)]=Eq[logq(xT∣x0)pθ(xT)+∑t=2Tlogq(xt−1∣xt,x0)pθ(xt−1∣xt)−logpθ(x0∣x1)]=Eq[DKL(q(xT∣x0)∣∣pθ(xT))+∑t=2TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))−logpθ(x0∣x1)]\begin{aligned}L_{\mathrm{TVB}}&=\mathbb{E}_{q({\bf{x}}_{0:T})}\left[\log \frac{q({\bf{x}}_{1:T}|{\bf{x}}_0)}{p_\theta({\bf{x}}_{0:T})}\right]\\&=\mathbb{E}_q\left[\log\frac{\prod_{t=1}^T q({\bf{x}}_t|{\bf{x}}_{t-1})}{p_\theta({\bf{x}}_T)\prod_{t=1}^T p_\theta({\bf{x}}_{t-1}|p({\bf{x}}_t))}\right]\\&=\mathbb{E}_q\left[-\log p_\theta({\bf{x}}_T)+\sum\limits_{t=1}^T\log \frac{q({\bf{x}}_t|{\bf{x}}_{t-1})}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)}\right]\\&=\mathbb{E}_q\left[-\log p_\theta({\bf{x}}_T)+\sum\limits_{t=2}^T \log\frac{q({\bf{x}}_{t}|{\bf{x}}_{t-1})}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_{t})}+\log\frac{q({\bf{x}}_1|{\bf{x}}_0)}{p_\theta({\bf{x}}_0|{\bf{x}}_1)}\right]\\&=\mathbb{E}_q\left[-\log p_\theta({\bf{x}}_T)+\sum\limits_{t=2}^T\log\left(\frac{q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)}\cdot\frac{q({\bf{x}}_t|{\bf{x}}_0)}{q({\bf{x}}_{t-1}|{\bf{x}}_0)}\right)+\log\frac{q({\bf{x}}_1|{\bf{x}}_0)}{p_\theta({\bf{x}}_0|{\bf{x}}_1)}\right]\\&=\mathbb{E}_q\left[-\log p_\theta({\bf{x}}_T)+\sum\limits_{t=2}^T\log \frac{q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)}+\sum\limits_{t=2}^T\log \frac{q({\bf{x}}_t|{\bf{x}}_0)}{q({\bf{x}}_{t-1}|{\bf{x}}_0)}+\log \frac{q({\bf{x}}_1|{\bf{x}}_0)}{p_\theta({\bf{x}}_0|{\bf{x}}_1)}\right]\\&=\mathbb{E}_q\left[-\log p_\theta({\bf{x}}_T)+\sum\limits_{t=2}^T\log \frac{q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)}+\log\frac{q({\bf{x}}_T|{\bf{x}}_0)}{q({\bf{x}}_1|{\bf{x}}_0)}+\log \frac{q({\bf{x}}_1|{\bf{x}}_0)}{p_\theta({\bf{x}}|{\bf{x}}_1)}\right]\\&=\mathbb{E}_q\left[\log \frac{q({\bf{x}}_T|{\bf{x}}_0)}{p_\theta({\bf{x}}_T)}+\sum\limits_{t=2}^T\log \frac{q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)}{p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)}-\log p_\theta({\bf{x}}_0|{\bf{x}}_1)\right]\\&=\mathbb{E}_q\left[D_{\mathrm{KL}}(q({\bf{x}}_T|{\bf{x}}_0)||p_\theta({\bf{x}}_T))+\sum\limits_{t=2}^T D_{\mathrm{KL}}(q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)||p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t))-\log p_\theta({\bf{x}}_0|{\bf{x}}_1)\right]\end{aligned}LTVB=Eq(x0:T)[logpθ(x0:T)q(x1:T∣x0)]=Eq[logpθ(xT)∏t=1Tpθ(xt−1∣p(xt))∏t=1Tq(xt∣xt−1)]=Eq[−logpθ(xT)+t=1∑Tlogpθ(xt−1∣xt)q(xt∣xt−1)]=Eq[−logpθ(xT)+t=2∑Tlogpθ(xt−1∣xt)q(xt∣xt−1)+logpθ(x0∣x1)q(x1∣x0)]=Eq[−logpθ(xT)+t=2∑Tlog(pθ(xt−1∣xt)q(xt−1∣xt,x0)⋅q(xt−1∣x0)q(xt∣x0))+logpθ(x0∣x1)q(x1∣x0)]=Eq[−logpθ(xT)+t=2∑Tlogpθ(xt−1∣xt)q(xt−1∣xt,x0)+t=2∑Tlogq(xt−1∣x0)q(xt∣x0)+logpθ(x0∣x1)q(x1∣x0)]=Eq[−logpθ(xT)+t=2∑Tlogpθ(xt−1∣xt)q(xt−1∣xt,x0)+logq(x1∣x0)q(xT∣x0)+logpθ(x∣x1)q(x1∣x0)]=Eq[logpθ(xT)q(xT∣x0)+t=2∑Tlogpθ(xt−1∣xt)q(xt−1∣xt,x0)−logpθ(x0∣x1)]=Eq[DKL(q(xT∣x0)∣∣pθ(xT))+t=2∑TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))−logpθ(x0∣x1)]分别标记变分下界损失中的每个分量为LVLB=LT+LT−1+⋯+L0LT=DKL(q(xT∣x0)∣∣pθ(xT))Lt=DKL(q(xt∣xt+1,x0)∣∣pθ(xt∣xt+1))L0=−logpθ(x0∣x1)\begin{aligned}L_{\mathrm{VLB}}&=L_T+L_{T-1}+\cdots+L_{0}\\L_T&=D_{\mathrm{KL}}(q({\bf{x}}_T|{\bf{x}}_0)||p_\theta({\bf{x}}_T))\\L_t&=D_{\mathrm{KL}}(q({\bf{x}}_t|{\bf{x}}_{t+1},{\bf{x}}_0)||p_\theta({\bf{x}}_t|{\bf{x}}_{t+1}))\\L_0&=-\log p_\theta({\bf{x}}_0|{\bf{x}}_1)\end{aligned}LVLBLTLtL0=LT+LT−1+⋯+L0=DKL(q(xT∣x0)∣∣pθ(xT))=DKL(q(xt∣xt+1,x0)∣∣pθ(xt∣xt+1))=−logpθ(x0∣x1)LVLBL_{\mathrm{VLB}}LVLB中的每个KL项(除了L0L_0L0)都测量两个高斯分布之间的距离,因此可以以闭式解来计算它们。LTL_TLT是常数,在训练过程中可以被忽略,其原因在于qqq没有可学习的参数并且xT{\bf{x}}_TxT是高斯噪声,L0L_0L0可以从N(x0,μθ(x1,1),Σθ(x1,1)\mathcal{N({\bf{x}}_0,\boldsymbol{\mu}_\theta({\bf{x}}_1,1),{\bf{\Sigma}}_\theta({\bf{x}}_1,1)}N(x0,μθ(x1,1),Σθ(x1,1)中推导出来。
5 训练损失的参数化
当需要学习一个神经网络来逼近反向扩散过程中的条件概率分布pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))p_\theta({\bf{x}}_{t-1}|{\bf{x}}_t)=\mathcal{N}({\bf{x}}_{t-1};\boldsymbol{\mu}_\theta({\bf{x}}_t,t),{\bf{\Sigma}}_\theta({\bf{x}}_t,t))pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))时,即想训练μθ\boldsymbol{\mu}_\thetaμθ预测μ~t=1αt(x−βt1−αˉtzt)\tilde{\boldsymbol{\mu}}_t=\frac{1}{\sqrt{\alpha_t}}\left({\bf{x}}-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}{\bf{z}}_t\right)μ~t=αt1(x−1−αˉtβtzt)。 因为xt{\bf{x}}_txt在训练时可用作输入,可以重新参数化高斯噪声项,以使其从时间步长ttt的输入xt{\bf{x}}_txt中预测zt{\bf{z}}_tzt:
μθ(xt,t)=1αt(xt−βt1−αˉtzθ(xt,t))xt−1=N(xt−1;1αt(xt−βt1−αˉtzθ(xt,t)),Σθ(xt,t))\begin{aligned}{\boldsymbol{\mu}}_\theta({\bf{x}}_t,t)&=\frac{1}{\sqrt{\alpha_t}}\left({\bf{x}}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}{\bf{z}}_\theta({\bf{x}}_t,t)\right)\\{\bf{x}}_{t-1}&=\mathcal{N}\left({\bf{x}}_{t-1};\frac{1}{\sqrt{\alpha_t}}\left({\bf{x}}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}{\bf{z}}_\theta({\bf{x}}_t,t)\right),{\bf{\Sigma}}_\theta({\bf{x}}_t,t)\right)\end{aligned}μθ(xt,t)xt−1=αt1(xt−1−αˉtβtzθ(xt,t))=N(xt−1;αt1(xt−1−αˉtβtzθ(xt,t)),Σθ(xt,t))损失项LtL_tLt是被参数化目的是最小化来自μ~\tilde{\boldsymbol{\mu}}μ~的差异Lt=Ex0,z[12∥Σθ(xt,t)∥22∥μ~t(xt,x0)−μθ(xt,t)∥2]=Ex0,z[12∥Σθ∥22∥1αt(xt−βt1−αˉz)−1αt(xt−βt1−αˉzθ(xt,t))∥]=Ex0,z[βt22αt(1−αˉt)∥Σθ∥22∥zt−zθ(xt,t)∥2]=Ex0,z[βt22αt(1−αˉt)∥Σθ∥22∥zt−zθ(αˉtx0+1−αˉtzt,t)∥2]\begin{aligned}L_t&=\mathbb{E}_{{\bf{x}}_0,{\bf{z}}}\left[\frac{1}{2\|{\bf{\Sigma}}_\theta({\bf{x}}_t,t)\|_2^2}\|\tilde{\boldsymbol{\mu}}_t({\bf{x}}_t,{\bf{x}}_0)-{\boldsymbol{\mu}}_\theta({\bf{x}}_t,t)\|^2\right]\\&=\mathbb{E}_{{\bf{x}}_0,{\bf{z}}}\left[\frac{1}{2\|{\bf{\Sigma}}_\theta\|_2^2}\left\|\frac{1}{\sqrt{\alpha}_t}\left({\bf{x}}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}}}{\bf{z}}\right)-\frac{1}{\sqrt{\alpha}_t}\left({\bf{x}}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}}}{\bf{z}}_\theta({\bf{x}}_t,t)\right)\right\|\right]\\&=\mathbb{E}_{{\bf{x}}_0,{\bf{z}}}\left[\frac{\beta^2_t}{2\alpha_t(1-\bar{\alpha}_t)\|{\bf{\Sigma}}_\theta\|_2^2}\|{\bf{z}}_t-{\bf{z}}_\theta({\bf{x}}_t,t)\|^2\right]\\&=\mathbb{E}_{{\bf{x}}_0,{\bf{z}}}\left[\frac{\beta^2_t}{2\alpha_t(1-\bar{\alpha}_t)\|{\bf{\Sigma}}_\theta\|_2^2}\|{\bf{z}}_t-{\bf{z}}_\theta(\sqrt{\bar{\alpha}_t}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_t}{\bf{z}}_t,t)\|^2\right]\end{aligned}Lt=Ex0,z[2∥Σθ(xt,t)∥221∥μ~t(xt,x0)−μθ(xt,t)∥2]=Ex0,z[2∥Σθ∥221∥∥∥∥αt1(xt−1−αˉβtz)−αt1(xt−1−αˉβtzθ(xt,t))∥∥∥∥]=Ex0,z[2αt(1−αˉt)∥Σθ∥22βt2∥zt−zθ(xt,t)∥2]=Ex0,z[2αt(1−αˉt)∥Σθ∥22βt2∥zt−zθ(αˉtx0+1−αˉtzt,t)∥2]根据经验Ho等人的经验,发现在忽略加权项的简化目标下,训练扩散模型效果更好:Ltsimple=Ex0,zt[∥zt−zθ(αˉtx0+1−αˉtzt,t)∥2]L^{\mathrm{simple}}_t=\mathbb{E}_{{\bf{x}}_0,{\bf{z}}_t}\left[\|{\bf{z}}_t-{\bf{z}}_\theta(\sqrt{\bar{\alpha}_t}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_t}{\bf{z}}_t,t)\|^2\right]Ltsimple=Ex0,zt[∥zt−zθ(αˉtx0+1−αˉtzt,t)∥2]所以最终简化后的目标函数是:Lsimple=Lsimple+CL_{\mathrm{simple}}=L^{\mathrm{simple}}+CLsimple=Lsimple+C其中CCC是不取决于θ\thetaθ的常数。
6 噪声评分条件网络(NCSN)
Song和Ermon等人提出了一种基于分数的生成建模方法,其中样本是通过Langevin动力学使用分数匹配估计的数据分布梯度生成的。每个样本x\bf{x}x的密度概率得分定义为其梯度∇xlogp(x)\nabla_{\bf{x}}\log p({\bf{x}})∇xlogp(x)。训练一个分数网络sθ:RD→RDs_\theta:\mathbb{R}^D\rightarrow\mathbb{R}^Dsθ:RD→RD来估计它。为了在深度学习设置中使用高维数据使其可扩展,有研究建议使用去噪分数匹配(向数据添加预先指定的小噪声)或切片分数匹配。Langevin动力学可以仅使用迭代过程中的分数从概率密度分布中采样数据点∇xlogp(x)\nabla_{\bf{x}}\log p({\bf{x}})∇xlogp(x)。然而,根据流形假设,大多数数据预计集中在低维流形中,即使观察到的数据可能看起来只是任意高维。由于数据点无法覆盖整个空间RD\mathbb{R}^DRD,因此对分数估计产生了负面影响。在数据密度低的区域,分数估计不太可靠。添加一个小的高斯噪声使扰动的数据分布覆盖整个空间后,分数评估网络的训练变得更加稳定。 Song和Ermon等人通过用不同级别的噪声扰动数据来改进它,并训练一个噪声条件评分网络来共同估计所有扰动数据在不同噪声级别下的分数。
7 βt\beta_tβt和Σθ{\bf{\Sigma}}_\thetaΣθ的参数化
参数化βt\beta_tβt的过程中,Ho等人将前向方差被设置为一系列线性增加的常数,从β1=10−4\beta_1=10^{-4}β1=10−4到βT=0.02\beta_T=0.02βT=0.02。与[−1,1][-1,1][−1,1]之间的归一化图像像素值相比,它们相对较小。在此设置下实验中的扩散模型生成了高质量的样本,但仍然无法像其他生成模型那样实现具有竞争力。Nichol和Dhariwal等人提出了几种改进技术来帮助扩散模型获得更低的NLL。 其中一项改进是使用基于余弦的方差计划。调度函数的选择可以是任意的,只要它在训练过程的中间提供一个近线性的下降和围绕t=0t=0t=0和t=Tt=Tt=T的细微变化βt=clip(1−αˉtαt−1,0.999)αˉt=f(t)f(0)wheref(t)=cos(t/T+s1+s⋅π2)\beta_t=\mathrm{clip}(1-\frac{\bar{\alpha}_t}{\alpha_{t-1}},0.999)\quad \bar{\alpha}_t=\frac{f(t)}{f(0)} \quad \mathrm{where}\text{ } f(t)=\cos(\frac{t/T+s}{1+s}\cdot \frac{\pi}{2})βt=clip(1−αt−1αˉt,0.999)αˉt=f(0)f(t)where f(t)=cos(1+st/T+s⋅2π)其中当t=0t=0t=0时小偏移量sss是为了防止βt\beta_tβt接近时太小。
参数化Σθ{\bf{\Sigma}}_\thetaΣθ的过程中,Ho等人选择固定βt\beta_tβt为常量,而不是使它们可学习并设置Σθ(xt,t)=σt2I{\bf{\Sigma}}_\theta({\bf{x}}_t,t)=\sigma^2_t{\bf{I}}Σθ(xt,t)=σt2I, 其中σt\sigma_tσt是不可学习的。实验发现学习对角方差Σθ{\bf{\Sigma}}_\thetaΣθ会导致训练不稳定和样本质量下降。Nichol和Dhariwal等人提出将学习Σθ(xt,t){\bf{\Sigma}}_\theta({\bf{x}}_t,t)Σθ(xt,t)作为β\betaβ和β~t\tilde{\beta}_tβ~t之间的插值,通过模型预测混合向量v{\bf{v}}v,则有:Σθ(xt,t)=exp(vlogβt+(1−v)logβ~t){\bf{\Sigma}}_\theta({\bf{x}}_t,t)=\exp({\bf{v}}\log \beta_t+(1-{\bf{v}})\log\tilde{\beta}_t)Σθ(xt,t)=exp(vlogβt+(1−v)logβ~t)简单的目标LsimpleL_{\mathrm{simple}}Lsimple并不依赖于Σθ{\bf{\Sigma}}_\thetaΣθ。为了增加依赖性,他们构建了一个混合目标Lhybrid=Lsimple+λLVLBL_{\mathrm{hybrid}}=L_{\mathrm{simple}}+\lambda L_{\mathrm{VLB}}Lhybrid=Lsimple+λLVLB,其中λ=0.001\lambda=0.001λ=0.001很小并且停止在μθ\boldsymbol{\mu}_\thetaμθ的梯度,以便LVLBL_{\mathrm{VLB}}LVLB仅指导Σθ{\bf{\Sigma}}_\thetaΣθ的学习。可以观察到,由于梯度噪声,优化LVLBL_{\mathrm{VLB}}LVLB是非常困难的,因此他们建议使用具有重要性采样的时间平均平滑版本。
8 加速扩散模型采样
通过遵循反向扩散过程的马尔可夫链从DDPM生成样本非常慢,可能长达一个或几千个步骤。从DDPM中采样500005000050000个大小为32×3232\times3232×32的图像大约需要202020小时,但从Nvidia 2080 Ti GPU上的GAN中采样不到一分钟。一种简单的方法是运行跨步抽样计划,每一步都进行抽样更新,以减少中间的采样过程。对于另一种方法,需要重写qσ(xt∣xt,x0)q_\sigma({\bf{x}}_t|{\bf{x}}_t,{\bf{x}}_0)qσ(xt∣xt,x0)以通过所需的标准偏差σt\sigma_tσt进行参数化:xt−1=αˉt−1x0+1−αˉt−1zt−1=αˉt−1x0+1−αˉt−1−σt2zt+σtz=αˉt−1x0+1−αˉt−1−σt2xt−αˉtx01−αˉt+σtzqσ(xt−1∣xt,x0)=N(xt−1;αˉt−1x0+1−αˉt−1−σt2xt−αˉtx01−αˉt,σt2I)\begin{aligned}{\bf{x}}_{t-1}&=\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_{t-1}}{\bf{z}}_{t-1}\\&=\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_{t-1}-\sigma^2_t{\bf{z}}_t}+\sigma_t{\bf{z}}\\&=\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_{t-1}-\sigma^2_t}\frac{{\bf{x}}_t-\sqrt{\bar{\alpha}_t}{\bf{x}}_0}{\sqrt{1-\bar{\alpha}_t}}+\sigma_t{\bf{z}}\\q_\sigma&({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)=\mathcal{N}\left({\bf{x}}_{t-1};\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_{t-1}-\sigma^2_t}\frac{{\bf{x}}_t-\sqrt{\bar{\alpha}_t}{\bf{x}}_0}{1-\bar{\alpha}_t},\sigma^2_t{\bf{I}}\right)\end{aligned}xt−1qσ=αˉt−1x0+1−αˉt−1zt−1=αˉt−1x0+1−αˉt−1−σt2zt+σtz=αˉt−1x0+1−αˉt−1−σt21−αˉtxt−αˉtx0+σtz(xt−1∣xt,x0)=N(xt−1;αˉt−1x0+1−αˉt−1−σt21−αˉtxt−αˉtx0,σt2I)因为q(xt−1∣xt,x0)=N(xt−1;μ~(xt,x0,β~tI))q({\bf{x}}_{t-1}|{\bf{x}}_t,{\bf{x}}_0)=\mathcal{N}({\bf{x}}_{t-1};\tilde{\boldsymbol{\mu}}({\bf{x}}_t,{\bf{x}}_0,\tilde{\beta}_t{\bf{I}}))q(xt−1∣xt,x0)=N(xt−1;μ~(xt,x0,β~tI)),因此则有β~t=σt2=1−αˉt−11−αˉt⋅βt\tilde{\beta}_t=\sigma^2_t=\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\cdot \beta_tβ~t=σt2=1−αˉt1−αˉt−1⋅βt令σt2=η⋅β~t\sigma^2_t=\eta \cdot \tilde{\beta}_tσt2=η⋅β~t,进而可以通过调整为超参数η∈R+\eta\in \mathbb{R}^{+}η∈R+来控制采样随机性。η=0\eta=0η=0的特殊情况使采样过程具有确定性,这样的模型被命名为去噪扩散隐式模型(DDIM)。DDIM具有相同的边际噪声分布,但确定性地将噪声映射回原始数据样本。在生成过程中,只对扩散步骤的一个子集SSS进行采样为{τ1,⋯,τS}\{\tau_1,\cdots,\tau_S\}{τ1,⋯,τS},推理过程变为:qσ,τ(xτi−1∣xτt,x0)=N(xτi−1;αˉt−1x0+1−αˉt−1−σt2xτi−αˉtx01−αˉt,σt2I)q_{\sigma,\tau}({\bf{x}}_{\tau_{i-1}}|{\bf{x}}_{\tau_t},{\bf{x}}_0)=\mathcal{N}({\bf{x}}_{\tau_{i-1}};\sqrt{\bar{\alpha}_{t-1}}{\bf{x}}_0+\sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\frac{{\bf{x}}_{\tau_i}-\sqrt{\bar{\alpha}_t}{\bf{x}}_0}{\sqrt{1-\bar{\alpha}_t}},\sigma^2_t{\bf{I}})qσ,τ(xτi−1∣xτt,x0)=N(xτi−1;αˉt−1x0+1−αˉt−1−σt21−αˉtxτi−αˉtx0,σt2I)可以观察到DDIM在较小采样数的情况下可以产生最佳质量的样本,而DDPM在较小采样数的情况下表现要差得多。使用 DDIM可以将扩散模型训练到任意数量的前向步骤,但只能从生成过程中的步骤子集进行采样。总结来说,与DDPM相比,DDIM优点如下:
- 使用更少的步骤生成更高质量的样本。
- 由于生成过程是确定性的,因此具有“一致性”属性,这意味着以相同隐变量为条件的多个样本应该具有相似的高级特征。
- 由于一致性,DDIM可以在隐变量中进行语义上有意义的插值。
9 条件生成
在ImageNet数据上训练生成模型时,通常会生成以类标签为条件的样本。为了明确地将类别信息纳入扩散过程,Dhariwal和Nichol对噪声图像xt{\bf{x}}_txt训练了一个分类器fϕ(y∣xt,t)f_\phi(y|{\bf{x}}_t,t)fϕ(y∣xt,t),并使用梯度∇xlogfϕ(y∣xt,t)\nabla_{{\bf{x}}} \log f_{\phi}(y|{\bf{x}}_t,t)∇xlogfϕ(y∣xt,t)来引导扩散采样过程朝向目标类别标签yyy。消融扩散模型 (ADM) 和带有附加分类器引导的模型 (ADM-G) 能够获得比当前最好生成模型(BigGAN)更好的结果。此外,Dhariwal和Nichol等人通过对UNet架构进行一些修改,显示出比具有扩散模型的GAN更好的性能。模型架构修改包括更大的模型深度/宽度、更多注意力头、多分辨率注意力、用于上/下采样的BigGAN残差块、残差连接重新缩放和自适应组归一化 (AdaGN)。
Diffusion模型详解相关推荐
- 使用pickle保存机器学习模型详解及实战(pickle、joblib)
使用pickle保存机器学习模型详解及实战 pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...
- Transformer 模型详解
Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer.Transformer 模型使用了 Self- ...
- TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,
TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化.曾在微软雅虎工作,从事 ...
- TensorFlow Wide And Deep 模型详解与应用
Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中 [1].wide and dee ...
- 数学建模——智能优化之模拟退火模型详解Python代码
数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...
- 数学建模——智能优化之粒子群模型详解Python代码
数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
- 数学建模——一维、二维插值模型详解Python代码
数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...
- 数学建模——线性规划模型详解Python代码
数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...
最新文章
- 告别低分辨率网络,微软提出高分辨率深度神经网络HRNet | CVPR 2019
- Filter 字符编码Filter 一
- java httpclient 异步请求_Java利用httpasyncclient进行异步HTTP请求
- 全球加密货币总市值突破7500亿美元 比特币市值突破5200亿美元
- 关于使用Tomcat服务器出现413错误的解决办法(Request Entity Too Large)
- Ext4中获取下拉框的值
- 机器人挠人脚心_挠同学脚心
- 2018.11.22 mac中允许所有安装来源的命令 Mac窗口标题显示文件的路径
- SSM框架中的Mapper.xml文件中的增、删、改、查等操作
- [内附完整源码和文档] 基于Java的高校科研管理系统
- JAAS和Java GSS-API
- sql盲注 解决_SQL盲注攻击的简单介绍
- 学会这4个Excel实用技巧,数据分析立马高人一等
- scrapy15.0,scrapy.contrib.downloadermiddleware.useragent` is deprecated,旧模块被弃用解决办法.
- Unity3D教程(一)安装以及使用Unity3D
- sencha touch ajax params,sencha touch《实现ajax跨域请求》
- 运筹学上的lingo小练习——秒懂
- 圣诞节快来了~用python做一个粒子烟花震撼众人赚个女孩回来吧~
- 微软打算用DNA存储数据 但成本和速度仍是个大问题
- svn 创建分支、切换分支 及 合并分支 操作
热门文章
- 什么是最优化问题(Optimization Problem)?
- Android开发 - PsyDuck说明书
- spring boot: Whitelabel Error Page(小白的终极解决方案)
- VMware Workstation 虚拟机中的 虚拟机使用Windows 连接共享访问 Internet
- Spark大数据分析与实战:基于Spark MLlib 实现音乐推荐
- AGM FPGA与CPLD烧录说明
- 陈吉平-阿里巴巴离职DBA在35岁总结的职业生涯
- 将 多个空格 替换为一个逗号
- 笔记本不能用无线网策略服务器,笔记本不能上网的解决方法适用于使用无线路由器上网...
- Poly-YOLO keras代码记录