Reading

条件控制生成

技术分析

从方法上来看,条件控制生成的方式分两种:事后修改(Classifier-Guidance)和事前训练(Classifier-Free)

对于大多数人来说,一个SOTA级别的扩散模型训练成本太大了,而分类器(Classifier)的训练还能接受,所以就想着直接复用别人训练好的无条件扩散模型,用一个分类器来调整生成过程以实现控制生成,这就是事后修改的Classifier-Guidance方案;而对于“财大气粗”的Google、OpenAI等公司来说,它们不缺数据和算力,所以更倾向于往扩散模型的训练过程中就加入条件信号,达到更好的生成效果,这就是事前训练的Classifier-Free方案。

Classifier-Guidance方案最早出自《Diffusion Models Beat GANs on Image Synthesis》,最初就是用来实现按类生成的;后来《More Control for Free! Image Synthesis with Semantic Diffusion Guidance》推广了“Classifier”的概念,使得它也可以按图、按文来生成。Classifier-Guidance方案的训练成本比较低(熟悉NLP的读者可能还会想起与之很相似的PPLM模型),但是推断成本会高些,而且控制细节上通常没那么到位。

至于Classifier-Free方案,最早出自《Classifier-Free Diffusion Guidance》,后来的DALL·E 2Imagen等吸引人眼球的模型基本上都是以它为基础做的,值得一提的是,该论文已经中了NeurIPS 2021。应该说,Classifier-Free方案本身没什么理论上的技巧,它是条件扩散模型最朴素的方案,出现得晚只是因为重新训练扩散模型的成本较大吧,在数据和算力都比较充裕的前提下,Classifier-Free方案表现出了令人惊叹的细节控制能力。

Classifier Guidance

条件输入

说白了,Classifier-Free方案就是训练成本大,本身“没什么技术含量”,所以接下来的主要篇幅都是Classifier-Guidance方案,而Classifier-Free方案则是在最后简单介绍一下。

生成扩散模型最关键的步骤就是生成过程 的构建,而对于以 为输入条件的生成来说,无非就是将 换成 而已,也就是说生成过程中增加输入。为了重用已经训练好的无条件生成模型 ,我们利用贝叶斯定理得

在每一项上面补上条件,就得到

注意,在前向过程中, 是由 加噪声得到的,噪声不会对分类有帮助,所以 的加入对分类不会有任何收益,因此有 ,从而

近似分布

足够大时, 的方差足够小,也就是说只有 很接近时概率才会明显大于0。反过来也是成立的,即也只有很接近时才明显大于0,我们只需要重点考虑这个范围内的概率变化。为此,我们用泰勒展开:

严格来讲还有一项关于 的变化项,但是那一项跟 无关,属于不影响 概率的常数项,因此我们没有写出。假设原来有,那么此时近似地有

从这个结果可以看出, 近似于,所以只需要把生成过程的采样改为

这就是Classifier-Guidance方案的核心结果。值得注意的是,本文的推导结果跟原论文略有不同,原论文新增项是

也就是梯度项在 处的结果而非 处,而一般情况下 的零阶近似正是 ,所以两者结果是差不多的。

梯度缩放

原论文(《Diffusion Models Beat GANs on Image Synthesis》)发现,往分类器的梯度中引入一个缩放参数 ,可以更好地调节生成效果:

时,生成过程将使用更多的分类器信号,结果将会提高生成结果与输入信号 的相关性,但是会相应地降低生成结果的多样性;反之,则会降低生成结果与输入信号之间的相关性,但增加了多样性。

怎么从理论上理解这个参数呢?原论文提出将它理解为通过幂操作来提高分布的聚焦程度,即定义

随着的增加, 的预测会越来越接近one hot分布,用它来代替 作为分类器做Classifier-Guidance,生成过程会倾向于挑出分类置信度很高的样本。

然而,这个角度虽然能提供一定的参考价值,但其实不完全对,因为

原论文错误地认为 ** 是一个常数,所以,但事实上 时, 会显式地依赖于 **。笔者也继续思考了一下有没有什么补救方法,但很遗憾没什么结果,仿佛只能很勉强地认为时(此时)的梯度性质能近似地泛化到的情形。

相似控制

事实上,理解的最佳方案,就是放弃从贝叶斯定理来理解,而是直接定义

