小菜鸟

java菜鸟号正在起航

对齐期:后训练阶段的分布干预避坑指南

某金融客服模型DPO对齐后,拒答合规问题的准确率达99%。为提升回复自然度,工程师将推理温度从0.8调至1.1。上线三天内,出现7起敏感信息泄露投诉。复盘发现,高温采样使安全约束对应的低概率token被噪声覆盖,对齐阶段精心建立的拒绝边界被悄然绕过。这不是孤例——在对齐后的模型上做分布干预,就像在已校准的天平上随意加减砝码,看似微小的扰动都可能让系统失衡。对齐过程本质是将模型的输出分布重塑为与人类偏好或安全规则对齐的形状,而非单纯提升某个指标。本文不提供如何提升多样性的技巧,只提供如何安全地干预的四步评估流程。在继续前请先确认:你的模型是否已通过第一篇的长尾验证?推理期温度是否仍在第二篇计算的T_safe内?若任一答案为否,请立即回退至稳定基线,否则后续所有评估都将建立在流沙之上。

第一步:对齐目标拆解与风险假设模板

在对齐后的模型上做分布干预前,必须先将模糊的业务目标拆解为可量化的对齐子目标,并建立风险假设。注意:以下敏感度矩阵仅为风险假设模板,并非经过验证的结论 。每个“高/中/低”标记都是待验证的假设,必须通过第二步的压力测试确认或修正。

对齐子目标 温度 Top-k/p 重复惩罚 min-p
安全拒答率 高(假设) 中(假设) 低(假设) 中(假设)
偏好win-rate 中(假设) 中(假设) 低(假设) 低(假设)
风格一致性 中(假设) 低(假设) 中(假设) 低(假设)
事实准确性 高(假设) 中(假设) 低(假设) 低(假设)
回复长度稳定性 低(假设) 高(假设) 中(假设) 低(假设)

重要澄清:对齐期不使用标签平滑 。标签平滑是SFT阶段的技术,DPO/RLHF等对齐算法本身已包含隐式正则化。在对齐期施加标签平滑属于阶段混淆,可能破坏奖励信号。本表已移除标签平滑列。若你在对齐代码中看到标签平滑参数,应首先确认其是否为遗留配置并予以移除。

阅读全文 »

推理期:温度与采样策略的联合调参手册

将温度从0.7调到1.2,回复多样性提升了,但模型开始胡说八道;调回0.7,事实准确了,却又陷入车轱辘话。这是LLM推理调参中最经典的语义崩坏困境。很多工程师把它归咎于温度本身,实则忽略了温度的本质——它并非独立的多样性开关,而是整个采样策略系统的增益调节器。就像音响的音量旋钮,开太大而限幅器没跟上,声音就会破音。单独拧温度,等于在没调焦距的情况下猛拧光圈,画面必然失焦。本文提供一套基于验证集指标的联合调参决策流程,帮你把温度从玄学旋钮变成可控的工程变量。阅读本文前,假设你已完成训练期闭环;若尚未通过长尾测试集验证,建议先完成第一篇第四步的修复流程,否则推理调参收益有限。

第一步:建立基线与诊断指标

调参前必须把“语义崩坏”和“多样性”从主观感受转化为可量化指标。注意:以下指标均为启发式代理,并非理论上的“事实一致性”或“多样性”度量。所有代理指标必须在批量调参前完成前置校准 ,未通过校准则强制降级,不可直接使用。

基线定义重申

本文所有“相对基线”均继承第一篇定义:固定ε=0.05、未启用动态调度的模型,在T=0.7、Top-p=0.9、Top-k=50配置下的指标。此基线需在推理调参开始前同步生成并记录,作为后续所有比较的锚点。若未设置该基线,所有预警与决策条件不可操作。

事实一致性代理指标

LLM-as-Judge可作为主指标,但必须通过以下校准流程验证其可靠性:

  1. 准备80条人工标注样本(高分/中分/低分各约27条,确保覆盖全量程);
  2. 用候选judge模型对每条样本评分3次(温度固定为0.3,避免温度引入额外方差);
  3. 计算每条样本3次评分的标准差σ_i,报告max(σ_i)作为稳定性指标;
  4. 计算与人类标注的Spearman ρ及95%置信区间:对(human_score, judge_score)配对做有放回重采样1000次,每次重采样后重新计算Spearman ρ,取2.5%和97.5%分位数作为CI边界 ;
  5. 接受标准:ρ的95% CI下界≥0.5且max(σ_i)≤0.12。若未达标,尝试更换judge模型或优化prompt;若三次尝试仍不达标,强制降级至“人工抽检+n-gram F1趋势参考”模式。

降级模式下的调参调整 :n-gram F1仅用于排除明显异常参数点(如得分骤降>20%),不作为优化目标。所有关键决策点(如确定T_safe、选择最优组合)必须辅以至少20条样本的人工事实核查。此模式下调参效率显著降低,应优先解决judge模型适配问题而非长期依赖降级模式。

