本篇博文主要讲述了 DDPM 及其相关内容。

Background

深度学习发展之快,快到判别任务(e.g. 分类、检测、分割)早就满足不了大家的奇思妙想了,近些年大家都在想,如何用已有的数据去学习建模出相应的数据分布,用得到的分布来生成任意没见过的新样本。

如果设样本为 $X$,它对应的标签变量为 $Y$,判别任务就是学习一个模型得到 $p(Y\mid X)$,从而给出对应的标签(e.g. 取 argmax)。但是如果要做生成任务,直接用如此低维的标签 $Y$ 作为关键变量,想要学习到 $p(X\mid Y)$,用标签生成对应的样本太难了,随机性也太差;如果要考虑随机性,另一种做法是随机生成 $X’$,用判别模型做 $p(Y\mid X’)$,设置一个阈值来过滤出有意义的正确样本 $X’$,但这样太慢,太无章可循。如果有可能的话,直接去学到 $p(X)$,根据它直接生成新样本即可,但这样难度太大了。

所以为了更方便地生成新样本,大家引入了相对高维一点的隐变量空间 $Z$,认为我们观察到的数据分布就是由这个隐变量分布生成的:$p(X)=\sum\limits_{Z} p(X\mid Z)p(Z)$。生成模型希望能够用已有的样本 $X$ 建模出隐变量空间的分布 $p(Z)$(实际上我们拟合的是 $p(Z\mid X)$),再学习出 $Z$ 生成新样本 $X’$ 的能力 $p(X’\mid Z)$,前者称之为 encoder,后者称之为 decoder。如果我们给出一些约束,让 $p(Z)$ 还满足一定的规律进行分布,那我们就能通过这种规律近似对 $p(Z)$ 进行采样,从而直接使用 decoder 进行新样本的生成了。

 

不失一般性地,我们提几个经典的做法:GAN、AE & VAE,在此基础上引出今天的主角扩散模型。

GAN

首先是 GAN。才开始的时候,大家还没有说做 encoder-decoder 范式的想法,不过直观去想生成模型的目标,不就是输入一个任意的随机变量 $z$,让它经过生成网络得到的 $x’\sim G(z)$ 像从真实分布 $p(X)$ 里拿出来的一样就行了吗?于是 GAN 的做法是,对输入的噪声 $z$ 训练生成器 $G(z)$ 生成数据 $x’$,再训一个判别器 $D(x’)$ 让它判别 $x\sim p(X), x’\sim G(Z)$,两者交替训练,一种对抗思想,最终的目标是希望生成器得到的数据能让判别器傻傻分不清楚就可以了。

不过,GAN 这么粗暴的做法,局限性也不小:训练不够稳定、原创性多样性太差、全然隐式生成,不够可控。后面也就提出了更直观的 AE:就如上面所说的 encoder-decoder 想法,AE 直接这样训练,让模型的输出和输入尽量接近,就得到了这样的隐变量空间 $Z$。但是我们不能直接采样 $z\sim p(Z)$,这也就没法随意生成了,所以 AE 的用处主要也是为了学习这样一个 bottleneck feature $z$,用这些 key feature 去做后续的判别任务。

AE & VAE

Referred to: https://spaces.ac.cn/archives/5253

这样一来,后来就提出了 VAE,旨在得到一个可以对手动采样到的 $z$ 进行生成的 decoder。而为了满足能够直接采样出合理的 $z$ 这一点,在 VAE 中我们希望得到的整个隐变量分布 $p(Z)\sim \mathcal{N}(0, \rm{I})$,那么我们直接从标准正态分布中采样即可用来生成合理的图像了。

