# 引导强度到底在管什么：为什么调高后更听话，也更容易过曝

从每步跑两遍模型讲起，说清外推、负向提示词和引导蒸馏模型

> CFG · 负向提示词 · 扩散模型 · 引导蒸馏 · 约 7 分钟 · 10 月 18 日

## 本篇要点

1. 引导强度（CFG）做的事，是每一步把“带提示词的预测”减去“空提示词的预测”，再按倍数 w 沿这个方向加回去；w=1 是正常听提示词，w>1 是把提示词造成的偏差外推。
2. 外推不是插值：结果落在两个预测之外，是模型没在这个位置被要求过的极端版本，所以“更听话”和“更容易出界”是同一个动作的两面。
3. 过曝和发腻来自出界后被裁回合法范围：超出上限的数值被压成同一个值，数值之间的差别丢失，高光和颜色过渡就被削平；CFG rescale 和动态阈值是针对这一步的补丁。
4. 负向提示词替换的是“空提示词”那一路，所以 CFG 为 1 时它完全不参与计算；它只能把画面往背离某些特征的方向推，不能删除已经出现的内容。
5. 引导蒸馏模型把 CFG 的效果训练进权重、推理只跑一遍，界面上的数字只是给模型的提示而不是真正的外推，所以调它变化很小、也不容易过曝。
6. CFG 的数值不能跨模型比较，只能在自己的模型上固定种子单独扫；它不能弥补提示词的空洞，模型不认识的概念不会因为调高而变得认识。

---

上一篇讲局部重绘时，重绘幅度管的是“从噪声表的哪一档开始走”。这一篇讲另一根几乎同样常用的滑杆，它作用在每一步去噪上，名字叫引导强度：ComfyUI 和 diffusers 里叫 CFG scale，WebUI 里就叫 CFG Scale，有些界面叫“提示词引导”。

关于它有两句互相矛盾的抱怨：一句是“图不听话，把 CFG 拉高就好了”；另一句是“拉到 12 以上就过曝、发腻、像塑料”。两句都是真的，而且出自同一个机制。弄清楚它，负向提示词为什么常常完全没用、换了模型这根滑杆为什么像失灵，也一起会有答案。

## 每步跑两遍模型，两遍之差就是“提示词的方向”

扩散模型出图要走几十步去噪，每一步都要模型判断“该往哪个方向减噪”。关键在于，同一张中间结果会被问两遍：一遍带着你的提示词，得到**条件预测** $\epsilon_{\text{cond}}$；一遍把提示词置空，得到**无条件预测** $\epsilon_{\text{uncond}}$。空提示词那一遍相当于问模型：“什么都不要求的时候，你会把这张图往哪推？”它给出的是模型自己对“像一张正常图”的判断。两者相减，剩下的就是提示词额外带来的那部分方向。

引导强度 $w$ 干的活，是把这部分方向按倍数加上去[1]：

$$\tilde{\epsilon}=\epsilon_{\text{uncond}}+w\left(\epsilon_{\text{cond}}-\epsilon_{\text{uncond}}\right)$$

三种取值一看就明白：$w=1$ 时结果就是条件预测本身，提示词正常起作用，不加放大；$w=0$ 时结果就是无条件预测，提示词被完全无视；$w=7$ 时条件预测的权重是 7，无条件预测被减掉 6 倍。

对照上一篇：重绘幅度是在“原图”和“纯噪声”两端之间**插值**，两头都是模型见过的合法状态；引导强度在 $w>1$ 时是**外推**，把条件预测沿着“远离无条件预测”的方向推出这条线段的端点之外。$w=7$ 拿到的不是“有提示词”和“没提示词”之间的折中，而是一个模型没在这个位置上被要求过的极端版本。后面所有的副作用都从这一步来。

顺带记一个代价：每步跑两遍模型，开着 CFG 的采样时间差不多是关掉它的两倍。后面讲蒸馏模型要用。

