想象你是录音棚里的调音师。正在处理一段人声录音——原始信号叫“干信号”,干净、真实,但少了点味道;你把它送到混响效果器,出来的叫“湿信号”,有了空间感,但可能模糊了原声。调音台上有个“干湿比”旋钮,往左拧是纯干,往右拧是纯湿,甚至能拧到“湿过头”的程度——干信号不变,湿信号被放大到超过原始比例。这个旋钮,就是本文的主角:Classifier-Free Guidance(CFG)中的引导强度。 扩散模型生成图片时也面临同样的困境。给定一句话“一只戴帽子的柴犬”(条件),模型既想忠实于这句话,又想保持图像的自然与多样。CFG 提出了一种聪明的做法:让同一个模型同时学习“收到条件时”和“收不到条件时”两种预测方式。生成时,用条件预测减去无条件预测,得到一个“条件带来的方向”,再乘以引导强度 \(s\) 加回到无条件预测上。\(s\) 越大,生成结果越听话;\(s\) 越小,越自由发挥。这就像调音师拧动干湿比旋钮,在“忠诚”和“灵气”之间寻找平衡。
掌握 CFG 是进入文生图时代的门票。Stable Diffusion、Imagen、DALL·E 系列都以 CFG 为默认引导方式,理解它的公式与调参手感,是你调试一切基于扩散模型的生成任务的起点。
目录
可视化演示
可视化展示Classifier-Free Guidance核心原理:条件与无条件预测组合、引导强度参数控制、CFG与Classifier Guidance对比,交互切换理解扩散模型引导技术。
本节配有交互动效(进入视口后自动加载,约 3KB)。
CFG引导公式可视化 条件预测\u03b5(x,c) 无条件预测\u03b5(x,\u2205) \u03b5_cfg = (1+w)\u03b5_c - w\u03b5_u CFG组合条件与无条件预测实现引导
双路信号:条件与无条件生成
录音时,调音师会先在干路上录一版原始声音,再把信号分出一条湿路送去效果器。两条路共享同一个输入源,却输出不同的音色。扩散模型的训练也这样安排:同一个神经网络被要求同时会两件事——看见标签“柴犬”时预测带柴犬特征的噪声方向(条件生成),看见一个空白标记 \(\varnothing\) 时预测普通的噪声方向(无条件生成)。
这两个能力不是分两个模型训练的,而是在一次训练中靠“随机翻转”得到的:每次迭代,以概率 \(p\) 把条件 \(y\) 换成空标记 \(\varnothing\)。于是网络被迫学会在没有条件时也能给出合理预测。这就像录制时偶尔拔掉效果器的输入线,逼着干路也录到及格线以上,将来混音才有素材可用。
训练目标仍是标准的去噪损失,只是输入的条件有时是 \(y\)、有时是 \(\varnothing\):
这样训练完的模型就像一台上好干湿两路的调音台,随时可以单独输出“干净版”和“效果版”,供混音时选择。
- 期望符号对所有时间步、所有加噪样本、所有真实噪声以及所有丢弃标记求平均,代表“平均来说训练要达成的目标”。
- 真实噪声训练时人为添加到图像上的高斯噪声,是模型需要预测的“标准答案”。
- 条件输入开关\(\xi=0\) 时保留真实条件 \(y\),\(\xi=1\) 时替换为空标记 \(\varnothing\),一个式子写清楚“有时给条件、有时不给”。
- 均方误差预测噪声与真实噪声的平方误差,扩散模型最核心的训练目标,误差越小,模型的去噪能力越强。
分数蒸馏:两路波形
干信号和湿信号不是凭空产生的,它们来自同一条音频的两种“形态”。在概率世界里,这两种形态被称为“得分”——概率密度上升的方向。无条件得分 \(\nabla_{\mathbf{x}}\log p(\mathbf{x})\) 是干路的波形;条件得分 \(\nabla_{\mathbf{x}}\log p(\mathbf{x}\mid\mathbf{y})\) 是湿路的波形。
贝叶斯公式告诉我们两路信号的关系:湿路 = 干路 + 条件修正项。条件修正项 \(\nabla_{\mathbf{x}}\log p(\mathbf{y}\mid\mathbf{x})\) 衡量“当前样本有多像标签 \(y\) 所描述的内容”,并把采样方向朝更符合标签的地方推:
在扩散模型里,得分函数和模型预测的噪声方向只差一个已知的系数。简单说,预测噪声 \(\varepsilon_\theta\) 近似等于“负得分”。所以训练出的 \(\varepsilon_\theta(\mathbf{z}_t, \mathbf{y})\) 和 \(\varepsilon_\theta(\mathbf{z}_t, \varnothing)\) 就是两条得分路径的可学习替身。调音台里,干湿两路的“声学差异”来自效果器;在 CFG 中,条件与无条件输出的差,正是全部条件信息的浓缩。
- 条件得分给定标签后,图像空间中概率密度上升最快的方向,可以理解为“湿路波形的斜率”。
- 无条件得分不依赖任何标签时概率密度上升的方向,是干路基础波形。
- 条件修正项也叫贝叶斯项,它只负责回答“像不像标签”,并给出把样本推向标签的力度。
- 加法叠加调音台的核心操作——干路波形叠加上效果器的修正,就得到湿路波形。
旋钮的核心公式
调音台上最常用的操作就是拧干湿旋钮。假设干路输出是 \(a\),湿路输出是 \(b\),旋钮刻度为 \(s\),那么输出 \(= a + s \times (b - a)\)。当 \(s=0\) 时纯干;\(s=1\) 时是标准的“干湿参考值”;\(s>1\) 时效果被放大,声音更有侵略性,这就是“外推”——超出了干湿两点直接连线的范围。
CFG 把同样的旋钮装到了扩散模型的每次去噪预测上。采样时我们对每一步同时跑两次网络:一次给条件 \(y\),一次给空标记 \(\varnothing\),然后按下式混合:
有人把 \(s\) 调到很大,得到边缘发亮、色彩过艳的“拔丝”图像;这和录音师把混响拧到产生尖锐回声,是同一手感。锚点永远是无条件预测,条件只负责提供偏移量,因此即使 \(s\) 很大,也不会彻底破坏底子。
- 无条件锚点模型在空标记下的预测,是输出的地基,保证基础质量不塌。
- 条件预测模型在真实提示词下的预测,代表“如果想要这个标签,应该怎么走”。
- 条件偏移方向两者相减得到一个向量,指向“条件带来的改变方向”,类似效果器产生的效果增量。
- 外推混合偏移量乘 \(s\) 再加回锚点。\(s\) 越大偏移越强,超过 1 就进入外推区,生成结果更加锐化。
引导强度:旋钮的刻度感
调音台最怕两种调法:干到底声音干瘪没氛围;湿过头声音过载破音。图像生成也一样,CFG 的引导强度需要按任务选择。当 \(s=0\),生成完全由无条件分支主导,结果多样但常常不遵循提示词;当 \(s=1\),条件作用刚好到位,但通常不够“黏”;文生图实践中 \(s\) 往往取 2~7。再往上拧,图像会出现典型的过饱和、边缘发光、纹理像油画厚涂一样的伪影。
从数学上看,\(s\) 控制的是每一步反向扩散中“条件偏移”的力度。预测噪声变了,下一步重建的潜变量 \(\mathbf{z}_{t-1}\) 也随之改变:
一个成熟的调音师靠监听判断旋钮位置;一个成熟的生成模型工程师靠验证集指标和用户反馈来调 \(s\)。动捕师、插画师偏好的 \(s\) 通常更低,产品渲染图更高——旋钮的“甜点区”永远是任务相关的。
- 均值重建\(\mu_\theta\) 根据当前去噪预测,把上一时刻的潜变量“校正”一步,这是反向扩散的骨架。
- 随机扰动\(\sigma_t\,\boldsymbol{\xi}\) 是每一步保留的随机性,让采样不会退化成确定性的单点。
- 引导进入均值注意 \(\hat{\varepsilon}_\theta\) 里面含 \(s\),说明旋钮每拧一度,整条采样轨迹都会偏转一点。
外接与内置:对比分类器引导
CFG 出现之前,扩散模型获得条件引导靠的是“外接效果器”——额外训练一个分类器,判断当前噪声图属于哪一类,然后沿着“让分类器更确信”的方向推一把。这个方向就是分类器梯度。其更新公式为:
外接设备的坏处很明显:要单独训练分类器;噪声图上的分类器可能给出不稳定甚至被对抗扰动左右的梯度;每一步还要额外做一次反向传播。CFG 把“推一把”的方向替换为模型自身条件输出与无条件输出的差——两个前向、无额外模型、无需反向传播。这就是它后来成为主流的原因。效果器从外接变成内置,声音干净了、接线简单了,这是音频设备史上的一大步,也是引导技术史上的一大步。
- 无条件预测\(\varepsilon_\theta(\mathbf{z}_t)\) 是基础去噪方向,相当于干路输出。
- 分类器梯度外接分类器 \(p_\phi\) 给出的梯度,衡量“当前噪声图有多像目标类别”。
- 负号预测噪声近似负得分,所以沿“让分类器更确信”的方向走时,要减去梯度。
- 权重与缩放\(w\) 是引导权重,\(\sigma_t\) 按噪声水平缩放梯度,避免在高噪声阶段推得太猛。
训练与技巧:接对效果器的线
内置效果器不是天生的——调音台出厂前,要把干路信号录好,还要把湿路的插入点接对位置。对 CFG 而言,最关键的一步是训练阶段的条件丢弃:以概率 \(p\)(通常 10%~20%)把条件 \(y\) 替换为 \(\varnothing\)。\(p\) 太小,无条件分支没学好,外推时锚点不稳;\(p\) 太大,条件分支变弱,生成就不够听话。论文里常用 \(p=0.1\sim0.2\),Imagen 则用较小的 5%。
CFG 还可以与“负向提示”(negative prompt)结合:把不想要的文本(比如“模糊、水印”)作为反向条件,让采样方向主动远离它。这相当于在调音台上再接一个“反向效果器”,专门压制某些频率。
CFG 推理时要跑两次前向,成本翻倍。研究者们加了一招“引导蒸馏”:用固定 \(s\) 的教师模型输出被引导过的噪声,让学生模型一步到位模仿:
接好线、调好电平,调音台才能稳定工作;选对丢弃概率、配好蒸馏目标,CFG 才能稳定输出高质量图像。
- 教师目标\(\hat{\varepsilon}_{\mathrm{teacher}}\) 是加了 CFG 引导后的教师噪声预测,作为想复制的“完美作品”。
- 学生预测学生模型只做一次普通条件预测,却必须逼近教师的引导结果。
- 时间步权重\(w(t)\) 对不同噪声程度的时间步给予不同重视程度,通常中间步更重要。
- 距离度量平方误差告诉学生“你离教师的引导效果还差多远”,反复练到逼近为止。
应用与局限:实战中的表现
今天几乎所有主流文生图产品——Stable Diffusion、Midjourney 的底层、Imagen、DALL·E 2/3——都在采样时使用 CFG。工程师把它做成一个叫 “CFG Scale“ 的滑块,用户无需懂公式,像调音师拧旋钮一样就能控制”听话程度”。默认值通常设在 7 附近,动漫风格任务常降到 5~6 保留多样性,产品渲染图则调到 8~10 增强文字遵循度。
在图像编辑(局部重绘、参考图引导)和视频生成(Sora、Runway 等)中,CFG 及其变体同样承担“语义对齐”的职责。编辑时局部区域的提示词融合强度由 CFG 类机制控制,视频扩散则用 CFG 让每一帧都牢牢粘住文本描述,避免画面叙事跑偏。
但内置旋钮也有脾气:\(s\) 过大导致过饱和、伪影,还伴随“多样性坍缩”——所有图片都像同一种声音的拷贝;无条件分支要额外跑一次前向,推理成本接近翻倍。此外,CFG 本质上是在放大条件置信区间,对提示词本身的歧义也会放大,用户堆砌过长提示词时反而更容易出现“四不像”。调音台的旋钮从来没有绝对正确的刻度,只有“适合当前项目”的刻度。CFG 的强处,是把这个旋钮交到了每个使用者的手里。
AI 应用场景
文生图产品中的 "CFG Scale" 滑块设计
阶段:模型推理与调参部署
解决的问题:用户描述千差万别,固定引导强度无法兼顾所有提示词。传统方案靠 prompt 工程师反复堆砌关键词来强行拉高忠实度,成本高且不稳定。CFG 让“遵循提示词”和“保留多样性”变成同一个旋钮的两端,算法工程师可以在不重训模型的情况下为用户提供直观的调参入口。
具体案例:Stable Diffusion WebUI 把 CFG Scale 暴露为 0~30 的滑块,默认 7。线上数据显示,动漫风格任务用户常调到 5~6 以保留画风多样性,电商产品图任务调到 8~10 以增强品牌元素还原。算法团队根据 A/B 测试决定默认值,并在不同风格预设(LoRA)中绑定各自的推荐 \(s\)。
负向提示与图像编辑
阶段:推理阶段的后处理与语义控制
解决的问题:文生图常出现多余肢体、水印、模糊等用户不想要的元素,仅靠正向提示难以压制。CFG 的公式天然支持“反向偏移”:把“水印、低质量”作为负向条件,让采样方向主动远离这些语义,相当于在调音台上加了一个反相效果器。
具体案例:Stable Diffusion 的 negative prompt 功能利用 CFG 的扩展形式,在每一步同时参考正向提示“一只戴帽子的柴犬”和负向提示“模糊、水印”,引导强度 \(s\) 控制两个方向的拉力。图像编辑工具(如 inpaint 局部重绘)也用类似机制控制重绘区域对提示词的贴合程度,\(s\) 调低时保留原图纹理,调高时让新物体更明显。
Python 演示
import numpy as npimport matplotlib.pyplot as plt def gauss(x, mu, sigma): """高斯概率密度函数""" return np.exp(-0.5 * ((x - mu) / sigma) ** 2) / (sigma * np.sqrt(2.0 * np.pi)) def score_uncond(x): """无条件得分:双峰混合高斯的对数密度梯度""" mus = np.array([-3.0, 3.0]) sigmas = np.array([1.0, 1.0]) weights = np.array([0.5, 0.5]) density = sum(w * gauss(x, m, s) for w, m, s in zip(weights, mus, sigmas)) grad = sum(w * gauss(x, m, s) * (-(x - m) / s ** 2) for w, m, s in zip(weights, mus, sigmas)) return grad / density def score_cond(x): """条件得分:把样本拉向右侧峰(模拟标签 y=1)""" return -(x - 3.0) / 0.5 ** 2 def cfg_score(x, s): """CFG 组合得分:无条件得分 + s * (条件偏移)""" return score_uncond(x) + s * (score_cond(x) - score_uncond(x)) def langevin_sample(score_fn, n_steps=2000, step_size=0.01, seed=0): """Langevin 采样:沿得分方向迭代逼近目标分布""" rng = np.random.default_rng(seed) x = rng.normal(0.0, 3.0, 300) for _ in range(n_steps): x = x + step_size * score_fn(x) + np.sqrt(2.0 * step_size) * rng.normal(0.0, 1.0, x.size) return x if __name__ == "__main__": for s in (0.0, 1.0, 3.0): samples = langevin_sample(lambda x: cfg_score(x, s)) plt.hist(samples, bins=40, density=True, alpha=0.5, label=f"CFG s={s}") plt.legend() plt.title("Classifier-Free Guidance 在一维玩具分布上的效果") plt.savefig("cfg_demo.png", dpi=120) print("已保存采样分布图 cfg_demo.png")
grad = sum(w * gauss(x, m, s) * (-(x - m) / s ** 2) ...)解析计算密度梯度,这就是“干路信号”的走势。return grad / density对数密度梯度 = 密度梯度 ÷ 密度,数学上就是得分函数。return -(x - 3.0) / 0.5 ** 2条件得分给出一条明确的“向右峰靠拢”的湿路方向。return score_uncond(x) + s * (score_cond(x) - score_uncond(x))一行实现 CFG 核心公式,干路加外推偏移。x + step_size * score_fn(x) + sqrt(...) * noiseLangevin 迭代,等价于扩散模型每一步去噪采样。plt.hist(samples, ...)把不同 \(s\) 下采样点的分布画在一起,直观看到引导强度如何改变最终分布。
常见误区
误区我觉得 CFG 就是把条件生成结果和无条件生成结果按比例混合一下,比如 \(0.7\) 的条件加 \(0.3\) 的无条件,两个权重加起来等于 1。
正解CFG 不是线性内插,而是“外推”——先算出条件与无条件输出的差值,再乘上引导强度 \(s\) 加回无条件输出。当 \(s>1\) 时,结果会超出条件与无条件两点之间的连线范围。写成混合形式是 \((1-s)\varepsilon_\varnothing + s\varepsilon_y\),注意两个系数之和为 1 当且仅当 \(s\in[0,1]\),而实际常用 \(s>1\),两个系数加起来根本不为 1。这就像干湿旋钮可以拧过湿信号满刻度,效果量超过原始湿路本身。
为何常见:公式长得很像加权平均,名字里的 "Free Guidance" 又让人联想到折中,于是容易忽略外推这一关键性质。
误区既然叫“引导”,那应该像分类器引导那样,先训练一个图像分类器,用它算梯度把生成结果引向指定类别。
正解CFG 恰恰不需要任何额外分类器。它用同一个扩散模型跑两次前向——一次带条件 \(y\)、一次带空标记 \(\varnothing\)——把两次输出的差当作引导方向。训练分类器的方案叫 Classifier Guidance,是 CFG 出现之前的老方法。CFG 的外推锚点是模型自身的无条件预测,分类器梯度不再出现。
为何常见:早期扩散模型引导确实靠分类器,“引导”这个词先入为主,加上论文标题里的 “Classifier-Free“ 字面是否定式,容易被记反成”需要分类器”。
误区CFG 里最核心的是条件预测,无条件预测只是配角。那我干脆省掉无条件分支,把条件预测直接乘个大系数,效果不也一样吗?
正解无条件预测是整个外推的锚点,锚点移动,外推基准也跟着变,生成的“底子”会不稳定。直接放大条件预测会让模型输出偏离训练分布,产生严重的颜色畸变和结构崩坏。CFG 中无条件分支始终在分母的逻辑位置,它不仅不能省,还要训练得足够好——训练时丢弃条件的概率就是为此服务的。
为何常见:人本能地觉得“条件信息越多越好”,容易把无条件分支当成拖后腿的部分,而忽略了它是扩散模型保持自然度的基准面。
误区我把 CFG Scale 从 7 调到 15,图确实更“像”提示词了;那调到 30 是不是更完美?调得越大越听话。
正解\(s\) 过大会导致过饱和、边缘伪影、内容畸变,甚至出现“条件噪声”——模型被推向超出训练分布的置信区域,生成结果反而偏离人类审美。实践上不同任务存在甜点区间,SD 默认 7,动漫场景 5~6,产品图 8~10。过大的 \(s\) 还会让多样性急速坍缩,所有图都长得像同一个模子刻出来的。
为何常见:小尝试时加大 \(s\) 确实改善了提示词遵循度,容易让人误以为响应是单调的,忽略了超出甜点区后的急剧恶化。
误区CFG 采样的每一步都要跑一个条件模型和一个无条件模型,所以显存和加载时间都会翻倍,等于同时跑两个模型。
正解条件分支和无条件分支是同一个网络的两次前向,模型参数只有一份,权重不翻倍,显存主要增加在激活值和中间特征上,而不是模型参数。推理时间确实接近翻倍,但可以通过引导蒸馏把两步合成一步,采样时只跑一次普通前向就用上高 \(s\) 的引导效果。
为何常见:两次前向传播很容易被想象成“两个模型”,尤其在看到代码里出现两个分支调用时,更容易产生这种误解。
面试题
Q1. CFG 中引导强度 \(s=0\) 时,生成过程相当于什么?
- A.完全条件模式的生成
- B.完全无条件模式的生成← 正确答案
- C.条件与无条件取平均
- D.反向扩散过程直接停止
答案:B。CFG 公式为 \(\hat{\varepsilon}=\varepsilon_\varnothing+s(\varepsilon_y-\varepsilon_\varnothing)\),当 \(s=0\) 时只剩 \(\varepsilon_\varnothing\),即纯无条件生成。它不是平均,也不是停止,只是效果器被完全关掉,只剩干信号。
Q2. 训练 CFG 时,为了获得无条件分支,条件信息会被随机替换成什么?
- A.随机噪声向量
- B.空标记 \(\varnothing\)← 正确答案
- C.类别中心向量
- D.全一的常数向量
答案:B。论文用特殊空标记 \(\varnothing\) 表示“没有条件”,网络见到它时输出无条件预测。随机噪声或类别中心都会引入额外语义,无法代表纯净的“无条件”状态。
Q3. 在 CFG 公式 \(\hat{\varepsilon}=\varepsilon_\varnothing+s(\varepsilon_y-\varepsilon_\varnothing)\) 中,\(s=2\) 表示什么?
- A.完全忽略无条件信息
- B.条件偏移量被放大两倍← 正确答案
- C.条件偏移量被缩小一半
- D.无条件信息被放大两倍
答案:B。括号里 \(\varepsilon_y-\varepsilon_\varnothing\) 是条件偏移量,\(s=2\) 意味着这个偏移被放大两倍后加到无条件预测上。由于锚点始终是无条件预测,无条件信息并没有被忽略,也不会被“放大两倍”。
Q4. 与 Classifier Guidance 相比,CFG 的主要优势是什么?
- A.不需要额外训练分类器← 正确答案
- B.推理速度完全不增加
- C.不需要训练扩散模型
- D.自动获得更高分辨率
答案:A。Classifier Guidance 需要额外分类器并提供梯度,CFG 用模型自身条件/无条件输出之差替代分类器梯度。推理仍要两次前向,速度并非不增加;扩散模型仍然要训练,分辨率也由模型结构决定。
Q5. CFG 中引导强度 \(s\) 过大,最典型的副作用是什么?
- A.生成结果过饱和且出现伪影← 正确答案
- B.无条件分支权重自动变小
- C.模型训练损失不收敛
- D.分类器梯度直接消失
答案:A。\(s\) 过大会把条件偏移外推过远,生成图像出现典型的过饱和、边缘发光、结构伪影,同时伴随多样性坍缩。这类似于调音台湿信号拧过头导致破音,是采样阶段现象而非训练问题。
Q6. 训练 CFG 时,条件丢弃概率通常取多少?
- A.0%,从不丢条件
- B.10%~20%← 正确答案
- C.50%~60%
- D.100%,全丢掉
答案:B。10%~20% 既能训练出可靠的无条件分支,又不至于削弱条件分支。50% 会让条件分支学不充分,100% 等于完全取消条件生成,0% 则无条件分支不存在。
Q7. 关于 CFG 的推理计算量,下列说法正确的是?
- A.需条件与无条件两个前向← 正确答案
- B.需要独立分类器的前向传播
- C.可用引导蒸馏压缩为一步← 正确答案
- D.条件分支完全不需要计算
答案:AC。CFG 采样每一步都要对同一个模型跑条件与无条件两次前向,因此 A 正确。它不需要分类器,B 错误。引导蒸馏让学生模型一步模仿教师的高 \(s\) 输出,C 正确。条件分支是必须计算的核心,D 错误。
Q8. CFG 公式中 \(\varepsilon_\theta(\mathbf{z}_t, \varnothing)\) 的核心作用是什么?
- A.充当锚点,提供无条件基础方向← 正确答案
- B.充当分类器的输出概率
- C.用于计算损失函数的权重
- D.用于替代学习率调度器
答案:A。无条件预测是外推的锚点,所有条件偏移都是以它为基准叠加的。锚点质量决定了生成图像的自然度,因此训练时要专门靠条件丢弃保证它学得够好。B、C、D 都与它的角色无关。
Q9. 关于 CFG 的数学原理,下列哪些说法正确?
- A.用模型自身输出差近似分类器梯度← 正确答案
- B.本质是把条件得分外推到无条件得分之外← 正确答案
- C.无条件分支就是模型将标签设为零向量
- D.\(s>1\) 时等价于贝叶斯公式的精确求解
答案:AB。CFG 定义中 \(\varepsilon_y-\varepsilon_\varnothing\) 恰好替代了 \(\nabla\log p(y|x)\) 的角色,A 正确。\(s>1\) 时条件偏移被放大,采样中心越过条件点,属于外推,B 正确。无条件分支用的是空标记 \(\varnothing\) 而非零向量,两者语义不同,C 错误。\(s>1\) 是启发式外推,不是贝叶斯精确解,D 错误。
Q10. 在 Stable Diffusion 界面中调节 "CFG Scale" 滑块,下列说法正确的是?
- A.实际调节的是引导强度 \(s\)← 正确答案
- B.改变采样总步数的多少
- C.影响生成结果对提示词的遵循程度← 正确答案
- D.改变随机种子的初始化值
答案:AC。CFG Scale 滑块就是用户界面对引导强度 \(s\) 的暴露,A 正确。增大 \(s\) 让采样更贴提示词,C 正确。采样步数由另一个滑块控制,随机种子也独立设置,B、D 错误。