深夜十一点,你坐进驾驶座,要去一位住在老城区巷子深处的朋友家。手机导航的提示音响起——“前方三百米右转”“驶入主路后靠左行驶”。你面临一个选择:是百分之百执行导航的每一条指令,还是偶尔凭自己对这座城市的直觉自由变道?执行得太死,导航一旦抽风,你就被带进工地;执行得太松,你又可能因为错过关键路口而绕远路。这个“到底多听导航的话”的抉择,每天都在 Stable Diffusion 的采样过程里上演。那个负责调节“听导航程度”的旋钮,叫做 CFG Scale(Classifier-Free Guidance Scale,无分类器引导强度)。它决定了去噪模型在多大程度上听从文本提示词的指挥:关掉它,模型画什么都像梦游;调到中等,它乖乖还原你的描述;拧到最大,画面便像过度听信导航一样冲进湖里——色彩过曝、细节崩坏。

岗位关联

学会 CFG Scale,等于给图像生成装上一只“曝光表”:懂得它的数学原理与调节手感,你才能在贴合提示词与保留创作自由之间游走自如。这是每位 AIGC 创作者必备的基本功。

目录
  1. 可视化演示
  2. CFG数学原理
  3. 条件与无条件
  4. 强度与多样性
  5. 负向提示词
  6. 参数调优实战
  7. 过曝伪影处理
  8. 实战排查流程
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示扩散模型双路径推理机制、CFG引导强度对图像质量与多样性的权衡、负向Prompt协同工作原理,交互调节CFG值查看效果变化。

本节配有交互动效(进入视口后自动加载,约 3KB)。

CFG双路径推理机制 条件路径:文本引导噪声预测ε_cond 无条件路径:空文本噪声预测ε_uncond ε=ε_uncond+s·(ε_cond-ε_uncond) CFG通过线性插值融合两条路径的噪声预测

CFG数学原理

导航不是凭空开口的。在你深夜出发前,导航已经做了两件事:拿到你手机上报的“当前位置”,读入你输入的目的地。然后它结合地图数据库,给出“前方右转”的指令。Stable Diffusion 里的“导航”——噪声预测网络也是同样的工作模式:它拿到当前版本的图像状态,抬头看一眼你写的文本提示,再参照自己在大规模图像上学到的“城市地图”(模型参数),输出一条指向“去噪方向”的建议。

但如果你把文本提示撤掉,只在输入里留一个空占位符,导航就变成了“盲导”——它不知道该把你往哪送,只能凭对城市平均路况的记忆给出一个最平庸的建议。前者叫“条件预测”,后者叫“无条件预测”。CFG 的核心思想,就是把这两个建议放到一起看:条件建议与直觉建议差多少,差出来的方向,就是提示词真正想让你去的地方。

ϵ^=ϵθ(zt,∅)+w×[ϵθ(zt,c)−ϵθ(zt,∅)]\hat{\epsilon} = \epsilon_\theta(z_t, \varnothing) + w \times \left[ \epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \varnothing) \right]

1. 无条件预测项:去噪网络不看任何文本提示,只凭当前的带噪图像 \( z_t \) 预测噪声,这是生成的“直觉基线”。

ϵθ(zt,∅)\epsilon_\theta(z_t, \varnothing)

2. 条件预测项:去噪网络在文本嵌入 \( c \) 的引导下预测噪声,代表导航给出的“路线建议”。

ϵθ(zt,c)\epsilon_\theta(z_t, c)

3. 引导向量:条件预测减去无条件预测,得到文本提示带来的方向修正量,这是引导的核心动力。

Δ=ϵθ(zt,c)−ϵθ(zt,∅)\Delta = \epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \varnothing)

4. 缩放因子加权:用引导强度 \( w \) 放大或缩小修正量,\( w \) 越大,提示词的影响力越强。

w×Δw \times \Delta

5. 合成引导噪声:在直觉基线上叠加加权后的修正量,得到真正用于去噪的混合噪声。

ϵ^=ϵθ(zt,∅)+w×Δ\hat{\epsilon} = \epsilon_\theta(z_t, \varnothing) + w \times \Delta

