知道但不会用:大模型微调后,知识为什么卡在了错误的层?

## 一个让人崩溃的微调故事 你花了一周时间,精心准备了 500 条医学知识三元组——"MRE11 蛋白与 A...

一个让人崩溃的微调故事

你花了一周时间,精心准备了 500 条医学知识三元组——”MRE11 蛋白与 ATRX 蛋白相互作用”、”BRCA1 基因调控 DNA 修复通路”——喂给一个 7B 参数的大模型做 LoRA 微调。

微调结束,你满怀期待地测试:

> Q: MRE11 蛋白与哪个蛋白相互作用? > A: ATRX。

完美。模型背得滚瓜烂熟,准确率 99.6%。

然后你问了一个稍微复杂的问题:

> Q: 哪个蛋白同时与 ATRX 和 MRE11 相互作用,并且参与 DNA 修复?

模型一脸茫然,开始胡说八道。

你检查了训练数据——这条推理所需的两个事实(MRE11-ATRX 相互作用、ATRX-DNA 修复关联)都在训练集里。模型明明”知道”这两个事实,为什么”用”不出来?

这不是你的错,也不是模型的 bug。这是大模型微调中一个被正式命名的现象——Knowing-Using Gap(知用鸿沟)

两个维度的”知道但不会用”

HKUST(GZ) 的 Lu Dai 等人在论文《Towards Mechanistically Understanding Why Memorized Knowledge Fails to Generalize in Large Language Model Finetuning》中,把这个现象拆成了两个可量化的维度:

准确率鸿沟(Accuracy Gap):在训练结束时,直接记忆测试的准确率接近 100%,但需要多步推理的泛化测试准确率只有 7%–18%。六个模型、两个领域,无一例外。

时间滞后(Temporal Lag):记忆在第 2–10 个 epoch 就饱和了,但泛化能力要晚 5–9 个 epoch 才开始出现——如果它最终出现的话。很多时候,它根本不出现。

论文用了一个精确的数学定义来刻画这两点。记 A_{text{mem}}(t)t 时刻的记忆准确率,A_{text{gen}}(t) 为泛化准确率。准确率鸿沟是 Delta A = A_{text{mem}}(T) - A_{text{gen}}(T),时间滞后是 Delta T = T_{text{gen}} - T_{text{mem}}

数据很冷酷:在 Qwen-2.5-7B 上,LoRA 微调的 chaining 任务,T_{text{mem}} = 10.4 epoch,T_{text{gen}} = 15.0 epoch,Delta T = 4.6。而最终泛化准确率只有 0.303——即使等到了泛化出现,也只答对了 30% 的题。

更扎心的是:加大模型规模不能解决问题。从 1.5B 到 7B,时间滞后几乎没有缩短。增加注入的知识量反而会扩大准确率鸿沟——存得越多,用得越差。

Self-Patching:给模型做一次”知识搬运实验”

为了搞清楚知识到底”卡”在了哪里,论文提出了一种叫 self-patching 的因果干预技术。

先打个比方。想象一栋三层办公楼:

一楼档案室(模型早期层):新文件最先送到这里登记存档 – 二楼会议室(模型中间层):真正的推理和决策在这里发生 – 三楼仓库(模型晚期层):汇总归档,为最终输出做准备

微调时,新知识被快速存进了一楼档案室和三楼仓库。但二楼会议室的人不知道档案室里有这份文件,推理时就用了旧信息——于是”知道但不会用”。

Self-patching 做的实验很简单粗暴:从档案室(源层 l_s)拿出一份文件,手动塞到会议室(目标层 l_t),看推理结果是否改善。然后穷举所有楼层组合 (l_s, l_t),画一张”渗透地图”。

具体来说,对于模型 M 的第 l 层、第 t 个 token 位置的隐藏状态 h_t^l(P),self-patching 把源 prompt P_s 在源层 l_s 的锚点表示,复制到目标 prompt P_t 在目标层 l_t 的同一锚点位置,然后继续前向传播,测量正确答案的概率变化:

    \[Delta I = I(tilde{M}(P_t), y^<em>) - I(M(P_t), y^</em>)\]

如果 Delta I > 0,说明 l_s 层存着有用的知识表示,只是没被路由到 l_t 层参与计算。

渗透地图:知识在模型里的”扩散电影”

论文最漂亮的实验是逐 epoch 保存 checkpoint,对每个 checkpoint 跑 self-patching 扫描,生成一部”知识渗透动力学”的延时电影。

训练前:地图全蓝。知识还没进入模型,怎么搬运都没用。

记忆刚饱和时:地图上出现明显的离对角线红色区域。这意味着知识已经存在于某些层(通常是早期层或晚期层),如果手动搬到中间层,推理就能成功。但对角线本身还是蓝的——模型自然状态下仍然答不对。

继续训练:红色区域逐渐向对角线扩散。在成功的案例中,红色最终覆盖了对角线——知识自然渗透到了推理层,泛化出现。在失败的案例中,红色区域停滞了,始终到不了对角线——知识”卡”在了半路。

为什么会卡住?因为一旦记忆饱和,损失函数趋近于零,梯度消失,模型不再有动力更新内部表示。知识就永远停在了”存着但用不到”的位置。

知识-电路错位假说:这是路由问题,不是容量问题

基于这些观察,论文提出了 Knowledge-Circuit Misalignment Hypothesis(知识-电路错位假说)