但是,如何进行训练呢?如果我们假设从 $X_k$ 中得到的后验分布为 $p(Z_k\mid X_k)\sim \mathcal{N}(\mu_k,\sigma_k^2\rm{I})$,最终利用重构损失来优化,当然是极好的:用重参数化技巧,去学习相应的 $\mu,\sigma$, $z=\mu+\sigma·\epsilon, \epsilon\sim \mathcal{N}(0,\rm{I})$ 即可。但是这样,一会导致模型为了更精确地重构而让方差为 0,失去随机性;二这还和我们最开始想要的 $p(Z)\sim \mathcal{N}(0, \rm{I})$ 打不着八竿子关系。怎么办呢?VAE 就让所有的后验分布 $p(Z\mid X)$ 趋近于 $\mathcal{N}(0,\rm{I})$,这样既解决了随机性的困扰,在理想情况下又让 $p(Z)=\sum\limits_{X}p(Z\mid X)p(X)=\sum\limits_{X} \mathcal{N}(0,\mathrm{I}) p(X)=\mathcal{N}(0,\mathrm{I})\sum\limits_{X}p(X)=\mathcal{N}(0,\mathrm{I})$,由此满足了我们希望的假设,放心从标准正态分布中采样就行了。具体地,整体极大似然优化的目标是 $log\ p_\theta(x)$,加上前面的约束项,损失为 $\mathcal{L}\approx KL(N(\mu, \sigma^2)\Arrowvert N(0, \mathrm{I}))+\mathcal{D}(X’, X)^2$。学习的目标就是 $q_\phi(z\mid x), p_\theta(x\mid z)$,其中前者是用来近似真实后验的变分后验。

上面的模型称之单层 VAE,多进行几个隐变量空间的编-解码,称之为多层 VAE (Hierarchical VAE)。当然都做到这一步了,我们当然也希望能根据人为指定的先验信息来生成我们想要的图像(e.g. 对应类别的图像)那么后来有个叫 Conditional VAE 的东西,让对应类的样本对应隐变量分布的均值趋于 $\mu^Y$,也就是说 KL loss 损失函数改为 $KL(N(\mu, \sigma^2)\Arrowvert N(\mu^Y, \mathrm{I}))$,有所区分即可。

我们可以看到,VAE 有其有趣与合理性,但是概率分布的建模目标太局限了,始终受制于标准正态分布的直接约束,导致表达能力太弱,如果将变分后验约束形式选得过于复杂,又难以优化。所以为了给出更多的自由度、让模型的表达能力更强,我们是否可以考虑固定约束形式,避免让模型自己以给定的约束分布去寻找适配的变分后验,而是直接指定 “encode” 为目标分布的过程,而让模型专注于学习这个 “encode” 过程的逆过程(”decode”)呢?于是乎,扩散模型就被提出了。

 

DDPM

Original Paper

Understanding Diffusion Models: A Unified Perspective

我想唱high C 的回答, Zhihu

What are Diffusion Models?, lilianweng’s blogdeep_thoughts 的分享, Bilibili

生成扩散模型漫谈(一), Sujianlin’s blog生成扩散模型漫谈(三), Sujianlin’s blog

Forward Process

对应前文提到的,我们规定隐空间是与原始图像大小一致的噪声空间,那么,DDPM 的目标就是这样的:给出一张噪声图像 $x_T$,送入模型后我们能够得到一张符合目标图像分布的新图像 $x_0$。只不过乍一看,这不就相当于优化一个模型,直接隐式学习到 $p(X)$ 嘛!但在本文开头就说到了,这样一步到位是十分困难的。那么,为了达成这个目标,DDPM 采用的做法是, 一步到位困难,那么我们就把这个过程分解成很多子变换 $x_0=\prod\limits_{t:T\sim 1} \circ f_t(x_T)$,一步一步去学,最终不就能还原出 $x_0$ 了吗?我们如果已经指定了 “encode” 的路径,让模型一步步学这个过程,不就很好了,也就是说,在 DDPM 中,我们通过让模型学习把原图像逐渐变为噪声 $x_0 \rightarrow x_T$ 这一过程的逆向过程,获得最终有效的模型。听起来挺靠谱的,但是感觉难度也很大,如果样本量、训练时长足够的话,说不定也能大力出奇迹。

ddpm

具体地,我们事先做一些假设,以规范化学习过程、简单化采样过程。我们假设加噪过程为一个 $T$ 步的马尔可夫过程 $q(x_{1:T}\mid x_0)=\prod\limits_{t=1}^T q(x_t\mid x_{t-1}),q(x_t\mid x_{t-1}):=\mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1},\beta_t\mathrm{I})$,其中,$\beta_t\in (0, 1)$ 是一个控制每步噪声的参量,随 $t$ 增大而减小,在原始 DDPM 中是预先指定的,当然也可以自学习得到。整个过程同样使用了重参数化技巧,也即 $x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t}z_{t-1}, z_{t-1}\sim \mathcal{N}(0,\mathrm{I})$。