其中 ** 是生成结果与条件的某个相似或相关度量**。在这个角度下, 直接融于 的定义中,直接控制结果与条件的相关性,当越大,模型会倾向于生成跟 越相关的

为了进一步得到可采样的近似结果,我们可以在 处(也可以在,跟前面类似)展开

假设此近似程度已经足够,那么除去与 无关的项,我们得到

跟前面一样,代入,配方后得到

这样一来,我们就不需要纠结 的概率意义,而是只需要直接定义度量函数 ,这里的 也不再是仅限于“类别”,也可以是文本、图像等任意输入信号,通常的处理方式是用各自的编码器将其编码为特征向量,然后用cos相似度:

要指出的是,中间过程的是带高斯噪声的,所以编码器一般不能直接调用干净数据训练的编码器,而是要用加噪声后的数据对它进行微调才比较好。此外,如果做风格迁移的,通常则是用Gram矩阵距离而不是cos相似度,这些都看场景发挥了。以上便是论文

《More Control for Free! Image Synthesis with Semantic Diffusion Guidance》

的一系列结果,更多细节可以自行参考原论文。

连续情形

经过前面的推导,我们得到均值的修正项为 ,它们都有一个共同特点,就是 时,修正项也等于 0,修正就失效了。

那么生成过程的 可以等于0吗?肯定可以,比如 DDIM,就是方差为0的生成过程,这种情况下应该怎样做控制生成呢?此时我们需要用到《生成扩散模型漫谈(六):一般框架之ODE篇》介绍的基于SDE的一般结果了,在里边我们介绍到,对于前向SDE:

对应的最一般的反向SDE为

这里允许我们自由选择反向方差 ,DDPM、DDIM都可以认为是它的特例,其中 时就是一般化的DDIM。可以看到,反向SDE跟输入有关的就是 ,如果要做条件生成,自然是要将它换成,然后利用贝叶斯定理,有

在上边的推导过程中,因为  对  没有梯度,所以有 $\nabla_{\mathbf{x}_t}\log
p(y)=0\nabla_{\mathbf{x}_t}\log
p(\mathbf{x}t)\nabla{\mathbf{x}_t}\log
p(y|\mathbf{x}_t)$。

单看 ,这个表示的是从  得到类别  的概率,这个过程和分类任务的过程是相同的。那么求解这一项可以使用一个非常直接的思路,也就是真的使用一个分类器对  进行分类,再对分类结果概率分布的 log 求梯度。这样就可以直接得到上面公式里的最后一项,从而实现基于类别对生成进行引导。

在一般的参数化下有 ,因此

这就意味着,不管生成方差是多少,我们只需要用 代替 就可以实现条件控制生成了。因此,在SDE的统一视角下,我们可以非常简单而直接地得到Classifier-Guidance方案的最一般结果。

Classifier-Free Guidance

最后,我们来简单介绍一下Classifier-Free方案。其实很简单,它就是直接定义

沿用前面DDPM的几篇文章的结果, 一般参数化为

训练的损失函数就是

它的优点是在训练过程中就引入了额外的输入,理论上输入信息越多越容易训练;它的缺点也是在训练过程中就引入了额外的输入,意味着每做一组信号控制,就要重新训练整个扩散模型。

特别地,Classifier-Free方案也模仿Classifier-Guidance方案加入了 参数的缩放机制来平衡相关性与多样性。具体来说可以写成:

Classifier-Free方案相当于直接用直接用模型拟合了,那么类比上式,我们也可以在Classifier-Free方案中引入 参数,用

代替 来做生成。那无条件的 怎么来呢?我们可以新引入一个特定的输入,它对应的目标图像为全体图像,加到了模型的训练中,这样我们就可以认为了。

小结

本文简单介绍了建立条件扩散模型的相关理论结果,主要包含事后修改(Classifier-Guidance)和事前训练(Classifier-Free)两种方案。其中,前者不需要重新训练扩散模型,可以低成本实现简单的控制;后者需要重新训练扩散模型,成本较大,但可以实现比较精细的控制。

Inference

https://kexue.fm/archives/9257

https://littlenyima.github.io/posts/18-classifier-guidance-for-diffusion-models/

https://littlenyima.github.io/posts/19-classifier-free-guidance-for-diffusion-models/