前言

扩散模型再怎么牛,也只能在同一个数据集下生成类似的图像,不可能随心所欲地命令其生成想要的图像。但是实际上文生图早已实现,而且不是什么难事,这是怎么做到的呢?这便是条件扩散模型的功劳,是它实现了文本等语义信息的编码嵌入,控制扩散模型生成指定内容的图像,以条件扩散模型为基础,衍生出了一系列的控制模型如ControlNet等,能够更加精细地控制生成图像的内容,这才给扩散模型强大的生成能力插上了任意飞翔的翅膀。掌握在扩散模型内加入条件的设计思想,才是真正掌握了扩散模型的精髓。

条件扩散模型

扩散模型的雏形最早于2018年就已经被提出,集大成版本DDPM于2020年提出、实用版本DDIM于2020年底提出,但是真正火起来的时间在2021年前后,中间的时间差,都在等它!

条件扩散模型为扩散模型的火爆奠定了数学基础!

术语解释

条件扩散模型在扩散模型的采样步骤上进行修改,采样是指,从已知的概率分布模型(或确定性模型中)抽取一个图像样本的过程。例如,对于DDPM而言,逆过程中每一步都是从一个已知的分布N\mathcal{N};而对于DDIM而言,它的逆过程不是随机的,是从已知的上一步样本直接推断下一步样本。

扩散模型回顾

可参考DDPM的博客DDIM的博客,尤其注意采样部分的内容:

  • DDPM采样:

pθ(xtxt+1)=N[xt;μϕ(xt+1),Σϕ]\begin{equation}p_{\bm{\theta}}(\mathbf{x}_t|\mathbf{x}_{t+1})=\mathcal{N}[\mathbf{x}_t;\boldsymbol{\mu}_{\boldsymbol{\phi}}(\mathbf{x}_{t+1}),\boldsymbol{\Sigma}_{\boldsymbol{\phi}}]\end{equation}

  • DDIM采样:

xt=αtα[xt+11αt+1ϵθ(xt+1,t)]+1αtσt+12ϵθ(xt+1,t)+σt+1z\begin{equation}\mathbf{x}_t=\sqrt{\frac{\alpha_t}{\alpha}}\left[\mathbf{x}_{t+1}-\sqrt{1-\alpha_{t+1}}\bm{\epsilon_\theta}(\mathbf{x}_{t+1},t)\right]+\sqrt{1-\alpha_t-\sigma^2_{t+1}}\bm{\epsilon_\theta}(\mathbf{x}_{t+1},t)+\sigma_{t+1}\mathbf{z}\end{equation}

其中zN(0,I)\mathbf{z}\sim\mathcal{N}(\mathbf{0,I})

条件引导

在论文[1]指出,当需要使用预训练的图像分类器作为引导模型时,基于DDPM和DDIM的采样过程可以修改为以下两个非常简洁的条件引导公式:

  1. DDPM模型的条件引导:pθ(xtxt+1)=N[xt;μϕ(xt+1)+sΣxt+1logpϕ(yxt+1),Σϕ]p_{\bm{\theta}}(\mathbf{x}_t|\mathbf{x}_{t+1})=\mathcal{N}[\mathbf{x}_t;\boldsymbol{\mu}_{\boldsymbol{\phi}}(\mathbf{x}_{t+1})+s\Sigma\nabla_{x_{t+1}}\log p_\phi(\mathbf{y|x_{t+1}}),\boldsymbol{\Sigma}_{\boldsymbol{\phi}}]
  2. DDIM的条件引导:ϵ^θ(xt)=ϵθ(xt+1)1αˉt+1xt+1logpϕ(yxt+1)\hat{\epsilon}_{\bm{\theta}}(\mathbf{x}_t)=\bm{\epsilon_\theta}(\mathbf{x}_{t+1})-\sqrt{1-\bar{\alpha}_{t+1}}\nabla_{\mathbf{x}_{t+1}}\log p_\phi(\mathbf{y|x}_{t+1})

式中,ss是一个超参数项,用于控制条件项的影响程度。相比DDPM需要使用超参数控制条件引导,DDIM的条件引导显得更加自然。

两项都是针对逆过程而言的,其中第一项是DDPM在对逆过程后一个时刻的图像xt\mathbf{x}_t生成的概率分布作修改,然后以条件引导的概率模型采样获取前一个时刻的图像xt1\mathbf{x}_{t-1};第二项是DDIM在对逆过程后一个时刻的图像样本xt\mathbf{x}_t向前一个时刻的图像样本xt1\mathbf{x}_{t-1}递推过程的修改,加入了条件引导的梯度项。综上可知:

条件扩散模型就是对扩散模型的采样步骤的条件引导

这个公式非常简洁优美,也非常方便使用,当然也必须要注意,这里的引导项是分类器,即直观的理解是让扩散模型生成的图像符合分类器的判断,因此生成的模型将逼近分类器预训练的图像分布