所以 CFG Scale 并不是一个“油门”,它是一个“差值放大器”。它不直接决定图像长什么样,而是决定“提示词与直觉的分歧”被放大到什么程度。信任导航的差值多一点,画面就往提示词方向多挪一点;这不正是你在车里做的动作吗——采纳导航的修正,而不是完全丢掉自己的驾驶直觉。

条件与无条件

深夜开车,最考验人的不是技术,而是“方向感从哪来”。如果手机没电、导航失灵,你只能靠平时对这座城市的模糊印象——哪条路热闹、哪条街是单行线——这就是无条件生成:模型没有文本可看,只能依赖训练数据里学到的“平均世界”,画出来的东西像一张没有主题的信手涂鸦,看着合理,却抓不住重点。

当你把“一只戴着草帽的柴犬在沙滩上”写进提示词,导航就上线了。文本编码器把这句话变成一个高维向量,注入噪声预测网络,模型开始把每一次去噪都往“戴草帽的柴犬”方向拉扯。注意:条件预测并不是凭空新建一张图,而是在同一个模型里,用文本条件改变了输出的噪声分布。

zt−1(∅)=zt−ϵθ(zt,∅),zt−1(c)=zt−ϵθ(zt,c)z_{t-1}^{(\varnothing)} = z_t - \epsilon_\theta(z_t, \varnothing), \qquad z_{t-1}^{(c)} = z_t - \epsilon_\theta(z_t, c)

1. 无条件去噪路径:不提供任何文字信息,模型依靠训练数据形成的先验完成一步去噪,结果偏向“平均化”的图像。

zt−1(∅)=zt−ϵθ(zt,∅)z_{t-1}^{(\varnothing)} = z_t - \epsilon_\theta(z_t, \varnothing)

2. 条件去噪路径:注入文本条件 \( c \) 后,模型预测的噪声包含了“语义修正”,去噪结果明显向提示词描述的内容靠拢。

zt−1(c)=zt−ϵθ(zt,c)z_{t-1}^{(c)} = z_t - \epsilon_\theta(z_t, c)

3. 两条路径的差异:把两条路径的预测噪声相减,得到的就是“文本条件带来的语义方向”,CFG 正是沿这个方向施加拉力。

zt−1(c)−zt−1(∅)=ϵθ(zt,∅)−ϵθ(zt,c)z_{t-1}^{(c)} - z_{t-1}^{(\varnothing)} = \epsilon_\theta(z_t, \varnothing) - \epsilon_\theta(z_t, c)

两条路径就像同一个司机的两种状态:没有导航时,他凭肌肉记忆开;有导航时,他按前方路牌开。CFG 要做的,就是不断把这两个状态下的方向盘角度相减,提取出“路牌到底在纠正什么”。条件与无条件越不同,说明提示词越有主见,引导向量也越强劲。

强度与多样性

你终于开上了城市快速路,导航说“保持直行”,但你开始纠结:完全听导航,是不是会错过路边那家传说中很好吃的夜宵摊?信任度调到最低,你会自由变道,享受探索的乐趣,但也可能开到一个和目的地毫无关系的地方;信任度调到最高,你目不斜视直奔终点,一路上什么风景都没看到。

这个“自由探索 vs 直奔主题”的矛盾,映射到图像生成上就是多样性(diversity)与贴合度(fidelity)的经典权衡。\( w \) 很小时,模型几乎只按条件预测去噪,但因为没有额外的“放大推力”,提示词的约束很松,同一提示词能生成差异很大的构图;\( w \) 很大时,模型把每一处“提示词与直觉的分歧”都当成圣旨,图像确实非常贴题,但所有样本都挤向同一个狭窄的峰值,几乎失去了变化空间。

lim⁡w→1+ϵ^=ϵθ(zt,c),lim⁡w→∞ϵ^≈w⋅[ϵθ(zt,c)−ϵθ(zt,∅)]\lim_{w \to 1^{+}} \hat{\epsilon} = \epsilon_\theta(z_t, c), \qquad \lim_{w \to \infty} \hat{\epsilon} \approx w \cdot \left[ \epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \varnothing) \right]