## 为什么调高就更听话

“听话”在机制上就是“朝条件预测指的方向多走几步”。每一步都放大提示词的影响，几十步累积下来，终点被推到条件分布里更典型、更极端的位置。副作用立刻出现：多样性下降。同一个提示词连续出图，越来越像同一种构图、同一种脸，因为所有结果都被推向同一个高峰，而不是散落在周围[2]。

所以调高 CFG 换来的不是“理解得更好”，而是“更用力地照着自己那点理解去做”。模型不认识的东西不会因为 CFG 高就认识，只会把对那个词的近似理解推得更夸张。“红色连衣裙”在 CFG 很高时容易变成满画面泛红，原因就在这里：被放大的方向里包含“红”这个属性，却不包含“只有裙子红”这个限定。

## 为什么调高就会过曝

外推把预测值推出了模型训练时见过的范围。流程要把它们裁回合法区间才能继续算下一步，而裁切很粗暴：超出上限的值一律压成上限。原本 -1.5 和 -3.0 这样大小不同的数值，一裁全都变成 -1，它们之间的差别就没了。

颜色和亮度是有序数值，差别被削平的直接结果就是高光连成一片白、暗部连成一片黑，中间的过渡丢失——画面上看就是过曝、亮部发飘、颜色饱和到不真实、纹理发腻[3]。而且这份代价和收益是绑在一起的：把 CFG 那一步的更新量拆开看，沿着条件预测方向的分量主要在加对比度和饱和度，垂直方向的分量才提升质量，两者比例固定，没法只加质量不加饱和[2]。

界面上有两个针对这一点的补丁。**CFG rescale** 在算完之后把结果的整体离散程度缩放回条件预测的水平，参数从 0 到 1，越大纠正越多[1]。**动态阈值**则是不硬裁到固定范围，而按当前这步的实际分布定界，保住数值之间的大小关系再缩放回来[3]。判断方法很简单：想要的特征已经出现，只是颜色发腻、高光连成片，说明已经出界，往下调或者开 rescale。

## 负向提示词就长在这根滑杆上

负向提示词不是什么独立功能。实现上，它替换的正是公式里 $\epsilon_{\text{uncond}}$ 那一路：本来跑空提示词，现在跑你写的“不要的东西”。于是一步步推的方向，从“远离模型的默认倾向”变成“远离你列出的那些特征”[1]。

这个结构决定了两件事。

**CFG 为 1 时负向提示词等于不存在。** 代进公式，$w=1$ 时 $\tilde{\epsilon}=\epsilon_{\text{cond}}$，无条件那一路被整个消掉，负向词一次乘法都没参与。很多人觉得负向词“没用”，问题就出在这：为了画面柔和、避免过曝把 CFG 调到 1–2，然后奇怪负向词为什么毫无反应。

**负向词只是反向推，并非删除。** 它没法把画面里已经出现的东西擦掉，只能让每一步往背离那些特征的方向偏一点。写“多余的肢体”能减少多手多脚，是因为那确实是个能被推远的方向；写“一只猫”来去掉画面里的猫，效果通常很差，因为扩散过程不是按物体清单编辑的。

也正因为共用一根滑杆，负向词写太多太长，效果和把 CFG 调高是同构的：一端不断加大推力，另一端就更容易出界。

## 为什么在有些模型上这根滑杆像失灵

这几年新出的模型里有大量“引导蒸馏”版本：FLUX.1 dev、SDXL Turbo、各种 LCM 和闪电版。它们在训练时用不同引导强度去生成，让模型学会“一遍就把引导这件事做完”，推理时只跑一遍，省掉一半算力。