这样的好处有如下几点:

 

Reverse Process

说白了,加噪过程 $q(x_t\mid x_{t-1})$ 就是每一步都向上一个图像加一点高斯噪声,最终让整幅图像都变成高斯噪声,在 DDPM 中是完全训练无关的。那么,应该如何学习它每一步的逆过程 $q(x_{t-1}\mid x_t)$ 呢?接上文,设我们学到的模型也为一个马尔可夫过程 $p_\theta(x_{0:T})=p(x_T)\prod\limits_{t=1}^T p_\theta(x_{t-1}\mid x_t),p_\theta(x_{t-1}\mid x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))$,为了方便优化,我们将 $\Sigma_\theta(x_t,t)$ 设为一个仅与 $\beta_t$ 有关的参量(为了形式更加一致、优化更加方便,后面还会假设 $\mu_\theta$ )。接下来,我们考虑如何优化出我们想要的 $p_\theta(·)$(参考自翁荔的博客)。

 

Optimization

显然地,我们可以直接优化 $p_\theta(x_0)$,不过为了易于优化,我们对它的负对数似然值上界进行优化: $$ \begin{align}

\end{align} \(设上式结果为 $L_{\text{VLB} }$,则我们最小化这一上界 $L_\text{VLB}$ 即可:\) \begin{aligned} L_\text{VLB} &= \mathbb{E}{q(\mathbf{x}{1:T} \vert \mathbf{x}0)} \Big[ \log\frac{q(\mathbf{x}{1:T}\vert\mathbf{x}0)}{p\theta(\mathbf{x}{0:T})} \Big]
&= \mathbb{E}_q \Big[ \log\frac{\prod
{t=1}^T q(\mathbf{x}t\vert\mathbf{x}{t-1})}{ p_\theta(\mathbf{x}T) \prod{t=1}^T p_\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t) } \Big]
&= \mathbb{E}_q \Big[ -\log p
\theta(\mathbf{x}T) + \sum{t=1}^T \log \frac{q(\mathbf{x}t\vert\mathbf{x}{t-1})}{p_\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)} \Big]
&= \mathbb{E}_q \Big[ -\log p
\theta(\mathbf{x}T) + \sum{t=2}^T \log \frac{q(\mathbf{x}t\vert\mathbf{x}{t-1})}{p_\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)} + \log\frac{q(\mathbf{x}_1 \vert \mathbf{x}_0)}{p\theta(\mathbf{x}0 \vert \mathbf{x}_1)} \Big]
&= \mathbb{E}_q \Big[ -\log p
\theta(\mathbf{x}T) + \sum{t=2}^T \log \Big( \frac{q(\mathbf{x}{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)}{p\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)}\cdot \frac{q(\mathbf{x}_t \vert \mathbf{x}_0)}{q(\mathbf{x}{t-1}\vert\mathbf{x}0)} \Big) + \log \frac{q(\mathbf{x}_1 \vert \mathbf{x}_0)}{p\theta(\mathbf{x}0 \vert \mathbf{x}_1)} \Big]
&= \mathbb{E}_q \Big[ -\log p
\theta(\mathbf{x}T) + \sum{t=2}^T \log \frac{q(\mathbf{x}{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)}{p\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)} + \sum{t=2}^T \log \frac{q(\mathbf{x}t \vert \mathbf{x}_0)}{q(\mathbf{x}{t-1} \vert \mathbf{x}0)} + \log\frac{q(\mathbf{x}_1 \vert \mathbf{x}_0)}{p\theta(\mathbf{x}0 \vert \mathbf{x}_1)} \Big]
&= \mathbb{E}_q \Big[ -\log p
\theta(\mathbf{x}T) + \sum{t=2}^T \log \frac{q(\mathbf{x}{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)}{p\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)} + \log\frac{q(\mathbf{x}_T \vert \mathbf{x}_0)}{q(\mathbf{x}_1 \vert \mathbf{x}_0)} + \log \frac{q(\mathbf{x}_1 \vert \mathbf{x}_0)}{p\theta(\mathbf{x}0 \vert \mathbf{x}_1)} \Big]
&= \mathbb{E}_q \Big[ \log\frac{q(\mathbf{x}_T \vert \mathbf{x}_0)}{p
\theta(\mathbf{x}T)} + \sum{t=2}^T \log \frac{q(\mathbf{x}{t-1} \vert \mathbf{x}_t, \mathbf{x}_0)}{p\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t)} - \log p\theta(\mathbf{x}0 \vert \mathbf{x}_1) \Big]
&= \underbrace{D
\text{KL}(q(\mathbf{x}T \vert \mathbf{x}_0) \parallel p\theta(\mathbf{x}T))}{L_T} + \sum_{t=2}^T \mathbb{E}{q(x_t\mid x_0)} \underbrace{D\text{KL}(q(\mathbf{x}{t-1} \vert \mathbf{x}_t, \mathbf{x}_0) \parallel p\theta(\mathbf{x}{t-1} \vert\mathbf{x}_t))}{L_{t-1} } \underbrace{- \mathbb{E}{q(x_1\mid x_0)}[\log p\theta(\mathbf{x}0 \vert \mathbf{x}_1)}{L_0} ] \end{aligned} $$ 其中,第五个等号处使用了 $q(·)$ 的马尔科夫性质。且若此处 $T=1, z:=x_T$,则此 ELBO 与初始的 VAE 优化条件等价。