1. 低档极限:当 \( w \) 从右侧趋近 1 时,修正量被完全保留但不再放大,结果恰好是纯条件预测,提示词温和生效。

lim⁡w→1+ϵ^=ϵθ(zt,c)\lim_{w \to 1^{+}} \hat{\epsilon} = \epsilon_\theta(z_t, c)

2. 高档极限:当 \( w \) 趋于无穷时,直觉基线项被淹没,只剩被无限放大的差值项,图像被强行拽向提示词。

lim⁡w→∞ϵ^≈w⋅[ϵθ(zt,c)−ϵθ(zt,∅)]\lim_{w \to \infty} \hat{\epsilon} \approx w \cdot \left[ \epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \varnothing) \right]

3. 多样性崩溃:差值项本身携带随机波动,无条件基线的“自由感”被压制后,同一批种子生成的图像会高度雷同。

Δshared=ϵθ(zt,c)−ϵθ(zt,∅)\Delta_{\text{shared}} = \epsilon_\theta(z_t, c) - \epsilon_\theta(z_t, \varnothing)

这就像你一次次提高导航音量:刚开始,提示词的声音盖过了你的直觉,图像变得“听话”;可音量开到最大,满耳朵都是“左转左转左转”的机器音,你反而听不见路况,动作变形,撞上护栏。回看 CFG:7 附近往往是“听得清导航又不失判断力”的甜点区,10 以上就进入“路怒”区间了。

负向提示词

有导航不等于无忧无虑。有些路你心里是有数的:不想走高架,太堵;不想走河边,怕车技不够。导航也懂这个——你可以在设置里勾选“避开高速”“避开收费路段”。在 Stable Diffusion 里,这个“避开”的开关就是负向提示词(negative prompt)。

普通提示词是正向条件,告诉模型“要什么”;负向提示词是另一个文本嵌入,告诉模型“不要什么”——比如“水印、模糊、畸形手指、过曝”。模型同样会对负向条件做一次条件预测,得到一个“反面教材的引导方向”,然后在最终的引导里把它减掉,形成一条安全走廊。

ϵ^=ϵθ(zt,∅)+wp⋅[ϵθ(zt,cp)−ϵθ(zt,∅)]−wn⋅[ϵθ(zt,cn)−ϵθ(zt,∅)]\hat{\epsilon} = \epsilon_\theta(z_t, \varnothing) + w_p \cdot \left[ \epsilon_\theta(z_t, c_p) - \epsilon_\theta(z_t, \varnothing) \right] - w_n \cdot \left[ \epsilon_\theta(z_t, c_n) - \epsilon_\theta(z_t, \varnothing) \right]

1. 正向条件嵌入:正向提示词 \( c_p \) 描述“想要的内容”,生成正向引导向量。

ϵθ(zt,cp)−ϵθ(zt,∅)\epsilon_\theta(z_t, c_p) - \epsilon_\theta(z_t, \varnothing)

2. 负向条件嵌入:负向提示词 \( c_n \) 描述“想避免的内容”,同样得到一条引导向量。

ϵθ(zt,cn)−ϵθ(zt,∅)\epsilon_\theta(z_t, c_n) - \epsilon_\theta(z_t, \varnothing)

3. 正向引导加权:用正向强度 \( w_p \) 放大“要什么”的修正力度。

wp⋅[ϵθ(zt,cp)−ϵθ(zt,∅)]w_p \cdot \left[ \epsilon_\theta(z_t, c_p) - \epsilon_\theta(z_t, \varnothing) \right]

4. 负向引导削减:用负向强度 \( w_n \) 减去“不要什么”的方向,把模型推离雷区。

−wn⋅[ϵθ(zt,cn)−ϵθ(zt,∅)]- w_n \cdot \left[ \epsilon_\theta(z_t, c_n) - \epsilon_\theta(z_t, \varnothing) \right]

