训练跑完了,很开心
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.85 | 0.50 | -73% |
| 验证行为 | 0.65 | 0.20 | -69% |
| 自我纠错 | 1.10 | 0.20 | -82% |
| 不确定性声明 | 0.55 | 0.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分钟训练。全部开源。
相关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