对于各项:$L_T$ 解释为一个先验项,由于 $x_T$ 为一噪声,整个式子没有需要训练的参数,同时在假设下可认为为 0;$L_0$ 项可以解释为一个重构项,它在 DDPM 中使用一个 $\mathcal{N}(x_0;\mu_\theta(x_1,\mathrm{I}),\Sigma_\theta(x_1,\mathrm{I} ))$ 推导出的独立的离散 decoder 来模拟;而对于 $L_{t-1}$ 这一一致性项,我们让预测分布 $p_\theta(·)$ 接近上述的后验分布即可。

我们用贝叶斯定理展开上述分布: \(\begin{align} q(x_{t-1}\mid x_t,x_0) &= \frac{q(x_t\mid x_{t-1},x_0)q(x_{t-1}\mid x_0)}{q(x_t\mid x_0)}\\ &\propto \exp (-\frac{1}{2}(\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2 }{2(1-\alpha_t)}+\frac{(x_{t-1}-\sqrt{\bar{\alpha}_{t-1 } }x_0)^2 }{2(1-\bar{\alpha}_{t-1})}-\frac{(x_t-\sqrt{\bar{\alpha}_t}x_{0})^2 }{2(1-\bar{\alpha}_t)}))\\ &= \exp(-\frac{1}{2}((\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar{\alpha}_{t-1} })x_{t-1}^2-(\frac{2\sqrt{\alpha_t} }{\beta_t}x_t+\frac{2\sqrt{\bar{\alpha}_{t-1} } }{1-\bar{\alpha}_{t-1} }x_0)x_{t-1}+C(x_t, x_0))\\ &\propto \mathcal{N}(x_{t-1};\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} },\frac{(1-\alpha_t)(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_{t} }\mathrm{I}) \end{align}\) 所以有: \(\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} }\\ \Sigma_q(t)=\frac{(1-\alpha_t)(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_{t} }\mathrm{I}\) 于此,如我们前文所述,设 $p_\theta(x_{t-1}\mid x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))$,为了形式一致便于优化,设: \(\mu_\theta(x_t,t):=\frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})x_t+\sqrt{\bar{\alpha_{t-1} } }(1-\alpha_t)\bold{\hat{x}_\theta(x_t,t)} }{1-\bar{\alpha}_{t} }\\ \Sigma_\theta(x_t,t):=\Sigma_q(t)\) (这样设置,在采样时就有点像我们通过预测出 $\hat{x_\theta}$ 算出 $x_0$ 后,通过后验估计计算出 $x_{t-1}$。之所以不使用其直接作为 $x_0$,是因为在一开始结果不会太准,在逐步迭代中进行 “预估-修正” 得到更加精细的解)