5. 双向合成:最终引导噪声同时包含“靠近正向”与“远离负向”两种力量。

ϵ^=ϵu+wp Δp−wn Δn\hat{\epsilon} = \epsilon_u + w_p \, \Delta_p - w_n \, \Delta_n

回看导航:正向导航给你“该走的路”,负向导航给你“千万别走的路”,两个声音一加一减,你就在这条安全走廊里稳稳前进。注意负向提示词的权重 \( w_n \) 并不是越大越好——把“避开”拉满,等于导航反复警告“前面有坑”,你反而会因为过度紧张而手忙脚乱,生成出另一种奇怪伪影。

参数调优实战

熟悉城市的老司机从不把导航音量调到一个固定值走天下:高速上听个大概,进了老城区就调大声音逐句听。CFG Scale 的调节同样讲究“路况适配”,你生成的题材不同,甜点区间也不同。

经验上:写实人像、产品展示这类“必须贴题”的场景,CFG 7-10 之间能兼顾还原与自然;概念插画、风格探索这类“要留白”的场景,4-6 更舒服;一旦画面里要出现文字、Logo 这类“差一点就穿帮”的元素,可以大胆上到 10-12,代价是要防着伪影;超过 15 就进入危险区,画面会像过度锐化的照片一样发硬。

Score(w)=α⋅align(xw,c)−β⋅art(xw)\text{Score}(w) = \alpha \cdot \text{align}(x_w, c) - \beta \cdot \text{art}(x_w)

1. 贴合度项:衡量生成图像 \( x_w \) 与提示词 \( c \) 的语义匹配程度,\( w \) 越大通常越贴合。

align(xw,c)\text{align}(x_w, c)

2. 伪影成本项:衡量图像中的过曝、锯齿等画质损伤,\( w \) 过高时急速上升。

art(xw)\text{art}(x_w)

3. 权衡系数:\( \alpha \) 与 \( \beta \) 分别控制“贴题”与“画质”两项目标的优先级,可由创作者按题材调整。

α,β>0\alpha, \beta > 0

4. 最优档位:找一个 \( w \) 使总分最高,那个位置就是你的甜点区。

w∗=arg⁡max⁡wScore(w)w^{*} = \arg\max_{w} \text{Score}(w)

别人给不了你一个万能档位,就像没人能告诉你“导航音量永远调到 60%”。真正高效的做法是把调参当成选歌单:先粗筛几个档位各生成一张,看哪张“顺耳”,再在附近微调。把贴合度与伪影两个指标装在心里,你就不需要背参数表了。

过曝伪影处理

导航最离谱的时刻是什么?它气定神闲地对你说“请直行进入湖泊”。你如果百分之百信任它,下一秒就连人带车泡水里了。CFG 拉满时,模型也会说出类似鬼话——它无比自信地把颜色推成高饱和的塑料质感,把皮肤画成蜡像,把边缘画出刺眼的锯齿,这就是“过曝伪影”(over-exposure artifacts)。

为什么高 CFG 必然带来伪影?回到公式,被 \( w \) 放大的那个修正量本身也是随机变量,含有噪声成分。当你把修正量放大 \( w \) 倍,它的波动幅度会按 \( w \) 的平方速度膨胀——直觉项还保持在正常范围,修正项却已经像打满鸡血一样横冲直撞。

Var(ϵ^)≈Var(ϵu)+w2⋅Var(Δ)\text{Var}(\hat{\epsilon}) \approx \text{Var}(\epsilon_u) + w^2 \cdot \text{Var}(\Delta)

1. 方差分解:混合引导噪声的方差由两个独立来源构成——无条件基线本身、以及被加权的修正量。

Var(ϵ^)≈Var(ϵu)+Var(w⋅Δ)\text{Var}(\hat{\epsilon}) \approx \text{Var}(\epsilon_u) + \text{Var}(w \cdot \Delta)

2. 平方放大:修正量缩放 \( w \) 倍后,其方差变为 \( w^2 \) 倍,这是伪影爆炸的数学根源。

