条件控制生成扩散模型
date
Mar 18, 2023
Last edited time
Mar 18, 2023 11:44 AM
status
Published
slug
条件控制生成扩散模型
tags
DL
CV
summary
转载
type
Post
Field
Plat
技术分析
从方法上来看,条件控制生成的方式分两种:事后修改(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 2、Imagen 等吸引人眼球的模型基本上都是以它为基础做的,值得一提的是,该论文上个月才放到 Arxiv 上,但事实上去年已经中了 NeurIPS 2021。应该说,Classifier-Free 方案本身没什么理论上的技巧,它是条件扩散模型最朴素的方案,出现得晚只是因为重新训练扩散模型的成本较大吧,在数据和算力都比较充裕的前提下,Classifier-Free 方案变现出了令人惊叹的细节控制能力。
条件输入
说白了,Classifier-Free 方案就是训练成本大,本身 “没什么技术含量”,所以接下来的主要篇幅都是 Classifier-Guidance 方案,而 Classifier-Free 方案则是在最后简单介绍一下。
经过前面一系列文章的分析,想必读者已经知道,生成扩散模型最关键的步骤就是生成过程 的构建,而对于以 为输入条件的生成来说,无非就是将 换成 而已,也就是说生成过程中增加输入 。为了重用已经训练好的无条件生成模型 ,我们利用贝叶斯定理得
在每一项上面补上条件 ,就得到
注意,在前向过程中, 是由 加噪声得到的,噪声不会对分类有帮助,所以 的加入对分类不会有任何收益,因此有 ,从而
近似分布
对于已经看过《生成扩散模型漫谈(五):一般框架之 SDE 篇》的读者,大概会觉得接下来的过程似曾相识。不过即便没读过也不要紧,下面我们依旧完整推导一下。
当 足够大时, 的方差足够小,也就是说只有 与 很接近时概率才会明显大于 0。反过来也是成立的,即也只有 与 很接近时 或 才明显大于 0,我们只需要重点考虑这个范围内的概率变化。为此,我们用泰勒展开:
严格来讲还有一项关于 的变化项,但是那一项跟 无关,属于不影响 概率的常数项,因此我们没有写出。假设原来有 ,那么此时近似地有
从这个结果可以看出, 近似于 ,所以只需要把生成过程的采样改为
这就是 Classifier-Guidance 方案的核心结果。值得注意的是,本文的推导结果跟原论文略有不同,原论文新增项是
也就是梯度项在 处的结果而非 处,而一般情况下 的零阶近似正是 ,所以两者结果是差不多的。
梯度缩放
原论文(《Diffusion Models Beat GANs on Image Synthesis》)发现,往分类器的梯度中引入一个缩放参数 ,可以更好地调节生成效果:
当 时,生成过程将使用更多的分类器信号,结果将会提高生成结果与输入信号 的相关性,但是会相应地降低生成结果的多样性;反之,则会降低生成结果与输入信号之间的相关性,但增加了多样性。
怎么从理论上理解这个参数呢?原论文提出将它理解为通过幂操作来提高分布的聚焦程度,即定义
随着 的增加, 的预测会越来越接近 one hot 分布,用它来代替 作为分类器做 Classifier-Guidance,生成过程会倾向于挑出分类置信度很高的样本。
然而,这个角度虽然能提供一定的参考价值,但其实不完全对,因为
原论文错误地认为 是一个常数,所以 ,但事实上 时, 会显式地依赖于 。笔者也继续思考了一下有没有什么补救方法,但很遗憾没什么结果,仿佛只能很勉强地认为
时(此时 )的梯度性质能近似地泛化到 的情形。
相似控制
事实上,理解 的最佳方案,就是放弃从贝叶斯定理的式 (2) 和式 (3) 来理解 ,而是直接定义
其中 是生成结果 与条件 的某个相似或相关度量。在这个角度下, 直接融于
的定义中,直接控制结果与条件的相关性,当 越大,模型会倾向于生成跟 越相关的
。
为了进一步得到可采样的近似结果,我们可以在 处(也可以在 ,跟前面类似)展开
假设此近似程度已经足够,那么除去与 无关的项,我们得到
跟前面一样,代入 ,配方后得到
这样一来,我们就不需要纠结 的概率意义,而是只需要直接定义度量函数 ,这里的 也不再是仅限于 “类别”,也可以是文本、图像等任意输入信号,通常的处理方式是用各自的编码器将其编码为特征向量,然后用 cos 相似度:
要指出的是,中间过程的 是带高斯噪声的,所以编码器 一般不能直接调用干净数据训练的编码器,而是要用加噪声后的数据对它进行微调才比较好。此外,如果做风格迁移的,通常则是用 Gram 矩阵距离而不是 cos 相似度,这些都看场景发挥了。以上便是论文 《More Control for Free! Image Synthesis with Semantic Diffusion Guidance》的一系列结果,更多细节可以自行参考原论文。
连续情形
经过前面的推倒,我们得到均值的修正项为 或 ,它们都有一个共同特点,就是 时,修正项也等于 0,修正就失效了。
那么生成过程的 可以等于 0 吗?肯定可以,比如《生成扩散模型漫谈(四):DDIM = 高观点 DDPM》介绍的 DDIM,就是方差为 0 的生成过程,这种情况下应该怎样做控制生成呢?此时我们需要用到《生成扩散模型漫谈(六):一般框架之 ODE 篇》介绍的基于 SDE 的一般结果了,在里边我们介绍到,对于前向 SDE:
对应的最一般的反向 SDE 为
这里允许我们自由选择反向方差 ,DDPM、DDIM 都可以认为是它的特例,其中 时就是一般化的 DDIM。可以看到,反向 SDE 跟输入有关的就是 ,如果要做条件生成,自然是要将它换成
,然后利用贝叶斯定理,有
在一般的参数化下有 ,因此
这就意味着,不管生成方差是多少,我们只需要用 代替 就可以实现条件控制生成了。因此,在 SDE 的统一视角下,我们可以非常简单而直接地得到 Classifier-Guidance 方案的最一般结果。
无分类器
最后,我们来简单介绍一下 Classifier-Free 方案。其实很简单,它就是直接定义
沿用前面 DDPM 的几篇文章的结果, 一般参数化为
训练的损失函数就是
它的优点是在训练过程中就引入了额外的输入 ,理论上输入信息越多越容易训练;它的缺点也是在训练过程中就引入了额外的输入 ,意味着每做一组信号控制,就要重新训练整个扩散模型。
特别地,Classifier-Free 方案也模仿 Classifier-Guidance 方案加入了 参数的缩放机制来平衡相关性与多样性。具体来说,式 (8) 的均值可以改写成:
Classifier-Free 方案相当于直接用直接用模型拟合了 ,那么类比上式,我们也可以在 Classifier-Free 方案中引入 参数,用
代替 来做生成。那无条件的 怎么来呢?我们可以新引入一个特定的输入 ,它对应的目标图像为全体图像,加到了模型的训练中,这样我们就可以认为 了。
文章小结 #
本文简单介绍了建立条件扩散模型的相关理论结果,主要包含事后修改(Classifier-Guidance)和事前训练(Classifier-Free)两种方案。其中,前者不需要重新训练扩散模型,可以低成本实现简单的控制;后者需要重新训练扩散模型,成本较大,但可以实现比较精细的控制。