无分类器引导 CFG 是什么?让生成结果更贴合提示词的关键技巧
无分类器引导(Classifier-Free Guidance,CFG)是扩散模型中让生成结果更贴合条件的采样技术,由谷歌的研究人员 Jonathan Ho 和 Tim Salimans 提出,最早在 2021 年的研讨会上发表,2022 年发布了论文。几乎所有主流的文生图、文生视频模型,比如 Stable Diffusion、DALL-E、Midjourney 背后的扩散模型,都在使用 CFG。用户在很多绘图工具里调节的“提示词相关性”“引导强度”参数,指的就是它。
它之前的做法:分类器引导
要让扩散模型生成“一只猫”,而不是随便什么图,此前有一种方法叫分类器引导:额外训练一个图像分类器,在每一步去噪时,用分类器的梯度把生成方向往“猫”这个类别推。这种方法有效,但需要单独训练一个能处理带噪声图像的分类器,既麻烦,效果也受分类器质量的限制。
CFG 怎么做
CFG 去掉了额外的分类器。训练时,同一个扩散模型同时学习两种生成:有条件生成,给它提示词,比如“一只猫”;无条件生成,在训练中随机把一部分样本的提示词丢掉,让模型学会在没有任何条件时也能生成。采样时,每一步都让模型分别做一次有条件和一次无条件的预测,然后用两者的差值来放大条件的作用:最终的预测等于无条件预测,加上引导强度乘以“有条件预测减无条件预测”。直观理解,就是看“加上提示词之后变化的方向”,再沿着这个方向多走几步。
引导强度的取舍
引导强度越大,生成的图像越贴合提示词、细节越清晰,但多样性会下降,强度太大还会导致颜色过饱和、画面失真。强度太小,生成结果又容易偏离提示词。实际使用中通常需要在两者之间找到平衡,常见的取值在 5 到 10 左右。CFG 的代价是每一步需要计算两次,推理成本翻倍,所以也有一些蒸馏方法把它“烘焙”进模型里,以节省推理时间。
这个思想后来也被推广到语言模型中,用来增强模型对提示的遵循,以及到音频、视频和机器人动作生成等领域。