Var(w⋅Δ)=w2⋅Var(Δ)\text{Var}(w \cdot \Delta) = w^2 \cdot \text{Var}(\Delta)

3. 过曝表现:\( w \) 越大,采样轨迹的波动越剧烈,色彩偏移、细节崩坏等伪影越明显。

Var(ϵ^)≈Var(ϵu)+w2⋅Var(Δ)\text{Var}(\hat{\epsilon}) \approx \text{Var}(\epsilon_u) + w^2 \cdot \text{Var}(\Delta)

这解释了为什么“降档”是最有效的修复手段:把导航音量从 20 调回 7,画面立刻从“暴走”状态恢复平静。如果降档后又觉得贴题不够,可以换个思路——不是继续加音量,而是把负向提示词加上“过曝、塑料感、锯齿”,让模型绕开这些雷区。

实战排查流程

老司机拿到一条陌生路线,不会一把油门踩到底,而是先来一次“试驾”:低速跑一遍,确认路况,再决定每段开多快。排查 CFG 也一样——它是一场有方法的实验,而不是靠运气抽卡。

标准动作是分档对照:固定提示词、采样器和步数,用不同档位各生成一张,几张图排在一起,选出那个“既不松散也不过曝”的档位。然后进入微调:主体不满意,就加强正向提示词里对应词组的权重;背景脏乱差,就补一句负向提示词。最后做质量验收——放大看边缘、看皮肤、看文字,确认没有伪影后再定稿。

w∗=arg⁡min⁡w∈W[α⋅(1−align(xw,c))+β⋅art(xw)]w^{*} = \arg\min_{w \in \mathcal{W}} \left[ \alpha \cdot \left( 1 - \text{align}(x_w, c) \right) + \beta \cdot \text{art}(x_w) \right]

1. 候选档位集合:先圈定一组离散的候选值,比如常见的 \( \mathcal{W} \) 集合,覆盖从低到高的代表性档位。

W={w1,w2,w3,…,wn}\mathcal{W} = \{ w_1, w_2, w_3, \dots, w_n \}

2. 对齐惩罚项:\( 1 - \text{align} \) 表示“不够贴题”的代价,值越大说明画面离提示词越远。

α⋅(1−align(xw,c))\alpha \cdot \left( 1 - \text{align}(x_w, c) \right)

3. 伪影惩罚项:\( \text{art} \) 表示画质损伤的代价,档位过高时这一项迅速抬升。

β⋅art(xw)\beta \cdot \text{art}(x_w)

4. 最优档位:找出让总代价最小的那个 \( w \),就是本次任务的最佳引导强度。

w∗=arg⁡min⁡w∈W[α⋅(1−align(xw,c))+β⋅art(xw)]w^{*} = \arg\min_{w \in \mathcal{W}} \left[ \alpha \cdot \left( 1 - \text{align}(x_w, c) \right) + \beta \cdot \text{art}(x_w) \right]

这套流程本质上是把“导航信任度”当成一个可调旋钮,用对照试验找到它的最佳位置。等你对几个题材多跑几轮,就会形成肌肉记忆——看到一张过曝图,你不再盲目地猛拉 CFG,而是下意识先降档,再补负向提示词,最后在几张候选图里挑出最顺眼的那张。这就是创作者与工具之间的默契。

AI 应用场景

电商产品主图生成

阶段:图像生成与精修

解决的问题:传统方式拍摄产品图成本高、周期长;AI 生成时如果 CFG 太低,产品形状和 Logo 会被改得面目全非。把 CFG 调到 8-10,模型会非常听话地还原产品描述;再配上一句负向提示词“文字扭曲、水印、模糊”,出图质量就能直接商用。

具体案例:某电商设计团队生成一款保温杯的主图。提示词写“奶油白色保温杯,磨砂质感,极简桌面布景”,CFG 从 6 一路试到 11,最后锁定 9:杯身造型精准,品牌 Logo 一个笔画都不歪;而 CFG=6 时杯口形状明显走形,CFG=12 时背景出现过曝噪点。

游戏概念美术灵感发散

阶段:创意构思与草图

