©作者 | 中森
单位 | 粤港澳大湾区数字经济研究院
研究方向 | 条件受控文本生成
这篇文章主要比较一下扩散模型的引导生成的三种做法的区别。它们分别是用显式分类器引导生成的做法,用隐式无分类器引导的做法和用 CLIP 计算跨模态间的损失来引导生成的做法。
分类器引导生成
1.1 直观理解
我们知道扩散模型的前向扩散过程和后向的去噪过程都可以用一个随机微分方程来描述,并且其中后向去噪时我们事实上通过一个神经网络来拟合当前输入关于原数据分布的梯度,来将一个先验分布(如高斯噪声)里采样出的点逐渐推进到数据分布里(具体联系可以参考笔者的上一篇笔记:扩散模型与能量模型,Score-Matching 和 SDE,ODE 的关系 [5])。
既然我们知道后向生成可以看成是一个 MCMC 采样过程,而其中实际每一步的转移方程都是沿着往数据分布的梯度方向迈进,且该方向由我们神经网络的输出来拟合,那么推出分类器引导的形式就十分自然了。首先 DDPM 里我们网络训练预测的目标一般写成如下形式:
有了这个网络之后,我们想要生成符合原数据分布的点(例如图像或文本)时我们可以通过逐步往该网络的预测梯度方向行走来获得最终数据点。但这样有一个问题是这样的无条件生成我们无法做到条件生成,如指定图像类别是猫或狗来生成具体类别的结果。但根据以上的直观理解,我们可以用贝叶斯定理来将条件生成对输入的对数梯度拆解一下 [1]:
▲ 贝叶斯定理
上式里我们很明显看到给定类别或条件生成的梯度可以看作是我们本来就已经在拟合的无条件梯度再加上一个分类器的梯度来得到(其中条件关于输入的求导为零)!换句话说对于一个先验分布,我们想要再次获得数据分布里在条件约束下的数据点时,我们实际只要在原来往数据方向的梯度方向上再额外添加一个分类器的梯度方向即可。
具体来说,宋飏博士在论文 [2] 里给出的后向去噪的随机微分方程本来是如下形式:
▲ 后向去噪过程的SDE形式
▲ 注意每步迭代的方向现在加上了分类器的梯度方向来引导
而在几乎同一时间发表的论文 Diffusion Models Beat GANs on Image Synthesis [3] 里,作者用了更加数学化的方式来得到同样的推导结论。这个推导就不那么直观了。
1.2 异曲同工
有关这篇论文如何得到相同的公式推导,读者可以参考原论文 [3] 附录里的推导。笔者在此按下不表。但同样的推论下,这篇论文作者给出了宋飏博士的推论在 DDPM 和 DDIM 的采样算法下的具体实现形式:
▲ 分类器引导在 DDPM,DDIM 采样算法下的具体实现形式
其中留意在 DDPM 下,每一步的均值估计加上了分类器引导的梯度,而在 DDIM 的框架下,原来的噪声估计也加上了分类器引导的梯度。
无分类器引导生成
但用一个显式的分类器引导生成有几个比较大的问题:一个是你需要额外训练一个在噪声图像上做分类判别的分类器,费时费力。其次该分类器的质量决定了你按类别生成的效果。实际上往分类器的判别梯度上更新图像的做法是图像界对分类模型进行对抗攻击的经典做法。骗过了一个并不健壮的分类器并不代表我们确实逼近了条件分布。
▲ 实际上在用分类器引导文本扩散生成时笔者也遇到了这个现象
而由此引申的最重要的一个缺陷是,这样的一个分类器在多样性和生成效果此消彼长的权衡博弈,并没有直接反映到我们的评判测度上(例如 IS 这个测度的输出本身就依赖于分类器)。
下图是 classifier-free [4] 这篇论文里给出的形象例子。对于一个来自于三个高斯分布混合而成的分布,我们通过分类器引导的采样过程导致了采样结果严重受限于该分布的局部领域,且分类器引导强度越强,远离其他类别的质心的表现越明显,使得结果越加集中在局部空间。
▲ 随着分类器引导的程度加深,我们的多样性显著下降
为了避免一个显式的分类器引导,笔者认为 classifier-free 这篇论文的核心思想是提出了一个隐式的分类器引导。以下是相关的推导:首先我们知道噪声的估计和对数据分布的梯度是成负系数比例的(直观来说,噪声使得原输入偏离了原数据分布,而去噪过程沿着往数据分布的最近梯度则刚好和噪声是反方向,具体推导可以参考笔者文章:从大一统视角理解扩散模型(Diffusion Models))。而这个关系在这篇论文里以这个公式形式给出:
▲ 噪声估计和梯度方向成负相关
▲ 推出这个等式是为了引出隐式分类器的表示
▲ 其中两个epsilon分别代表P(z|c)和P(z)
那么我们再将这个显示分类器的梯度拆解式代入回上面的用 omega 强度对有条件生成的网络进行引导的表达式,我们可以得到 也就是下式:
也就是说,使用隐式分类器引导的最终解析式要求我们只需要训练两个梯度预估模型,其中一个是无条件生成的梯度预估模型(例如常规的 DDPM),另一个是基于条件的梯度预估模型。而我们甚至可以使用同一个模型同时表示两者,区别只在于无条件生成时将条件向量置为零即可!
一方面这大大减轻了条件生成的训练代价(无需训练额外的分类器,只需要在训练时进行随机 drop out condition 来同时训练两个目标),另一方面这样的条件生成并不是以一个类似于对抗攻击的方式进行的。
而同时,仔细观察我们上面的采样式子,实际上它是两个梯度的差值所形成的。如果有玩过 stable-diffusion-webui 的读者可能会注意到其中一个 feature 是 negative prompt. 也就是使用者可以指定不想要出现的提示,让生成不会包括该内容。其实现方式实际上就用了上面这个无分类器引导的公式。将无条件生成转为带着你不想要的提示的条件生成。
无分类器引导可以说是 Stable-Diffusion 的做法的直接奠基工作之一。在此之前要做到多模态或者说文生图的引导生成,通常大家用的是 clip 模型,来对生成的图像和文本的距离做一个损失差值,用这个差值来引导多模态生成。但有了 classifier-free 这篇论文之后,文生图可以有更加自然和更加有效的方式达成。
关于 SD 具体是如何工作的,可以参考笔者这篇笔记:CLIP, VQGAN, VQGAN-CLIP, Stable-Diffusion? [6]。
CLIP损失引导生成
上面谈了谈扩散模型的无分类器引导生成,并提到了这项技术使得训练一个多模态文生图的 Stable-Diffusion 成为可能。下面我将简要地谈一谈如果不用隐式分类器引导生成的话,多模态引导生成可以如何做。
笔者在之前的笔记:CLIP, VQGAN, VQGAN-CLIP, Stable-Diffusion [6] 里提及过 VQGAN-CLIP,一种在生成时不断借助 CLIP 判断所生成的图像和目标文本的距离来不停迭代生成的方法。但这个方法不涉及到任何的扩散模型。
在 Diffusion-CLIP 这篇文章里,作者同样通过使扩散生成时的图像和目标文本的多模态 CLIP 损失尽可能小来达成目的。具体来说,CLIP 的损失由下图定义:
▲ CLIP损失
其中 delta_I 是图像编码器对生成图和原图的编码向量差,delta_T 是文本编码器对目标文本和原文本的编码向量的差。这是一个余弦距离的损失函数。而我们可以在扩散时引导我们的噪声或者模型使得其生成结果满足以下两个损失,一个是 CLIP 损失,一个是保证生成图和原图尽可能不要相差太远的重构损失。根据作者的实验发现,对模型微调的效果会比对噪声直接微调的效果更好一些。
▲ 多模态引导时的优化目标
很明显这个方法最大的问题在于,每一个新的性质,都需要对模型进行微调一次,哪怕作者论证了不同的性质可以在某种程度上互相叠加来生成,这依然是个非常耗费资源且难以落地的技术方向。而且这个方法依然是对 DDPM 等在像素空间上做操控的模型做多模态引导,其巨大的资源耗费也导致了难以训练一个在通用数据集上拟合的模型。更加不要说用海量的自然语言去做文本指导生成了(在这个技术路线下,要微调并储存海量的模型)。
结语
在比较了三种引导的大方向之后,我们可以更清晰地明白 Stable-Diffusion 其背后的技术路线成功的原因之一。就是使用了无分类器引导的隐式分类引导生成的技术,使得跨模态的条件生成变得简单可行。当然,其背后整合了最新的 VQGAN 模型并在潜在空间做扩散的思路使得所需训练和推理资源急剧降低,也是一个重要的方面。
参考文献
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」