十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C²FG:基于分数差异分析的自适应引导,解决扩散模型CFG过引导难题

C²FG:基于分数差异分析的自适应引导,解决扩散模型CFG过引导难题 1. 项目概述当CFG引导在条件生成中“失灵”时我们如何破局如果你玩过Stable Diffusion这类扩散模型一定对那个神奇的“CFG Scale”Classifier-Free Guidance Scale分类器自由引导尺度滑块不陌生。把它拉高生成的图像就更能贴合你的文本提示词但拉到某个临界点画面就开始变得饱和、失真甚至出现诡异的伪影。这个现象在学术界和工业界被称为“CFG过引导”问题。尤其在复杂的条件生成任务中——比如根据精细的草图生成图像、根据特定属性编辑图片或者多模态的文本到视频生成——这个问题尤为突出。CFG像一把双刃剑用好了能精准控制用过了就会破坏生成质量。CVPR 2026上提出的C²FGConditional Classifier-Free Guidance with Score Difference Analysis基于分数差异分析的条件分类器自由引导工作正是为了系统性地解决这个痛点。它不是一个简单的“调参技巧”而是从扩散模型生成的根本原理——分数函数Score Function——入手提出了一套全新的分析框架和引导策略。简单来说C²FG的核心思想是与其用一个固定的、全局的尺度去粗暴地放大条件与无条件分数之间的差异不如动态地、局部地分析这个差异本身并据此施加更精细、更自适应的引导。这就像从“统一音量”的广播升级到了能根据每个乐器音色独立调音的混音台。这项工作的价值远不止于让Stable Diffusion的出图更“好看”。它触及了可控生成Controllable Generation的核心难题如何在满足复杂、多样的约束条件文本、草图、姿态、语义分割图等的同时保持生成内容的高保真度和自然度。对于从事AIGC应用开发、计算机视觉研究乃至需要利用扩散模型进行科学仿真的工程师和研究员来说理解C²FG意味着掌握了一种更高级的“控制权”。它让我们能更可靠地将人类的创意和先验知识“注入”到AI的生成过程中。2. 核心思路拆解从“蛮力放大”到“智能分析”要理解C²FG的妙处我们必须先回到CFG为什么有效以及为什么会失效。2.1 CFG的经典公式与它的“阿喀琉斯之踵”在标准的分类器自由引导中用于采样的条件分数 $\nabla \log p_t(x|c)$ 是通过以下方式合成的 $$\hat{\epsilon}(x_t, c, t) \epsilon_\theta(x_t, \emptyset, t) \gamma \cdot (\epsilon_\theta(x_t, c, t) - \epsilon_\theta(x_t, \emptyset, t))$$ 这里$\epsilon_\theta(x_t, c, t)$ 是条件噪声预测$\epsilon_\theta(x_t, \emptyset, t)$ 是无条件噪声预测$\gamma$ 就是CFG尺度。这个公式可以等价地理解为对分数即噪声的负方向的操作$\hat{s}(x_t, c, t) s_\theta(x_t, \emptyset, t) \gamma \cdot (s_\theta(x_t, c, t) - s_\theta(x_t, \emptyset, t))$。它的工作原理是直观的差值 $(s_\theta(x_t, c, t) - s_\theta(x_t, \emptyset, t))$ 代表了条件 $c$ 所带来的“信息增量”或“引导方向”。乘以 $\gamma$ 后我们沿着这个方向走得更远从而让生成结果更偏向条件 $c$。但它的失效机制同样直接这个差值向量在不同的数据点 $x_t$、不同的时间步 $t$、不同的条件 $c$ 下其幅度和方向的可信度是天差地别的。用一个固定的 $\gamma$ 去放大所有情况下的差值必然会导致一些问题幅度问题在有些区域无条件模型和条件模型本身的预测就很接近差值小这时即使放大引导也温和。但在另一些区域两者本就存在较大分歧差值大再强行放大就会导致采样轨迹“脱轨”走向数据分布中概率极低的区域产生失真。方向问题差值向量的方向并不总是“正确”的引导方向。尤其是在训练不充分、数据有偏或者条件本身模糊的情况下这个方向可能带有噪声甚至是误导性的。固定尺度的放大同样会放大这些错误。这导致了我们在实践中观察到的典型现象提高CFG细节和符合度先提升后下降画面逐渐变得对比度过高、纹理塑料感、出现高频噪声或语义错误。2.2 C²FG的破局点分数差异分析C²FG的论文标题已经点明了核心Score Difference Analysis。它不再将 $(s_\theta(x_t, c, t) - s_\theta(x_t, \emptyset, t))$ 视为一个需要被简单放大的整体而是将其作为一个需要被“分析”的对象。具体来说C²FG引入了对分数差异的统计特性分析。它认为一个“健康”、“可信”的引导方向其分数差异应该满足某些性质。例如在数据密度高的区域即真实数据流形附近条件与无条件分数的差异应该更稳定、更一致而在密度低的区域这种差异可能更随机、更不稳定。基于这种洞察C²FG设计了一个自适应权重函数$\alpha(x_t, c, t)$来替代固定的 $\gamma$。新的引导分数变为 $$\hat{s}{C^2FG}(x_t, c, t) s\theta(x_t, \emptyset, t) \alpha(x_t, c, t) \cdot (s_\theta(x_t, c, t) - s_\theta(x_t, \emptyset, t))$$这个 $\alpha(\cdot)$ 是如何计算的呢论文的核心创新就在于这里。它通常基于对当前分数差异向量与某种“参考分布”或“预期模式”的比对。一种实现思路是计算当前时间步、当前样本点处分数差异的范数或某种置信度度量并与一个在整个训练集或验证集上估计出的经验分布进行比较。如果当前差异的置信度高则赋予较大的 $\alpha$如果置信度低可能是噪声或歧义点则赋予较小的 $\alpha$甚至进行裁剪。注意这里的“置信度”并非一个外部分类器给出而是完全从扩散模型自身的两个输出条件与无条件分数中推导出来的保持了“Classifier-Free”的特性。2.3 与常见调参技巧的本质区别你可能会想这听起来有点像动态调整CFG尺度或者像一些采样器如DPM-Solver内置的适应性机制。但C²FG有根本不同原理驱动 vs. 启发式调整很多工程技巧是启发式的比如在采样后期降低CFG。C²FG的分析是基于分数匹配和扩散过程理论的其权重 $\alpha$ 的调整有明确的统计解释。样本自适应 vs. 全局或时间表自适应C²FG的 $\alpha$ 是$x_t$ 和 $c$ 的函数意味着对于同一时间步、不同内容的潜变量引导强度也不同。这实现了像素级或区域级的精细控制。而传统方法最多是时间步 $t$ 的函数。针对“差异质量” vs. 针对“生成阶段”C²FG关注的是“当前这个引导方向好不好”而很多方法关注的是“现在是早期还是晚期”。前者更直接地解决了CFG过引导的根源问题。3. 核心细节解析与实操要点理解了C²FG的思想我们来看看如何将其实现以及在实现中需要注意哪些关键细节。3.1 分数差异分析的具体实现路径论文中可能提出了几种实现分数差异分析的具体方法。这里我们探讨两种最有可能且易于理解的路径路径一基于局部一致性的置信度估计这种方法的核心假设是一个可靠的引导方向在其局部邻域内应该是平滑、一致的。对于当前潜变量 $x_t$我们可以通过向其中添加微量噪声构造一组邻近样本 ${x_t^{(1)}, x_t^{(2)}, ..., x_t^{(k)}}$。分别计算这些邻近样本的条件与无条件分数差 $\delta^{(i)} s_\theta(x_t^{(i)}, c, t) - s_\theta(x_t^{(i)}, \emptyset, t)$。分析这组 ${\delta^{(i)}}$ 的统计特性。例如计算它们的方差。如果方差小说明在这个小区域内模型对条件 $c$ 的响应是稳定一致的$\delta$ 可信度高。如果方差大说明模型自身在这个区域都存在歧义或不稳定$\delta$ 可信度低。设计权重函数例如 $\alpha \propto \frac{1}{\text{Var}(\delta) \epsilon}$方差越小权重越大。路径二基于先验分布的似然估计这种方法需要一定的离线计算。在训练集或一个干净的验证集上进行多次无条件采样和条件采样收集大量在不同时间步 $t$ 的分数差异样本 $\delta$。对这些 $\delta$ 进行建模例如拟合一个高斯分布 $\mathcal{N}(\mu_t, \Sigma_t)$或者估计其范数的分布 $p_t(|\delta|)$。这建立了“在时间步 $t$一个典型的、健康的分数差异应该有多大”的先验知识。在生成时对于当前的 $\delta_{current}$计算其范数 $|\delta_{current}|$ 在该先验分布 $p_t$ 下的概率密度值或百分位数。如果当前差异的范数远大于先验分布的典型值例如超过95%分位数则认为它可能是异常放大需要抑制此时赋予较小的 $\alpha$。反之则赋予较大的 $\alpha$。权重函数可以设计为 $\alpha \text{clip}( \frac{\text{percentile}^{-1}(p_t(|\delta_{current}|))}{\lambda}, 0, \gamma_{max})$其中 $\lambda$ 是一个缩放因子$\gamma_{max}$ 是最大允许尺度。3.2 实操中的关键参数与调优即使你直接使用论文开源的代码理解以下几个关键参数对用好C²FG也至关重要置信度估计的邻域半径在路径一中向 $x_t$ 添加噪声的幅度。太小了估计不准太大了会偏离当前点真正的局部特性。这是一个需要微调的超参数通常与当前噪声水平 $\sigma_t$ 相关联例如设置为 $0.01 * \sigma_t$。先验分布的估计数据量在路径二中用于拟合先验分布 $p_t$ 的样本数量。样本越多先验越可靠但计算成本也越高。需要在准确性和效率间权衡。权重映射函数如何将置信度度量如方差倒数、百分位数映射到最终的缩放因子 $\alpha$。常用的有线性映射、指数衰减映射等。这个函数决定了引导强度变化的“激进”程度。最小/最大引导尺度即使置信度很低我们可能仍希望保留一点引导$\alpha_{min} 0$即使置信度很高也可能需要设置一个上限$\alpha_{max}$以防止极端情况。这两个值提供了安全边界。实操心得在初次尝试时建议先采用路径二的简化版。固定一个中等CFG尺度如7.5生成一批图片同时记录下每个采样步骤的分数差异范数 $|\delta|$。绘制其随时间步 $t$ 变化的曲线观察其分布范围。然后在正式使用C²FG时将 $\alpha$ 设计为一个关于 $|\delta|$ 的简单函数例如当 $|\delta|$ 超过你观察到的历史最大值80%时开始线性衰减 $\alpha$。这种方法虽然粗糙但能快速验证C²FG思想的有效性并帮你建立直观感受。3.3 与现有采样器的集成C²FG是一个引导策略它独立于具体的采样算法DDPM, DDIM, DPM-Solver, UniPC等。在代码实现上它需要嵌入到采样循环中。伪代码逻辑如下def sample_with_c2fg(model, condition, sampler, steps): x_t torch.randn(...) # 初始噪声 # 可能需要的预处理加载或计算先验分布参数 for t in tqdm(reversed(range(steps))): # 1. 获取无条件噪声预测 eps_uncond model(x_t, t, conditionNone) # 2. 获取条件噪声预测 eps_cond model(x_t, t, conditioncondition) # 3. 计算原始分数差异 delta eps_cond - eps_uncond # 4. C²FG核心分析delta计算自适应权重alpha alpha compute_adaptive_weight(x_t, delta, t, condition) # 调用分析函数 # 5. 合成引导后的噪声预测 eps_guided eps_uncond alpha * delta # 6. 使用采样器更新x_t (例如DDIM更新) x_t sampler.update(x_t, eps_guided, t) return decode(x_t)你需要修改或封装你现有的采样函数在计算得到eps_uncond和eps_cond后插入步骤3-5。4. 实操过程与核心环节实现让我们以一个具体的场景为例使用Stable Diffusion 1.5模型结合C²FG思想实现一个能生成更符合复杂文本提示且避免过饱和图像的脚本。我们将采用上述“路径二”的简化实现思路。4.1 环境准备与模型加载首先确保你的环境有PyTorch和Diffusers库。pip install torch diffusers transformers accelerate然后编写模型加载部分。为了同时获得条件与无条件预测我们需要以两种方式调用模型。import torch from diffusers import StableDiffusionPipeline, DDIMScheduler from PIL import Image # 加载预训练管道 model_id runwayml/stable-diffusion-v1-5 pipe StableDiffusionPipeline.from_pretrained(model_id, torch_dtypetorch.float16) pipe.scheduler DDIMScheduler.from_config(pipe.scheduler.config) pipe pipe.to(cuda) pipe.enable_attention_slicing() # 节省显存 # 定义文本提示词 prompt A majestic eagle soaring over a snow-capped mountain at sunrise, highly detailed, photorealistic negative_prompt blurry, low quality, distorted, oversaturated # 负面提示词有助于进一步稳定生成4.2 实现简化的C²FG权重计算器我们实现一个基于“分数差异范数历史百分位数”的简单自适应权重计算器。这里我们假设我们已经通过前期实验得到了每个时间步分数差异范数的大致分布例如中位数和某个高位百分位数。在实际应用中你可能需要先运行一批标准CFG生成来收集这些统计数据。class SimpleC2FGWeightCalculator: 一个简化的C²FG权重计算器。 基于假设分数差异的范数应当在一个合理范围内。 如果当前范数超过预设的“高阈值”则降低引导权重。 def __init__(self, high_percentile_norm15.0, max_scale7.5, min_scale1.0): Args: high_percentile_norm: 预先统计得到的分数差异L2范数的某个高百分位值例如95%。 当当前范数超过此值时权重开始衰减。 max_scale: 最大引导尺度对应置信度最高时。 min_scale: 最小引导尺度对应置信度最低时。 self.high_norm high_percentile_norm self.max_scale max_scale self.min_scale min_scale def compute_alpha(self, delta, current_norm): 计算自适应权重alpha。 Args: delta: 分数差异张量 (eps_cond - eps_uncond) current_norm: 当前分数差异的L2范数。 Returns: alpha: 自适应缩放因子。 # 计算当前范数与阈值的比率 ratio current_norm / self.high_norm # 如果比率1说明在正常范围使用最大尺度 if ratio 1.0: alpha self.max_scale else: # 如果超过阈值则线性衰减到最小尺度 # 这里可以设计更复杂的衰减曲线如指数衰减 decay max(0.0, 2.0 - ratio) # 当ratio2时衰减为0但我们用min_scale兜底 alpha self.min_scale (self.max_scale - self.min_scale) * decay alpha max(self.min_scale, min(self.max_scale, alpha)) # 裁剪到[min_scale, max_scale] return alpha # 初始化计算器参数需要你根据实际模型和提示词类型进行校准 weight_calculator SimpleC2FGWeightCalculator(high_percentile_norm14.0, max_scale9.0, min_scale3.0)4.3 修改采样循环以集成C²FG我们将重写Diffusers库中的__call__方法核心部分以集成我们的自适应引导逻辑。这里以DDIM采样器为例。def custom_c2fg_sampling(pipe, prompt, negative_prompt, num_inference_steps50, guidance_scale7.5, seed42): generator torch.Generator(devicecuda).manual_seed(seed) height width 512 # 1. 准备文本嵌入 text_inputs pipe.tokenizer( prompt, paddingmax_length, max_lengthpipe.tokenizer.model_max_length, truncationTrue, return_tensorspt, ) text_embeddings pipe.text_encoder(text_inputs.input_ids.to(pipe.device))[0] # 同样处理负面提示词 uncond_input pipe.tokenizer( negative_prompt, paddingmax_length, max_lengthpipe.tokenizer.model_max_length, truncationTrue, return_tensorspt, ) uncond_embeddings pipe.text_encoder(uncond_input.input_ids.to(pipe.device))[0] # 拼接嵌入用于批量处理 text_embeddings torch.cat([uncond_embeddings, text_embeddings]) # 2. 初始化潜变量 latents torch.randn( (1, pipe.unet.config.in_channels, height // 8, width // 8), generatorgenerator, devicepipe.device, dtypetext_embeddings.dtype, ) # 3. 设置采样器时间表 pipe.scheduler.set_timesteps(num_inference_steps, devicepipe.device) timesteps pipe.scheduler.timesteps # 4. 采样循环 for i, t in enumerate(timesteps): # 扩展潜变量以进行批量推理无条件条件 latent_model_input torch.cat([latents] * 2) latent_model_input pipe.scheduler.scale_model_input(latent_model_input, t) # 预测噪声 with torch.no_grad(): noise_pred pipe.unet(latent_model_input, t, encoder_hidden_statestext_embeddings).sample # 分离无条件与条件预测 noise_pred_uncond, noise_pred_text noise_pred.chunk(2) # 计算原始分数差异 delta noise_pred_text - noise_pred_uncond # 计算当前差异的范数可以是在样本空间或通道空间上的范数这里使用Frobenius范数简化的感知 # 我们计算每个样本的L2范数然后取平均。保持形状为 (batch_size, ) current_norm torch.norm(delta.view(delta.size(0), -1), dim1).mean().item() # **C²FG核心计算自适应权重** adaptive_scale weight_calculator.compute_alpha(delta, current_norm) # 应用自适应引导 noise_pred_guided noise_pred_uncond adaptive_scale * delta # 使用调度器更新潜变量 latents pipe.scheduler.step(noise_pred_guided, t, latents).prev_sample # 可选打印或记录当前时间步的scale和norm用于调试 if i % 10 0: print(fStep {i}, t{t.item():.0f}, norm{current_norm:.2f}, adaptive_scale{adaptive_scale:.2f}) # 5. 解码图像 latents 1 / pipe.vae.config.scaling_factor * latents with torch.no_grad(): image pipe.vae.decode(latents).sample image (image / 2 0.5).clamp(0, 1) image image.cpu().permute(0, 2, 3, 1).float().numpy() image (image[0] * 255).round().astype(uint8) return Image.fromarray(image) # 运行生成 result_image custom_c2fg_sampling(pipe, prompt, negative_prompt, num_inference_steps50, guidance_scale7.5, seed42) result_image.save(c2fg_generated_image.png)4.4 效果对比与参数校准运行上述脚本后你需要与固定CFG尺度的结果进行对比。建议进行以下操作基准测试将SimpleC2FGWeightCalculator的high_percentile_norm设为一个极大值max_scale和min_scale都设为同一个值如7.5这相当于退化回标准CFG。生成一张图片。C²FG测试使用校准过的参数例如high_percentile_norm14.0, max_scale9.0, min_scale3.0生成图片。对比观察重点观察以下方面细节与饱和度C²FG生成的图像在毛发、羽毛、雪山纹理等细节上是否更自然色彩是否更柔和、避免过饱和提示词遵循度“majestic”、“at sunrise”等抽象或复杂概念是否依然得到良好体现伪影图像背景或平滑区域是否减少了不自然的高频噪声或结构性伪影参数校准是一个迭代过程如果结果依然过饱和尝试降低high_percentile_norm或降低max_scale。这会让系统对“大差异”更早、更敏感地进行抑制。如果结果变得过于平淡提示词遵循度下降尝试提高high_percentile_norm或提高min_scale。这给了模型更多“发挥”空间。max_scale可以设得比传统CFG稍高如9.0因为在C²FG机制下当差异可信时更强的引导能带来更好的贴合度而当差异不可信时min_scale会提供保护。5. 常见问题与排查技巧实录在实际实现和应用C²FG思想时你可能会遇到以下典型问题。5.1 生成结果不稳定时好时坏问题现象使用相同的随机种子C²FG生成的结果波动比标准CFG大。可能原因自适应权重 $\alpha$ 的计算引入了额外的随机性或对初始潜变量非常敏感。例如在“路径一”局部一致性估计中构造邻近样本的随机噪声会导致每次估计的置信度不同。排查与解决检查随机性来源确保除了潜变量初始化外权重计算过程是确定的。如果使用了随机扰动考虑固定其随机种子。平滑权重对计算出的 $\alpha_t$ 进行时间步上的平滑滤波如指数移动平均避免相邻时间步权重突变导致采样轨迹抖动。alpha_smoothed beta * alpha_prev (1-beta) * alpha_current。切换到更稳定的分析路径“路径二”基于先验分布通常比“路径一”更稳定因为它依赖于离线统计而非在线估计。优先实现和调试路径二。5.2 计算开销明显增加问题现象生成速度比标准CFG慢很多。可能原因C²FG需要额外的前向传播来计算置信度。例如路径一需要为每个样本点计算多次前向传播用于邻近样本。排查与解决剖析性能使用 profiling 工具如PyTorch Profiler确定瓶颈是在UNet的前向传播还是权重计算逻辑本身。优化置信度估计降低邻近样本数在路径一中将邻近样本数k从10减少到3或4可能对估计精度影响不大但能显著提速。稀疏时间步分析不必在每个采样步都进行完整的分数差异分析。可以每隔3-5个步分析一次中间步复用上一个分析步的权重或进行插值。使用轻量级代理训练一个极小的网络如两三层的MLP来直接预测当前时间步、当前潜变量下的“理想CFG尺度”用这个预测代替复杂的分析。这需要额外的训练数据但推理极快。利用缓存如果使用路径二确保先验分布的参数如每个t的范数分布分位数被预先计算并加载到内存中避免在生成循环中重复计算。5.3 对某些提示词效果不佳甚至更差问题现象对于简单的提示词如“a cat”C²FG效果提升不明显对于某些复杂提示词反而丢失了关键元素。可能原因先验分布不匹配你使用的先验分布high_percentile_norm是基于某一类提示词或无条件统计的与当前特定提示词的分数差异分布不匹配。权重函数设计过于激进min_scale设置过低或衰减函数过于陡峭导致在需要强引导的关键时刻如定义主体内容时引导被过度抑制。排查与解决提示词分组建模不要使用全局统一的先验。可以对提示词进行聚类如物体、场景、风格为每类提示词建立独立的先验分布。在推理时根据当前提示词选择对应的先验。动态调整最小尺度将min_scale设计为与条件信息熵相关的函数。对于信息量大的提示词描述具体min_scale高一些对于模糊的提示词min_scale低一些。引入负面提示词作为基线标准CFG中负面提示词已经是一种简单的自适应机制它提供了一个“远离什么”的方向。确保你的C²FG实现与负面提示词兼容。一种方式是将无条件预测eps_uncond替换为负面提示词的预测eps_neg然后分析(eps_cond - eps_neg)的差异。5.4 与某些采样器不兼容问题现象在DDIM上工作正常换到DPM-Solver或UniPC等高阶求解器时效果异常或报错。可能原因高阶求解器可能对噪声预测的连续性、平滑性有更高要求。C²FG引入的动态权重 $\alpha$ 如果随时间步变化剧烈可能会破坏求解器假设的平滑性导致数值不稳定。排查与解决强制平滑如前所述对 $\alpha$ 序列进行强平滑处理。检查求解器输入确保你传递给求解器step函数的是经过eps_uncond alpha * delta合成后的最终噪声预测noise_pred_guided而不是先合成分数再转换。不同求解器对输入格式的要求一致但计算过程需严谨。参考官方实现关注C²FG论文作者或社区是否发布了与流行采样器如diffusers库中StableDiffusionPipeline直接集成的代码。他们的实现会处理好兼容性问题。5.5 如何获取可靠的先验分布这是实现“路径二”C²FG的关键也是一个常见的实操难点。问题没有现成的统计量自己计算成本高。解决方案小规模采样统计你不需要在完整训练集上统计。选择一个有代表性的、包含不同复杂度提示词的小集合50-100个。关闭CFGguidance_scale1.0和开启标准CFGguidance_scale7.5各跑一遍。记录下每个时间步t、每个样本的||eps_cond - eps_uncond||。分时间步聚合对于每个时间步t你将得到N个范数值。计算这个集合的中位数、75%分位数、90%分位数等。high_percentile_norm就可以取90%或95%分位数。你可以选择为所有时间步取一个全局值或者为每个时间步存储一个值更精细。存储与加载将这些统计量一个标量或一个长度为num_timesteps的向量保存为JSON或NPY文件。在生成脚本开始时加载它们。注意条件影响上述统计是在“平均”提示词上进行的。对于极端特殊的提示词分布可能有偏移。因此在实际应用中high_percentile_norm应被视为一个需要微调的超参数上述统计值作为初始值。最后我个人在实际探索中的体会是C²FG代表了一种思维转变从追求“更强的控制”到追求“更聪明的控制”。它迫使我们去深入理解扩散模型内部分数函数的动态特性而不是仅仅将其视为黑箱。虽然完整的C²FG实现有一定复杂度但即使只是将其核心思想——监控分数差异的幅度并做出反应——融入你的生成流程也能带来肉眼可见的改善。你可以从最简单的“如果差异范数超过阈值X则将CFG尺度线性降低到Y”开始尝试这已经是一个有效的、自适应的稳定策略。随着理解的深入再逐步引入更精细的置信度估计和权重映射机制。这个从简到繁的过程本身也是对扩散模型可控生成原理的一次绝佳学习。
返回列表