解决的问题:概念设计需要“多而不腻”的方案,高 CFG 会让所有草图千篇一律。把 CFG 降到 4-5,模型保留提示词的大方向,但在光影、构图、服饰细节上留出大量随机性,一次出多张草稿,每张都有不同的气质,方便美术挑选拼贴。

具体案例:某独立游戏团队设计“废弃机械城”场景,提示词只写核心元素,CFG=4 生成 20 张概念图,从中挑出 3 张差异最大的再喂给图生图精修,大幅提升了灵感筛选效率。

图像瑕疵批量修复

阶段:后期修复与质量控制

解决的问题:高 CFG 图生图重绘时人脸容易塑料化,需要负向提示词与 CFG 协同。做法是保持 CFG 7-8,在负向提示词里写“塑料皮肤、过度锐化、油光”,让模型知道绕开这些雷区,而不是盲目降低引导强度牺牲贴题度。

具体案例:照片转二次元风格时,原始素材携带噪点和瑕疵,团队用 CFG=8 加上负向提示词“瑕疵、噪点、五官畸形”批量修复了 500 张素材,一次通过率达 85%,将人工修图时间压缩了六成。

Python 演示

python52 行
"""Toy demo: CFG Scale guided denoising (educational, no real diffusion)."""import numpy as np  class CFGSimulator:    def __init__(self, size=32, seed=0):        self.size = size        self.rng = np.random.default_rng(seed)        # concept maps act as text embeddings        self.apple = self._make_blob(self.size // 2, self.size // 2, radius=4.0)        self.house = self._make_blob(self.size // 2, self.size // 4, radius=6.0)     def _make_blob(self, cy, cx, radius):        y, x = np.ogrid[:self.size, :self.size]        dist2 = (x - cx) ** 2 + (y - cy) ** 2        return np.exp(-dist2 / (2 * radius * radius))     def predict_noise(self, latent, embedding):        """Mock noise predictor: unconditional drifts, conditional points to concept."""        drift = latent * 0.1        if embedding is None:            return drift + self.rng.normal(0, 0.01, latent.shape)        return drift + embedding * 0.8     def denoise_step(self, latent, embedding, cfg, step_size=0.1):        eps_uncond = self.predict_noise(latent, None)        eps_cond = self.predict_noise(latent, embedding)        eps_guided = eps_uncond + cfg * (eps_cond - eps_uncond)        return latent - step_size * eps_guided     def run(self, prompt="apple", cfg=7.0, steps=50):        if prompt == "apple":            emb = self.apple        else:            emb = self.house        latent = np.random.default_rng(42).normal(0, 1, (self.size, self.size))        for _ in range(steps):            latent = self.denoise_step(latent, emb, cfg)        return latent     @staticmethod    def alignment(latent, embed):        return float(np.mean(latent * embed) / np.sqrt(np.mean(embed ** 2)))  if __name__ == "__main__":    sim = CFGSimulator()    for cfg in [1.0, 3.0, 7.0, 15.0]:        out = sim.run(prompt="apple", cfg=cfg)        score = sim.alignment(out, sim.apple)        max_abs = float(np.max(np.abs(out)))        print("cfg=%5.1f  alignment=%.3f  max_abs=%6.2f" % (cfg, score, max_abs))
目的:用玩具模型演示 CFG 核心公式——无条件与条件预测做差并缩放,观察不同引导强度下“贴合度”与“极端值”的同步增长。
  1. drift = latent * 0.1模拟无条件分支的“惯性漂移”,相当于关掉导航后凭直觉开车。
  2. if embedding is None: return drift + self.rng.normal(...)无条件分支只输出平庸的漂移预测。
  3. return drift + embedding * 0.8条件分支被文本概念像导航一样持续拉拽。
  4. eps_guided = eps_uncond + cfg * (eps_cond - eps_uncond)CFG 核心公式的代码表达,一行完成“直觉 + 差值放大”。
  5. latent = latent - step_size * eps_guided按引导噪声走一步去噪,相当于按导航指令修正一次方向。
  6. latent = np.random.default_rng(42).normal(...)固定种子保证不同 CFG 从同一个起点出发,对照才公平。
  7. for cfg in [1.0, 3.0, 7.0, 15.0]:分档对照测试的标准写法,跑完四档即可观察趋势。

