「图太糊了,把 CFG 调高点」——这句话在社区里流传很广,但它经常把问题弄得更糟。要理解为什么,得先知道 CFG 到底在算什么。

CFG 的数学含义

Classifier-Free Guidance 做的是两次预测的线性组合:

最终预测 = 无条件预测 + CFG × (条件预测 − 无条件预测)

无条件预测是「不看提示词时模型想画什么」,条件预测是「看着提示词时模型想画什么」。两者相减得到的是「提示词带来的方向」。CFG 就是这个方向的放大倍数。

所以 CFG 不是「服从度开关」,而是方向放大器的增益。增益调太大,信号会削顶。

CFG 过高的三个症状

  • 过饱和:颜色艳得不自然,像被拉过对比度。
  • 边缘发硬:物体轮廓像抠图贴上去的,缺少过渡。
  • 细节崩坏:放大看,纹理变成重复的噪点或色块。

这三件事是同一个原因:条件方向被放大到超出模型训练时见过的范围,输出进入它没学过的区域。

CFG 过低的两个症状

  • 不听话:写了「红色外套」,出来是灰的。
  • 构图松散:主体偏移、残缺、比例失调。

低 CFG 相当于让模型多自由发挥。它可能出很自然的图,但那不一定是你想要的图。

所以区间在哪

CFG表现适合
1–3几乎无视提示词基本不用
4–6宽松、自然、易偏离艺术化、氛围优先
7–9平衡绝大多数场景
10–12开始过饱和需要强约束时短时使用
13+崩坏不建议

还要注意不同模型的耐受度不一样。SDXL 系通常对高 CFG 更敏感,7 就已经很紧;部分二次元向的底座能扛到 9–10。

负面提示词不是万能挡板

负面提示词的作用是「把画面往远离这些概念的方向推」。它和正向提示词共用同一个条件空间,所以:

  • 它能削弱模型本来想画的东西。
  • 它不能阻止模型从没打算画的东西。

举例:提示词里写了「人群」,负面里写「多人」,这两个是直接冲突的,结果通常是画面里人变少但不为零。而如果你没提「人群」,负面写「多人」也不会让背景自动变干净——因为模型本来就没打算画人。

这解释了为什么「堆一长串负面提示词」常常无效:大部分词对应的东西,模型压根没生成。

真正有用的负面提示词长什么样

只写三类:

  1. 结构性缺陷:extra fingers, deformed hands, bad anatomy, watermark, text
  2. 画质缺陷:blurry, jpeg artifacts, lowres
  3. 你不想要的画风:3d render, cartoon(只在确实冲突时写)

其余一大串「ugly, bad, worst quality」之类的词,作用接近于零——它们没有具体的视觉指向,模型无法把它们对应到某种可去除的特征。

按症状倒推,而不是凭感觉调

症状先查什么再查什么
画面糊、结构没定型步数是否低于 15denoise 是否不是 1.0
过饱和、边缘发硬CFG 是否超过 11画质词是否堆太多
完全不听话CFG 是否低于 5提示词是否超过 token 窗口被截断
手部畸形分辨率是否远超训练分辨率是否缺 hand 相关负面词
整体发灰VAE 是否缺失或不匹配—

最后一行值得单独说:发灰几乎永远不是 CFG 的问题。它看起来像对比度不足,实际是潜空间解码时色彩空间没对上。调 CFG 到 15 也不会好,只会让它灰得发艳。

一个可复现的调参流程

  1. 固定种子。
  2. CFG 取 7,出基准图。
  3. 只改 CFG 到 5,出图。对比:服从度降了多少,自然度升了多少。
  4. 只改 CFG 到 10,出图。对比:是否开始过饱和。
  5. 在 5–10 之间定一个点,然后锁定,不再动它。

CFG 定下来之后,剩下的问题才轮到提示词和模型。反过来做,你永远不知道是哪个变量在起作用。