> 微调首先把新事实编码在容易拟合的”存储层”(通常是早期层或晚期层),这些层支持直接回忆,但没有可靠地路由到多步推理所需的”计算层”(通常是中间层)。知识存储和推理计算之间的空间错位,导致了泛化失败。

这个假说有两个可检验的预测:

1. 记忆饱和后,模型内部应该已经存在”离路径”的知识表示——它们包含信息但无法端到端地产生正确推理。✓ 实验证实。 2. 把这些表示手动搬到正确位置,应该能立即提升泛化。✓ 实验证实。

第二个预测的验证结果令人震惊。在 Qwen-2.5-7B 上,chaining 任务的准确率从 0.124 直接跳到 0.504——4 倍提升,而且是在自然微调已经收敛之后。在 LLaMA-3.2-1B 上,从 0.102 跳到 0.316——3 倍提升

六个模型、两个领域(生物医学 STaRK-Prime 和学术 STaRK-MAG),一致性极强。Intersection 任务的鸿沟几乎被完全消除(从 0.8 左右提升到 0.97+)。

排除其他解释

论文做了几个关键的消融实验,排除了”是不是搬运本身就有干扰效果”这种替代解释:

Token 位置消融:在实体位置搬运效果最强(0.64),在 位置搬运无效(0.05)。说明效果确实来自知识表示,不是随便搬运什么都能起作用。

CoT 提示消融:Chain-of-Thought 提示确实有一些帮助(chaining 从 0.12 提到 0.29),但远低于 self-patching(0.44)。而且 CoT 在 intersection 任务上反而会降低性能。

无关知识搬运:搬运另一条不相关事实的表示,效果远低于搬运正确事实的表示。排除了”任何激活扰动都有帮助”的可能。

跨上下文一致性:从记忆 prompt 的表示搬到泛化 prompt,有效层对的模式高度一致。说明搬运的确实是知识表示本身,不是某种 prompt 特定的噪声。

从诊断到实用:两个固定层对恢复 58–75% 的空间

Oracle self-patching 需要对每个实例穷举所有层对,代价太高。但论文发现了一个规律:有效的搬运几乎都集中在两个簇——

晚期层 → 中间层(约 0.8L to 0.5L) – 早期层 → 中间层(约 0.1L to 0.5L

基于这个观察,论文设计了一个极简的固定启发式策略:每个模型架构只需要两个预设的层对,不需要逐实例搜索。

结果:在六个模型上,固定策略恢复了 oracle 头部空间的 58%–75%

模型无干预 Chaining固定策略Oracle
Qwen-2.5-1.5B0.0780.3490.440
Qwen-2.5-3B0.1140.4350.542
Qwen-2.5-7B0.1240.4090.504
LLaMA-3.2-1B0.1020.2520.316
LLaMA-3.2-3B0.1260.3210.404
LLaMA-3.1-8B0.1820.3750.458

平均来看,chaining 准确率从 0.121 提升到 0.357——3 倍提升,仅靠两个固定的层间搬运。

这对 AI 从业者意味着什么

1. 微调不是终点,对齐才是。 传统观念认为”微调 = 注入知识”。这篇论文告诉你:微调只是把知识存进了仓库,你还需要确保知识能到达推理路径。存储 ≠ 路由。

2. “模型容量不够”可能是误诊。 当你的微调模型在推理任务上表现差时,第一反应可能是”模型太小了”或”数据不够多”。但论文显示,从 1.5B 加到 7B 并不能消除鸿沟。问题不在容量,在路由。

3. 损失函数会撒谎。 当 training loss 趋近于零时,你以为模型”学会了”。但实际上,它只是”记住了”。记忆饱和后梯度消失,模型失去了继续调整内部路由的动力。这是一个结构性陷阱。

4. 中间层是推理的”会议室”。 论文与之前关于 LLM 中间层计算的研究一致:多步推理的关键计算发生在中间层。如果你的知识停在早期或晚期层,它就到不了会议室。

5. 对齐感知训练是下一步。 论文指出,未来的微调方法应该显式地优化知识到推理层的路由,而不仅仅是优化记忆损失。这可能意味着在损失函数中加入”路由正则项”,或者设计专门的中间层对齐目标。

一个更深的类比:图书馆与阅览室

最后再打一个比方。想象你是一个图书馆馆长,买了一千本新书。

你把书全部堆进了地下书库(早期层)和顶层仓库(晚期层)。读者来借书,你告诉他们”书在地下”或”书在顶层”。读者能找到书名,能背出目录——这就是”记忆”。

但当一个研究者需要同时引用三本书的内容来做交叉分析时,他需要把书搬到三楼的阅览室(中间层),摊在桌上对比。如果书一直留在书库,交叉分析就做不了——不是书不存在,是书没到该在的地方。

Self-patching 就是做实验:把书从书库搬到阅览室,看交叉分析是否能成功。如果能,说明书的内容没问题,问题出在物流。

微调模型的 Knowing-Using Gap,本质上就是物流问题。

论文信息

标题: Towards Mechanistically Understanding Why Memorized Knowledge Fails to Generalize in Large Language Model Finetuning – 作者: Lu Dai, Ziyang Rao, Yili Wang, Hanqing Wang, Hao Liu, Hui Xiong – 机构: HKUST(GZ), HKUST – arXiv: 2607.08393代码: https://anonymous.4open.science/r/Mem2Gen-71FF – 数据集: STaRK-Prime (生物医学), STaRK-MAG (学术)

#大模型 #微调 #知识泛化 #机械可解释性 #self-patching #知用鸿沟

发表回复

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 🐾 智柴网 沪ICP备2024052574号-1