常见误区

误区我一直以为 CFG 就是“听话程度”,所以每次生成都把引导强度拉到 15 以上,觉得数字越大,提示词执行得越彻底,画面就越清晰。

正解CFG 放大的是“条件预测与无条件预测的差值”,而这个差值里混着噪声。\( w \) 越高,噪声波动按 \( w^2 \) 放大,画面会变得色彩过曝、边缘锯齿、皮肤塑料化——不是更清晰,而是更像过度锐化后的劣质 HDR。真正的甜点区通常在 4-12,超过 15 就要警惕伪影。

为何常见:“越大越强”是生活中调控旋钮的直觉(音量、亮度),但 CFG 放大的是差值信号与噪声的混合体,简单类比在这里失效。

误区我理解的 CFG 最低是 1,那 1 就应该是“无引导”,也就是完全忽略提示词、随便生成。

正解CFG=1 时公式是 \( \hat{\epsilon} = \epsilon_u + 1 \times (\epsilon_c - \epsilon_u) = \epsilon_c \),也就是纯条件预测——提示词仍然全程参与去噪,只是不再被额外放大。真正“无引导”是 \( w=0 \),即纯无条件生成,但大多数界面把下限设成了 1,所以 CFG=1 绝不是“没写提示词”。

为何常见:把“引导强度”误当成“提示词开关”,忽略了 CFG 的本质是差值缩放,而不是条件本身的有无。

误区负向提示词既然能帮我排除水印和畸形,那我多写几段“不要这不要那”,再配合高 CFG,一定出完美图。

正解负向提示词的工作方式同样是提取“条件预测与无条件预测的差值”再反向减掉。写得太杂或权重过高,会把模型推向一个同样不自然的极端,产生灰蒙感、细节丢失或构图空泛。正向提示词管“要什么”,负向提示词管“不要什么”,两者要像油门刹车一样平衡使用。

为何常见:视觉上负向提示词的确能快速消除明显瑕疵,让人误以为“排除得越多越干净”,忽略了过度排除的副作用。

误区我在 A 采样器上调出的 CFG=8 很好用,就把这个值复制到 B 采样器上,结果图崩了,我还以为是模型问题。

正解不同采样器对引导的响应曲线不同:DDIM、Euler a、DPM++ 2M 等对高 CFG 的耐受度差异明显,同一 CFG 在某些采样器上已经过曝,在另一些上才刚刚好。更换采样器后,应该用分档对照重新标定 CFG。

为何常见:人们习惯把参数当成跨工具的“万能设置”,忽略了采样器本身也在影响去噪轨迹的平滑度,CFG 的甜点区自然随之迁移。

面试题

Q1. CFG Scale 在数学上主要起什么作用?

单选题 · easy

  • A.放大条件与无条件预测的差值← 正确答案
  • B.直接修改生成模型的权重
  • C.增加训练集的图像数量
  • D.提升输出图像的分辨率

答案:A。CFG 的核心公式是“无条件预测 + w × 差值”,它放大的是条件与无条件预测之间的方向修正量,并不改动模型权重、训练数据或分辨率。A 描述准确,其余选项都是对 CFG 作用的误解。

Q2. CFG=1 时,图像生成效果接近哪种状态?

单选题 · easy

  • A.纯无条件生成的结果
  • B.纯条件预测的结果← 正确答案
  • C.完全随机噪声的结果
  • D.全黑图像的输出结果

答案:B。代入公式 \( \hat{\epsilon} = \epsilon_u + 1 \times (\epsilon_c - \epsilon_u) = \epsilon_c \),恰好是纯条件预测。提示词仍然在起作用,只是没有被额外放大。A 是 w=0 的情形,C 和 D 与 CFG 无关。

Q3. 将 CFG 从 7 提升到 20,最可能出现什么现象?

