loss从8.11降到0.77,模型为什么反而更差了

23 阅读4分钟

训练跑完了,很开心

5.2分钟,loss从8.1145降到0.7731(Source D)。4,358,144个可训练参数。门禁检查通过:gate_passed: true

这是标准的"微调成功"信号。如果你在做LoRA/QLoRA微调,这是你期望看到的曲线——loss陡降,收敛平滑,没有NaN,checkpoint完整保存。

253条训练样本,来自我自己50+次Claude Code会话记录(Source D)。基座模型是Qwen2.5-1.5B-Instruct,4-bit QLoRA,rank=16。单张RTX 3060 6GB显存跑完全程(Source H)。

一切看起来很正常。然后我跑了行为评估。


评估结果:四个维度全面下降

评估用了20个测试提示词,覆盖10个模型从未见过的领域:医学、法律、金融、心理、教育、农业、健身、音乐、天文、管理(Source B)。

四个评分维度:结构化分解(dec)、验证行为(ver)、自我纠错(cor)、不确定性声明(unk)。全部基于正则表达式匹配评分(Source: eval_metacognition.py)。

维度基座模型(平均分)微调模型(平均分)变化
结构化分解1.850.50-73%
验证行为0.650.20-69%
自我纠错1.100.20-82%
不确定性声明0.550.05-91%

(Source B: data/eval_report.json)

不是"方向性地变差",不是"结果喜忧参半"。四个维度全部下降,四个降幅都在69%以上。


这意味着什么

loss下降衡量的是"模型对训练数据的拟合程度"——它在学习复现我写过的回答模式。

行为评分衡量的是"模型在没见过的问题上展现出目标行为模式的能力"——它是否真的内化了自我检查、拆解问题、表达不确定性的习惯。

这两者不是同一个东西。loss下降告诉你模型记住了训练集。行为评估告诉你模型能不能泛化。

在这个实验里,模型记住了,但没有泛化。


ROUGE-L也说同样的事

另一种度量角度是看模型输出和基座模型输出的词汇重叠度:

对比ROUGE-L均值Bootstrap 95%置信区间
基座 vs 微调0.095[0.064, 0.122]
Prompt-only vs 微调0.107[0.073, 0.137]

(Source C: data/baseline_report.json)

微调后的模型确实和基座模型输出不同了(ROUGE-L非常低)。但问题是:只是写好prompt的基座模型,其输出比微调模型更"像微调后的自己"(0.107 > 0.095)。差值不显著(配对t检验p=0.13, ns),但方向是反的。

换句话说:在这个规模上,prompt engineering可能比微调更有效。


为什么会这样

几个可能的解释:

1. 数据太少太窄。 253条样本来自一个人(我)的会话记录。模型学的是我写东西的表面模式——用数字列表、说"首先/其次"、用简洁句式——但它不知道什么时候应该用这些模式。当提示词落在它没学过的领域(比如天文、健身),它要么照搬模式但内容错误,要么完全不触发模式。

2. Instruct模型的RLHF在对抗。 Qwen2.5-1.5B-Instruct已经经过了RLHF对齐,它的基础行为是"给出自信的回答"。我的训练数据让它学会"说我不确定",但这和RLHF先验冲突。两个方向拉扯的结果是模型两者都做不好——既不够自信也不够诚实。某个时刻模型直接输出"我是百度的工程师"——一个和训练数据完全无关的幻觉身份(Source I)。

3. 正则表达式评分是简陋的。 降幅这么极端,部分原因可能是评分工具本身。如果微调后的模型用不同的表达方式实现了同样的功能(比如不说"first... second..."而是用段落过渡),正则匹配就抓不到。但这无法解释全部——四个维度降幅过大,不只是一种测量假象。


核心教训

loss曲线不会告诉你模型有没有学到你想要的行为。

如果你的下游评估只是看perplexity或者loss,你可能会以为自己成功了。但模型的"语言能力退化"和"行为模式内化"在loss曲线上看起来可能完全一样——都是下降。

做微调时,你需要行为层面的评估:模型在没见过的问题上,是否表现出了你想要的行为模式?不是看它能不能复述训练数据,而是看它能不能在陌生场景里做出正确的判断。

这个实验里,答案是"不能"。至少在这个规模上不能。


代码和数据

14个Python文件,1924行代码。单张RTX 3060 6GB,5.2分钟训练。全部开源。

仓库:github.com/YuhaoLin200…

相关PR:ECC #2377+#2378(已合并),HF evaluate #778(审核中,behavioral_drift指标)(Source G)。


👋 林宇浩 — AI 输出可靠性基础设施。ECC 贡献者,HuggingFace Evaluate 贡献者。所有代码:github.com/YuhaoLin200…

📚 DEV.to 英文版:dev.to/yuhaolin200… | Reddit:u/linyuhao2005