让 AI 算无分类器引导:系数大于一,为何结果越过条件预测
调整扩散模型的引导强度时,容易把它想成“无条件结果和有条件结果混合的比例”。但常用CFG系数大于1,已经是外推。让AI只算两维预测,可以看见结果为什么不必落在两份输入之间。
AI模型生成的概念插图:预测方向沿差异继续外推;箭头只表达方向变化,不对应正文的二维坐标,也不是生成效果截图。
先写当前采用的公式
固定同一个带噪输入和同一个时间步。假设无条件噪声预测u=(1,-1),有条件噪声预测c=(3,0)。这两对数字是手工设定的模型输出,不是像素颜色、概率或原始干净图像。本例不使用额外rescale,也不执行后面的采样器更新。
采用Diffusers文档列出的常用形式g=u+s×(c-u)。先求差向量c-u=(2,1),再乘引导系数s,最后加回u。两次预测必须针对同一输入和同一时间步;把不同步的结果相减,已经改变了这项操作的含义。
从中间插值走到外侧
当s=0时,g=(1,-1),回到u;s=1时,g=(3,0),正好是c;s=0.5时,g=(2,-0.5),落在两者中间。到s=2,g=(1,-1)+2×(2,1)=(5,1),两个分量都越过了c。
把公式展开成g=(1-s)u+s c更直观。s=2时,无条件项的系数为-1,有条件项为2。系数虽然仍相加为1,却不再都是非负数,所以它不是通常意义的加权平均,不能用“两份输入各占多少百分比”的直觉限制输出范围。
如果AI得到(4,0),可能只是把c乘了2又误加其他量;如果得到(2,0.5),则需检查减法方向。要求它保留u、c、c-u、s(c-u)、最终g五项,人工只需逐坐标检查两次加减和一次乘法。
同叫引导系数,零点可能不同
原论文及部分实现使用另一种写法g=c+w×(c-u),也就是(1+w)c-wu。它与前式在s=w+1时相等。因此常用形式的s=2,对应原式w=1;若两边都填数字2,原式得到(7,2),常用形式得到(5,1),并不是同一强度。
核对工具参数时,先查它从u还是c开始加差向量。也可问清哪一个参数值对应纯条件预测:常用形式是1,原式是0。只看滑块名称或抄另一篇教程的默认数值,无法保证两套实现可比。实际管线还可能在某些参数范围跳过计算,应继续核对对应实现。
无分类器引导的关键,是组合条件与无条件预测,免去另一个独立分类器提供引导梯度;它不意味着模型没有训练条件信息。组合后的噪声预测还要交给采样器完成后续更新,不能把g直接当作最终生成图片。
更大的系数不保证更好的画面,文档也提示高引导可能损害质量;额外的重缩放和启停时段会进一步改变行为。本文只验证单步代数和参数约定,没有实际生成对照图,不能据这两个向量评判风格、清晰度或提示遵循程度。
资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。