单选题 · mid

  • A.色彩过饱和与伪影增多← 正确答案
  • B.生成速度大幅提升
  • C.输出图像分辨率增加
  • D.采样步数自动减少

答案:A。高 CFG 使修正量的方差按 w² 放大,采样轨迹剧烈波动,典型表现是色彩过饱和、边缘锯齿、细节崩坏。CFG 不影响速度、分辨率和步数,这些由采样器与图像尺寸决定。

Q4. 负向提示词在 CFG 框架中的角色是什么?

单选题 · mid

  • A.提供反向修正的引导向量← 正确答案
  • B.显著提升采样计算速度
  • C.自动优化图像的空间尺寸
  • D.代替正向提示词的作用

答案:A。负向提示词也会做一次条件预测,得到“不要什么”的引导向量,然后从总引导中减去,相当于导航里的“避开路段”设置。它不加速、不改尺寸,也不能替代正向提示词。

Q5. 下列哪些方式可以缓解高 CFG 导致的过曝伪影?

多选题 · mid

  • A.适当降低 CFG 数值← 正确答案
  • B.无限放大负向提示词
  • C.更换适配的采样器← 正确答案
  • D.降低输出图像分辨率

答案:AC。降档是直接减小方差放大效应;更换对高 CFG 耐受度更好的采样器也能平滑轨迹。无限放大负向提示词会引入新的不稳定,降低分辨率与伪影无直接因果关系。

Q6. 在公式 \( \hat{\epsilon} = \epsilon_u + w \times (\epsilon_c - \epsilon_u) \) 中,当 w>1 时起什么作用?

单选题 · hard

  • A.放大提示词与直觉的差值← 正确答案
  • B.直接消除采样过程的噪声
  • C.让生成退化为无条件模式
  • D.压缩提示词对图像的引导

答案:A。w>1 意味着对条件与无条件的差值做放大,提示词的影响力被增强,方向修正更激进。B 是去噪本身做的事,C 对应 w=0,D 对应 w<1 的压缩行为。

Q7. 关于无条件预测 \( \epsilon_\theta(z_t, \varnothing) \),下列说法正确的有哪些?

多选题 · hard

  • A.生成结果与条件预测完全相同
  • B.输入中不包含任何文本信息← 正确答案
  • C.提供引导修正的基线方向← 正确答案
  • D.等价于随机高斯噪声本身

答案:BC。无条件预测使用空文本占位符,不含文本信息,同时它在公式里充当基线与条件预测做差,提供修正方向。它仍是模型的预测输出而非随机噪声,也与条件预测不同。

Q8. 在实际使用中,CFG 的理想常用范围通常是?

单选题 · easy

  • A.通常在 1 到 3 之间
  • B.通常在 4 到 12 之间← 正确答案
  • C.通常在 20 到 30 之间
  • D.通常在 50 到 100 之间

答案:B。经验上 CFG 4-12 是多数场景的甜点区:太低贴题不足,太高伪影泛滥。1-3 偏松弛,20 以上几乎必现过曝,50 以上早已失去实际用途。

Q9. CFG 过低(接近 1)可能带来哪些问题?

多选题 · mid

  • A.内容与提示词相关性下降← 正确答案
  • B.主体构图容易发生漂移← 正确答案
  • C.出现大量过曝伪影
  • D.图像色彩严重过饱和

答案:AB。低 CFG 时提示词的修正力不足,模型更依赖训练先验,容易出现主体不贴题、构图漂移。过曝与过饱和是高 CFG 的典型问题,与低 CFG 相反。

Q10. 在带负向提示词的 CFG 公式中,负向引导项的作用方向是?

单选题 · hard

  • A.与正向提示方向相反的修正← 正确答案
  • B.与无条件预测完全相同的方向
  • C.放大正向提示词的引导
  • D.对图像方向无任何实际影响

答案:A。负向引导项以减号形式进入合成公式,\( -w_n (\epsilon_{c_n} - \epsilon_u) \),把模型推离负向提示描述的内容,即与“要什么”方向相反的修正。它不会等于无条件方向,更不会放大正向引导。