阅读全文 »

训练期:标签平滑的正确打开方式

某医疗SFT项目验收时,模型在标准评测集上得分优异,上线后却对罕见病种频繁输出安全但无用的套话。排查三周才发现,训练时沿用了通用语料的标签平滑系数0.1。

标签平滑对梯度的影响是双向的:目标token的监督信号被削弱(ε=0.1时权重降至0.9),非目标token则获得微弱正梯度。长尾术语作为目标出现的频率极低,“被削弱”的次数远少于“被增强”,净效果本可能为正。但该案例中,领域数据的极端稀疏性使信号损失无法被微弱增益补偿,最终导致学习不足。

这类问题并非个例。标签平滑的效果高度依赖数据分布与任务特性的匹配度,惯性套用通用配置是领域微调中最常见的隐性风险源。它并非加了就有效的正则化开关,需要与数据、任务联动调节。本文提供一套四步调参模板,帮你把标签平滑从玄学配置变成可控的工程变量。阅读本文前,假设你已具备SFT基础训练经验,熟悉Loss计算与模型评估流程。

第一步:数据分布诊断(启发式代理指标)

在设置任何平滑系数前,需评估当前数据集是否可能受益于标签平滑。注意:以下指标是启发式代理,并非理论上的“平滑需求”度量。它们基于经验规律构建,在特定场景下可能失效,务必结合人工判断。

主指标:归一化token频率尖锐度

计算训练集中所有label token(展平后)的频率分布均匀度,归一化至[0,1]。该指标反映的是“训练集token使用集中度”,其有效性依赖于一个经验假设:token频率越集中,模型越容易对高频token过拟合,平滑的潜在收益越大。

阅读全文 »

反向传播与特征提取:神经网络到底在学什么

在深度学习普及之前,特征工程决定了项目的上限。SIFT、HOG、TF-IDF 这些手工描述子凝聚了领域知识,但也带来了明显的瓶颈:对数据分布敏感,难以捕获高阶非线性关系,而且特征设计和模型训练是割裂的——设计者没法根据最终任务的反馈来调整表示本身。

神经网络把特征的定义权交给了优化过程。它并没有 magically “发现”更好的特征,只是让损失函数来决定什么算“好”。反向传播的真正作用,是把任务目标逆向传回每一层,参数更新只是这个过程的副产品。换句话说,网络学到的表示,是任务梯度、数据分布和网络结构自带的假设(比如卷积的平移不变性)共同作用的结果。下文会用严格的矩阵求导和可运行代码,验证梯度是怎么逐层塑造特征的。

从标量到矩阵:梯度流的直觉基础

理解反向传播得从标量链式法则开始:若 z = g(y)、y = f(x),则 dz/dx = (dz/dy) · (dy/dx)。这本质上就是把全局变化率拆成局部敏感度的级联。变量升维到向量时,思想没变,只是“导数”变成了 Jacobian 矩阵。

这里有个容易混淆的点:分母布局下,∂y/∂x 的第一维度与分母 x 对齐;只有当 x 是向量时,梯度 ∂L/∂x 的形状才和 x 完全一致。比如 x ∈ ℝⁿ、y ∈ ℝᵐ,∂y/∂x ∈ ℝⁿˣᵐ,第 j 行第 i 列是 ∂yᵢ/∂xⱼ。此时链式法则写作 ∂z/∂x = (∂y/∂x)ᵀ ∂z/∂y。这个形式自然保证了梯度形状和参数一致,不用额外 reshape。这很关键。

阅读全文 »

当完美公式遇上有限精度:Softmax数值稳定的第一课

在深度学习教材里,Softmax与交叉熵的组合总是优雅而简洁。给定logits向量 $z$ 和标签 $y$,联合损失通常写作:

这个公式在数学上无懈可击。于是许多初学者会自然地写出如下PyTorch代码:

# 危险示范:数学正确 ≠ 数值稳定
def naive_softmax_ce(logits, target):
    probs = torch.exp(logits) / torch.sum(torch.exp(logits))
    loss = -torch.log(probs[target])
    return loss

这段代码在小规模测试中运行完美,但在真实训练中可能是一颗定时炸弹。当某个logit值稍大(比如超过88),exp(89) 在float32下就会溢出为 inf;而当logit极小时,exp(-100) 会下溢为0,随后的 log(0) 直接产出 -inf 或 NaN,模型训练就此崩溃。

根本原因在于计算机的浮点数不是实数,其表示范围是有限的。

浮点数的安全区比你想象的窄

我们习惯认为数字可以无限大或无限小,但float32只有约7位有效十进制精度,其正数范围大约在 $1.2\times10^{-38}$ 到 $3.4\times10^{38}$ 之间。

想象一条数轴:右侧终点是 3.4e38,超过即上溢变为 inf;左侧靠近0处有个最小正数 1.2e-38,低于此值即下溢变为0;中间才是安全计算区。

阅读全文 »
0%