代价是你手上那个数字已经不是真正的 CFG。以 FLUX.1 dev 为例，界面上那个 guidance（常推荐 3.5）以数值嵌入的形式喂给模型，只是提示它“该用多强的引导”，模型内部并不做两遍相减再外推的运算[4]。所以在这个范围里上下调，画面变化很小，也基本不会过曝，因为它根本没有外推那一步。想要真正的 CFG 得显式打开（有些界面叫 true CFG），代价是回到两遍计算、速度减半，能用的数值区间也小得多，推到 5 以上就开始掉质量[5]。一步出图的 Turbo、Lightning 类模型更是连“多步累积”都没有，外推失去了作用对象。

## 实际怎么用这个数

**先认清模型类型。** 传统多步模型（SD 1.5、SDXL 基础版、SD3）上 CFG 有真实的外推作用；引导蒸馏模型上它更像一个微弱的方向提示，别指望靠它救画面。

**数值不能跨模型比较。** SD 1.5 常用 7 左右，SDXL 常从 4–7 起调，某些衍生模型的有效区间与别人完全不重叠[5]。抄别人的参数没有意义。

**只动这一个变量，固定种子扫。** 从默认值向两边各走两三档，看提示词里承诺的东西有没有出现。症状对应动作：想要的特征没出现，先怀疑提示词不够具体（这是前面第二篇的事），再轻微上调；出现了但颜色发腻、高光连成片，往下调或开 rescale；每张都长得差不多，也是往下调。不要用提高 CFG 去弥补提示词的空洞，那只会让它更用力地猜。

一句话收尾：引导强度并不表示服从程度；它把“提示词造成的偏差”按倍数外推——放大偏差的同时，也把数值推出了模型熟悉的范围。听懂这句，过曝、发腻、负向词失灵、蒸馏模型上滑杆没反应，就是同一件事的不同侧面。

## 术语表

- 引导强度（CFG / guidance scale）：每步把“带提示词”与“空提示词”两次预测之差按倍数加回去的系数，决定提示词被放大多少。
- 无条件预测：把提示词置空跑同一遍模型得到的结果，代表模型自己判断“像一张正常图”的倾向，是计算提示词影响的基准。
- 外推：沿一个方向越过原有两端继续往前走。CFG 在 w>1 时是外推，上一篇的重绘幅度是插值，这是两者副作用不同的原因。
- 负向提示词：占用“无条件预测”那一路的位置，所以效果强弱直接被引导强度决定，CFG 为 1 时彻底失效。
- 引导蒸馏：训练时把 CFG 的效果学进权重、推理只跑一遍模型；省算力，但界面上的引导数值不再是真正的外推。

## 来源

1. [diffusers: ClassifierFreeGuidance 实现 — CFG 的两种写法、w=1 表示不放大、负向提示词占用无条件那一路、guidance_rescale 参数](https://github.com/huggingface/diffusers/blob/main/src/diffusers/guiders/classifier_free_guidance.py)
2. [Eliminating Oversaturation and Artifacts of High Guidance Scales in Diffusion Models — 把 CFG 更新量分解为平行与正交分量，解释饱和从何而来](https://proceedings.iclr.cc/paper_files/paper/2025/file/d1450d6c10c6b6cf1b80964357f5fa08-Paper-Conference.pdf)
3. [Ho & Salimans, Classifier-Free Diffusion Guidance — 两遍预测再组合的原始做法；Imagen（arXiv:2205.11487）提出的动态阈值用于压制高引导强度下的过曝](https://arxiv.org/abs/2207.12598)
4. [black-forest-labs/flux issue #63 — FLUX.1 dev 的 guidance_embeds 与 schnell 不使用 CFG 的区别，推荐的 3.5 属于引导嵌入](https://github.com/black-forest-labs/flux/issues/63)
5. [Runware: CFG Scale 指南 — 引导蒸馏模型的 CFG 只是数值提示、有效区间远窄于传统 CFG，true CFG 需两遍计算且推荐值更低](https://runware.ai/docs/learn/cfg-scale)

---

原文：https://pangzhengboyin.com/articles/what-cfg-scale-actually-does-382acf35

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
