导读
本文剖析了 LLM 训练 Loss 与评估指标的底层区别。Loss 是用于反向传播的可微梯度信号,指标则是离散的任务终局判定。受 Teacher Forcing、概率阶跃及格式约束影响,Loss 下降不等于效果提升,需结合两者诊断。
核心结论
Loss 与评估指标不是同一套逻辑,但目标一致:都用于推动模型取得更好的实际效果。
Loss 是给模型和优化器看的“梯度信号”,评估指标是给人看的“效果报告”。训练 Loss 下降,并不保证某个具体评估指标一定同步提升。
Loss 与评估指标的区别
|
|
|
|
|---|---|---|
| 服务对象 |
|
|
| 形式要求 |
|
|
| 常见粒度 |
|
|
| 关注视角 |
|
|
| 典型例子 |
|
|
一句话理解:
★Loss 负责告诉模型参数应该往哪里调整;评估指标负责告诉人调整后的模型到底好不好用。
LLM 的 Loss 必须可微吗?
严格来说,Loss 不必处处可微,但训练过程必须能够获得对模型参数有用的梯度信号。
LLM 通常使用梯度下降类算法更新参数:
因此,Loss 与模型中的运算通常需要满足以下条件:
-
在训练经过的绝大多数位置可微; -
少数不可微点可以使用约定梯度或次梯度; -
梯度能够沿计算图反向传播; -
梯度不能长期为零、无穷大或 NaN。
例如 ReLU 在 处不可微,但深度学习框架会为该点约定梯度,因此仍然可以正常训练。
相比之下,Exact Match 等评估指标只有 0 和 1,通常不可微,无法直接告诉优化器“参数应该朝哪个方向移动”,所以一般不能直接作为标准反向传播的 Loss。
Causal LM 的训练 Loss 在衡量什么?
Causal Language Model(因果语言模型)的训练 Loss 本质上通常是逐 token 的交叉熵损失。
给定前文 $x_{<t}$,模型预测下一个标准 token="" $x_t$="" 的概率:<="" p="">$$L_t=-\log p_\theta(x_t\mid x_{<t}). $$="" 再将各个有效位置的 token loss 聚合,例如取平均:
模型学习的是:
★在标准前文条件下,是否给下一个标准 token 分配了足够高的概率?
这与“自由生成出来的完整答案是否严格满足任务要求”有关,但并不等价。训练通常采用 Teacher Forcing:每一步预测所使用的前文来自标准答案,而推理时使用的前文包含模型自己刚刚生成的 token。两种场景之间存在差异。
不同任务的 Loss 一样吗?需要自己设计吗?
不同任务通常使用不同的 Loss,但大多数时候不需要从零设计。经典任务已经有成熟、稳定的选择,优先使用标准实现通常更可靠。
|
|
|
|
|---|---|---|
| 文本分类、情感分析 |
|
|
| Token 分类,如 NER、分词 |
|
|
| 句子相似度、语义检索 |
|
|
| Causal LM 文本生成 |
|
|
| 回归任务 |
|
|
| 类别不平衡分类 |
|
|
对于常规 Causal LM 监督微调,通常直接使用逐 token 交叉熵。以 TRL 的 SFTTrainer 为例,训练流程已经封装了标准的语言模型损失;只要模型、数据格式和标签设置正确,一般不需要自己实现 Loss。
什么时候需要自定义或组合 Loss?
1. 多任务学习
一个模型同时完成分类、生成等多个任务时,可以组合各任务的 Loss:
其中 、 控制不同任务对参数更新的影响。权重设置不合理时,一个任务可能压制另一个任务。
2. 特殊训练目标
如果任务特别在意输出长度、格式或重复内容,可以在标准 Loss 上增加辅助惩罚项:
例如,可以尝试惩罚过长输出。但长度和离散生成结果通常难以直接写成稳定、可微的目标;设计不当还可能使模型倾向于输出过短内容。实践中一般先通过高质量训练数据、正确的 <EOS> 标签、提示词和生成参数解决。
3. 序列级或偏好优化
标准交叉熵主要优化 token 级预测。如果目标是完整回答的帮助性、安全性或任务得分,可以考虑:
-
强化学习方法:将序列级评价转化为奖励信号,例如 RLHF 中的策略优化; -
偏好优化方法:例如 DPO,通过“更优回答与较差回答”的成对偏好数据构造可微训练目标; -
最小风险训练等方法:用候选序列的任务代价近似优化序列级目标。
BLEU、ROUGE、Exact Match 等离散指标通常不可微,不能直接进行普通反向传播。需要使用可微代理目标、采样估计或强化学习等方式间接优化。DPO 也不是直接对这些指标求导,而是学习偏好数据所表达的目标。
4. 类别或样本不平衡
如果少数类别、稀有标签或困难样本被平均 Loss 淹没,可以使用类别权重、样本权重或 Focal Loss。但权重过高也可能导致过拟合少数样本,需要结合验证集调节。
初学者应该如何选择?
对初学者而言,绝大多数常规任务从标准 Loss 开始就足够了。真正决定效果的因素往往包括:
-
数据质量与标注一致性; -
数据量和样本覆盖范围; -
学习率、batch size 与训练轮数; -
输入输出格式及标签掩码是否正确; -
推理时的温度、采样方式和停止条件。
只有在确认标准 Loss 与最终任务目标存在明确偏差,并且数据与训练流程已经可靠之后,才值得设计自定义 Loss。
示例:Loss 降低,Exact Match 仍然为 0
用一个自然的日常文本生成与问答场景来理解:为什么微调时 Loss 曲线一路漂亮地下降,但验证集上的 Exact Match(EM,精确匹配率)却依然是 0?
场景一:替换了近义词或个别字词(连续概率 vs 离散判定)
假设在文本生成任务中,标准答案是一句通顺的自然语言:
★标准答案:
“人工智能正在深刻改变人类的生产与生活方式。”
模型自由生成的结果却是:
★模型生成:
“人工智能正在深刻改变人类的生产与生活习惯。”
-
Loss 视角(极低): 模型对前 18 个字( “人工智能正在深刻改变人类的生产与生活”)预测得极其准确,每个 Token 位置的 Loss 几乎为 0。只有在结尾处,模型给习惯分配了 48% 的概率,给方式分配了 45% 的概率。全句的平均 Loss 从 3.5 显著下降到了 0.15(损失降低了 95% 以上,训练表现看似极其优秀)。 -
评估视角(直接为 0): Exact Match 要求生成的字符串与标准答案全字完全匹配。由于最后一个词选成了近义词 习惯,系统判定:
场景二:输出了正确核心词,但带上了自然的回答前缀
假设在知识问答或结构化提取任务中,标准答案要求直接输出答案:
★标准答案:
“巴黎”
模型在自由推理生成时输出的结果却是:
★模型生成:
“法国的首都是巴黎。”
-
Loss 视角:在 Teacher Forcing 训练中,模型对核心词 “巴黎”的预测概率从 1% 提高到了 90%,验证集 Loss 大幅下降。 -
评估视角:评估系统直接将 "法国的首都是巴黎。"与"巴黎"进行字符串精确比对,判定不匹配, 。 -
根源:模型虽然掌握了事实知识,但未学会严格的输出格式限制。
为什么 Loss 与评估指标可能不同步?
主要原因包括:
-
局部与整体不同:Loss 衡量各位置的 token 概率,评估指标衡量完整输出。 -
连续与离散不同:概率从 0.60 提升到 0.80 会降低 Loss,但如果最终选出的 token 没变,Exact Match 也不会变。 -
平均与关键位置不同:大量容易预测的 token 可以拉低平均 Loss,但某个决定格式、停止或最终答案的关键 token 仍可能出错。 -
训练与生成不同:训练时常使用标准前文,推理时模型依赖自己的历史输出,早期错误可能逐步累积。 -
任务目标不完全一致:通用的“预测下一个 token”目标,不一定完整表达集合相等、格式合法、事实正确或指令遵循等任务要求。
Loss 是必要条件,不是充分条件
在常规监督训练中,更低的 Loss 通常意味着模型对标准 token 的概率建模有所改善,因此它往往是任务效果提升的重要基础。但它不能单独保证:
-
完整答案严格匹配; -
输出数量和格式正确; -
模型在正确位置停止; -
事实、逻辑或任务约束全部满足; -
自由生成时得到最优结果。
因此,训练和验证模型时通常需要同时观察:
-
Loss:判断模型是否正在学习、训练是否稳定; -
任务评估指标:判断端到端效果是否真正提升; -
具体错误案例:判断错误发生在内容、格式、停止条件还是生成策略。
★Loss 衡量局部 token 预测能力,评估指标衡量端到端任务完成度。Loss 降低通常有帮助,但不是评估指标提升的充分条件。

文章仅做学术分享,如有侵权请联系删除,非常感谢!