数学原理

本部分来自于论文[1]的补充材料。

一定要使用分类器才能得到条件引导的结果吗?数字上讲其实其他一切形式的引导都可以,哪怕是一个图像的梯度也能用于引导扩散模型生成。在已知扩散模型的生成过程pθ(xtxt+1)p_{\bm{\theta}}(\mathbf{x}_t|\mathbf{x}_{t+1})扩散过程q(xt+1xt)q(\mathbf{x}_{t+1}|\mathbf{x}_t)条件分布qϕ(yxt)q_{\bm{\phi}}(\mathbf{y|x}_t)的前提下,可以定义条件扩散过程为q^q\hat{q}\approx q,在假设条件扩散过程与扩散过程的原始图像、单步扩散条件概率相等的情况下时,可以证明,条件扩散过程的扩散概率分布与扩散过程是完全相等的,即有:q^(xt+1xt)=q(xt+1xt)\hat{q}(\mathbf{x}_{t+1}|\mathbf{x}_t) = q(\mathbf{x}_{t+1}|\mathbf{x}_t),由此得到条件扩散模型的单步生成条件概率

q^(xtxt+1,y)=q(xtxt+1)q^(yxt)q^(yxt+1)\hat{q}(\mathbf{x}_t|\mathbf{x}_{t+1},y)=\frac{q(\mathbf{x}_t|\mathbf{x}_{t+1})\hat{q}(\mathbf{y|x}_t)}{\hat{q}(\mathbf{y|x}_{t+1})}

分别使用拟合的生成过程pθp_{\bm{\theta}}和分类器模型pϕp_{\bm{\phi}}替换上式的分子项,而分母项在单步条件生成过程中与xt\mathbf{x}_t无关,不影响单步生成,则需要优化的生成过程将修改为:

pθ,ϕ(xtxt+1,y)=Zpθ(xtxt+1)pϕ(yxt)p_{\bm{\theta,\phi}}(\mathbf{x}_t|\mathbf{x}_{t+1},\mathbf{y})=Zp_{\bm{\theta}}(\mathbf{x}_t|\mathbf{x}_{t+1})p_{\bm{\phi}}(\mathbf{y|x}_t)

其中ZZ是常数,不影响最终的结果。第一项就是扩散模型的生成过程,而第二项是条件引导项,这里是分类器。

DDPM生成推导

DDPM的生成过程中,前一个时刻的样本从后一个时刻的样本分布中采样,单步生成过程服从高斯分布,可见于公式(1)
对于条件引导项,使用Taylor公式在xt=μ(xt+1)\mathbf{x}_t=\bm{\mu}(\mathbf{x}_{t+1})处展开对数概率密度,取一阶近似,有:

logpϕ(yxt)logpϕ(yxt)xt=μ(xt+1)+xtTlogpϕ(yxt)xt=μ(xt+1)[xtμ(xt+1)]=[xtμ(xt+1)]Txtlogpϕ(yxt)xt=μ(xt+1)+C1\begin{aligned} \log p_{\bm{\phi}}(\mathbf{y|x}_t)&\approx\log p_{\bm{\phi}}(\mathbf{y|x}_{t})_{\mathbf{x}_t=\bm{\mu}(\mathbf{x}_{t+1})}+\nabla_{\mathbf{x}_{t}}^\mathrm{T}\log p_{\bm{\phi}}(\mathbf{y|x}_{t})_{\mathbf{x}_t=\bm{\mu}(\mathbf{x}_{t+1})}\cdot[\mathbf{x}_t-\bm{\mu}(\mathbf{x}_{t+1})]\\ &=[\mathbf{x}_t-\bm{\mu}(\mathbf{x}_{t+1})]^\mathrm{T}\nabla_{\mathbf{x}_{t}}\log p_{\bm{\phi}}(\mathbf{y|x}_{t})_{\mathbf{x}_t=\bm{\mu}(\mathbf{x}_{t+1})}+C_1 \end{aligned}

如取g=xtTlogpϕ(yxt)xt=μ(xt+1)\mathbf{g}=\nabla_{\mathbf{x}_{t}}^\mathrm{T}\log p_{\bm{\phi}}(\mathbf{y|x}_{t})_{\mathbf{x}_t=\bm{\mu}(\mathbf{x}_{t+1})},代入至待优化的生成过程,算出条件引导的生成过程分布为:

log[pθ(xtxt+1)pϕ(yxt)]=12(xtμ(xt+1))TΣ1(xtμ(xt+1))+gT(xtμ(xt+1))+C2=12(xtμ(xt+1)Σg)TΣ1(xtμ(xt+1)Σg)+C3=logp(ζ)+C4,ζN[xt;μ(xt+1)+Σg,Σ]\begin{aligned} \log[p_{\bm{\theta}}(\mathbf{x}_t|\mathbf{x}_{t+1})p_{\bm{\phi}}(\mathbf{y|x}_t)]&=-\frac{1}{2}(x_t-\mu(x_{t+1}))^\mathrm{T}\Sigma^{-1}(x_t-\mu(x_{t+1}))+\mathbf{g}^\mathrm{T}(x_t-\mu(x_{t+1}))+C_2\\ &=-\frac{1}{2}(x_t-\mu(x_{t+1})-\Sigma\mathbf{g})^\mathrm{T}\Sigma^{-1}(x_t-\mu(x_{t+1})-\Sigma\mathbf{g})+C_3\\ &=\log p(\bm{\zeta})+C_4,\quad\bm{\zeta}\sim\mathcal{N}[\mathbf{x}_t;\mu(\mathbf{x}_{t+1})+\Sigma\mathbf{g},\Sigma] \end{aligned}

由此原式得证。

DDIM生成推导

DDIM的生成过程与上述不同在于,其生成过程的前一个时刻样本直接由后一个时刻的样本取得,不需要经过概率分布采样,即单步生成条件概率为1,可见于公式(2)。作者使用了一个小技巧,将基于概率模型的条件引导项转化为确定模型的分数函数score funtion梯度项[2],即:

xt+1logpθ(xt)=11αˉt+1ϵθ(xt+1,t+1)xt+1logpθ(y,xt)=11αˉt+1ϵ^θ(xt+1,t+1)\begin{aligned} \nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{x}_t)&=-\frac{1}{\sqrt{1-\bar{\alpha}_{t+1}}}\bm{\epsilon_\theta}(\mathbf{x}_{t+1},t+1)\\ \nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{y,x}_t)&=-\frac{1}{\sqrt{1-\bar{\alpha}_{t+1}}}\bm{\hat{\epsilon}_\theta}(\mathbf{x}_{t+1},t+1) \end{aligned}

其中第二行是条件引导的联合生成过程,将其使用条件概率公式展开,可得:

log[pθ(xt+1)pϕ(yxt+1)]=xt+1logpθ(xt+1)+xt+1logpθ(yxt+1)11αˉt+1ϵ^θ(xt+1,t+1)=11αˉt+1ϵθ(xt+1,t+1)+xt+1logpθ(yxt+1)ϵ^θ(xt+1,t+1)=ϵθ(xt+1,t+1)1αˉt+1xt+1logpθ(yxt+1)\begin{aligned} \log[p_{\bm{\theta}}(\mathbf{x}_{t+1})p_{\bm{\phi}}(\mathbf{y|x}_{t+1})]&=\nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{x}_{t+1})+\nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{y|x}_{t+1})\\ -\frac{1}{\sqrt{1-\bar{\alpha}_{t+1}}}\bm{\hat{\epsilon}_\theta}(\mathbf{x}_{t+1},t+1)&=-\frac{1}{\sqrt{1-\bar{\alpha}_{t+1}}}\bm{\epsilon_\theta}(\mathbf{x}_{t+1},t+1)+\nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{y|x}_{t+1})\\ \bm{\hat{\epsilon}_\theta}(\mathbf{x}_{t+1},t+1)&=\bm{\epsilon_\theta}(\mathbf{x}_{t+1},t+1)-\sqrt{1-\bar{\alpha}_{t+1}}\nabla_{\mathbf{x}_{t+1}}\log p_{\bm{\theta}}(\mathbf{y|x}_{t+1}) \end{aligned}

这两步看得是挺抽象

直观上的理解是,由于DDIM实际上单步生成不需要采样,因此条件引导将直接作用于去噪网络ϵθ\bm{\epsilon_\theta},因此条件引导将直接作用于去噪UNet网络,本方法更适用于单纯含有UNet网络的条件引导。

总结

关于DDPM和DDIM两种生成式模型的条件引导,可以使用下图来方便理解:
条件引导的DDPM
图中的综合点处按去噪公式综合,可见不同时间阶段的去噪图像通过某个迭代的高斯分布关联,而条件引导将直接作用于关联的高斯分布上。

而对于DDIM,其不同时间阶段的去噪图像直接关联,因此条件引导将直接作用于去噪UNet上,这里体现在与去噪结果的估计噪声ϵt\bm{\epsilon}_t综合,如下图所示:
条件引导的DDIM
条件引导的扩散模型,是将语义与生成式模型的一次优美的尝试(虽然我不知道以前的GAN网络有无类似的),它的数学原理简洁而有力,因此其融合效果将比直接依靠花里胡哨的网络设计更加有效,这才是正儿八经的深度学习!

参考文献


[1] Song J. , Meng C. , Ermon S. .Denoising Diffusion Implicit Models[M/OL].arXiv,2022

[2] Yang S. , Jascha S. D. , Diederik P. K. , Abhishek K. , Stefano E. and Ben P. . Score-based generative modeling through stochastic differential equations[M/OL]. arXiv:2011.13456 , 2020.