接下来的推导,在 A Unified Perspective 给出了针对于三种目标约束的约简: \(\Arrowvert \hat{x}_\theta(x_t,t)-x_0\Arrowvert^2\\ \Arrowvert \hat{\epsilon}_\theta(x_t,t)-\epsilon_0\Arrowvert^2\\ \Arrowvert s_\theta(x_t,t)-\nabla_{x_t}\log q(x_t)\Arrowvert^2 ,\text{using Tweedie's Formula}\\ \text{where }\sqrt{\bar{\alpha}_t} x_0=x_t+(1-\bar{\alpha}_t)\nabla\log q(x_t)\\\) 其中,第三个式子中的 $s_\theta(x_t,t)$ 为网络学习到的 “score function”,后者实际上等价于 $\nabla_{x_t}\log q(x_t)=-\frac{1}{\sqrt{1-\bar{\alpha_t} } }\epsilon_0$,意即其概率密度定义为其梯度,后续会在 scores-based models 相关章节进一步深化。此处我们跟随 DDPM 借助前式,针对噪声(式二)进行优化: \(q(x_t\mid x_0)=\mathcal{N}(x_t;\sqrt{\bar{\alpha_t} }x_0, (1-\bar{\alpha_t})\mathrm{I})\\ \text{so: }x_0=\frac{1}{\sqrt{\bar{\alpha}_t} }(x_t-\sqrt{1-\bar{\alpha}_t}\epsilon_0)\\ \text{Similarly, we set:}\\ \bold{\hat{x}_\theta(x_t,t)}=\frac{1}{\sqrt{\bar{\alpha}_t} }(x_t-\sqrt{1-\bar{\alpha}_t}\bold{\hat{\epsilon}_\theta(x_t,t)})\\ \text{so we get:}\\ \mu_q(x_t,x_0)=\frac{1}{\sqrt{\alpha_t} }x_t -\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}\sqrt{\alpha_t} }\epsilon_0\\ \bold{\mu_t(x_t,x_0)}=\frac{1}{\sqrt{\alpha_t} }x_t -\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}\sqrt{\alpha_t} }\bold{\hat{\epsilon}_\theta(x_t,t)}\) 我们知道两个正态分布间 KL 散度对应的公式为: \(D_{KL}(\mathcal{N}(x;\mu_x,\Sigma_x)\Arrowvert \mathcal{N}(y;\mu_y,\Sigma_y)) = \frac{1}{2} [\log \frac{\mid \Sigma_y\mid}{\mid \Sigma_x\mid} - d + tr(\Sigma_y^{-1}\Sigma_x)+(\mu_y-\mu_x)^T\Sigma_y^{-1}(\mu_y-\mu_x)]\) 对 $L_{t-1}$ 的每项进行应用,得到: \(\begin{align} D_{KL}(q(x_{t-1}\mid x_t,x_0)\Arrowvert p_\theta(x_{t-1}\mid x_t)) &= \frac{1}{2\Arrowvert \Sigma_\theta\Arrowvert_2^2 }\Arrowvert \mu_\theta - \mu_q\Arrowvert^2_2 \\ &= \frac{1}{2\Arrowvert \Sigma_\theta(t)\Arrowvert_2^2}\frac{(1-\alpha_t)^2}{(1-\bar{\alpha}_t)\alpha_t}[\Arrowvert \bold{\hat{\epsilon}_\theta(x_t,t)}-\epsilon_0\Arrowvert_2^2] \end{align}\) 经验性地,DDPM 最终优化对象忽略了权重项,效果更好: \(\arg\limits_\theta\min L_{\text{simple} }= L_t^{\text{simple } } + C\\ \begin{align} \text{s.t. } L_t^{\text{simple } }&=\mathbb{E}_{q(x_0)}(\sum_{t=2}^T L_{t-1}+L_0)\\ &\approx \mathbb{E}_{t\sim [1, T],x_0,\epsilon_t}[\Arrowvert \bold{\epsilon_t - \epsilon_\theta(\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon_t,t)}\Arrowvert^2] \end{align}\) 后面的论文 Analytic-DPM 等中有提到,DDPM 这样来做,其实是对(离散时间的)diffusion SDE 的最大似然 SDE-solver(也即,最小化了每一步的 KL),且事实上最优的均值与方差是存在解析形式的,似然效率与采样速度都得以提升。

 

Training & Samling

Referred unofficial code

在 DDPM 中,虽然我们最终的优化目标聚焦到噪声上,但是需要注意的是,这个噪声项是均值的一部分代换,也就是说,我们实际上做的还是对每步均值的预测估计,而方差由于一开始固定为时间步的函数,故仍随机生成。(在 DDPM 中,time embed 被设置为一系列线性增加的常数 $\beta_{1\sim T}\in [\text{1e-4, 2e-2}]$,后来在 Improved-DDPM 中使用基于余弦方差的策略去生成它;考虑到方差其实也应该学习,后者考虑通过插值进行学习)

ddpm2

从上述流程图中可以看到,整个流程其实是很简单的:对于每一次训练过程,我们随机选择时间步 $t$,仅对这一步的损失进行优化,直至收敛;采样过程也很好理解。

 

Conditioned Generation

What are Diffusion Models?, lilianweng’s blog

从DDPM到GLIDE:基于扩散模型的图像生成算法进展

Classifier-Guided Diffusion

Diffusion Models Beat GANs on Image Synthesis

Vanilla DDPM 事实上和前文所述 GAN, VAE 之流都是一样的,训练学习到的是整个空间的分布,采样生成的样本是在空间内随机的。我们自然想要用一些先验信息去指导采样,使其生成我们希望得到的样本。于是乎就有人提出,使用显式的类别信息用于训练与采样过程,来指导出有条件的采样图像。

具体地,由: \(\begin{align} \nabla_{x_t}\log q(x_t,y)&=\nabla_{x_t}\log q(x_t)+\nabla_{x_t}\log q(y\mid x_t)\\ &\approx -\frac{1}{\sqrt{1-\bar{\alpha}_t } }\epsilon_\theta(x_t,t) + \nabla_{x_t}\log f_\phi(y\mid x_t)\\ &=-\frac{1}{\sqrt{1-\bar{\alpha}_t } }(\epsilon_\theta(x_t,t) - \sqrt{1-\bar{\alpha}_t }\nabla_{x_t}\log f_\phi(y\mid x_t)) \end{align}\) 在原始论文中, $\log f_\phi(y\mid x_t)$ 是一个额外训练的分类器。采样时,使用上式括号中的内容代替原模型输出噪声 $\hat{\epsilon}_\theta(x_t,t)\leftarrow \cdots$ 即可。特别地,为了控制引导强度,可以在后半部分辅以权重 $s$。

此外,这里用于引导的 $\log f_\phi(y\mid x_t)$ 可以替换为任意打分函数,例如使用图像-文本相似度、图像-图像(风格、结构、embeddings…)相似度、混合打分函数等。

conditioned-DDPM

 

###Classifier-Free Diffusion

Classifier-Free Diffusion Guidance

GLIDE 就是采用这种方式训练的

上述引导方式虽然很实用,但仍然存在一些不足:额外计算量较大、引导函数与扩散模型分别训练,并不能通过联合训练使模型效果更好,也不利于扩增模型规模。于是 DDPM 作者提出了无需额外分类器的扩散引导方法(其实就是在训练的时候把先验信息糅进去了)。具体地,在噪声估计时加入一个额外的条件输入,此处以标签为例,形如 $\epsilon_\theta(x_t,t,y)$,并结合有条件、无条件($\epsilon_\theta(x_t,t,y=\empty)$)两种训练方式一齐训练。更新部分推导如下: $$ \begin{align}

\nabla_{x_t}\log f_\phi(y\mid x_t)&=\nabla_{x_t}\log f_\phi(x_t\mid y)+\nabla_{x_t}\log f_\phi( x_t)
&=-\frac{1}{\sqrt{1-\bar{\alpha}t } }(\epsilon\theta(x_t,t,y) -\epsilon_\theta(x_t,t))
&\text{ so we have: (As is in Guided Diffusion)}
\hat{\epsilon}\theta(x_t,t, y)&=\epsilon\theta(x_t,t) - \sqrt{1-\bar{\alpha}t }s\nabla{x_t}\log f_\phi(y\mid x_t)
&=\epsilon_\theta(x_t,t)+s· (\epsilon_\theta(x_t,t,y)-\epsilon_\theta(x_t,t)) \end{align} $$

 

Further Works