/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

目录
摘要
先学A-B再学A-C,新关联学会的同时旧关联大面积崩掉,这就是灾难性干扰。 根源是新旧事实共用同一批权重,写入天然零和。 本文复现最小实验,给出探针检测方法与四种缓解手段的取舍,配套五段可运行代码。
1. McCloskey的联想记忆实验
1.1 A-B再A-C的两段式范式
配对联想学习是认知心理学的经典范式。 主试给被试一批刺激与答案的对子,例如A对应B。 练熟之后换一批答案,让A改配C,再练一轮。 最后回头考第一段,看B还能答出多少。
Barnes与Underwood在1959年先用人类被试做了这个实验。 随着A-C练得越多,人对A-B的回忆逐渐变差。 但下降是温和的,这就是有限的倒摄干扰。 倒摄干扰指后学内容削弱先学记忆的现象。 即便练到很熟,人也很少把B整段忘光。
McCloskey与Cohen在1989年用神经网络复刻这个范式。 论文发表在Psychology of Learning and Motivation第24卷,109至165页。 网络由输入层、隐层、输出层组成,靠反向传播训练。 训练分两段,先A-B后A-C,两段之间不混样本。 输入还带一个上下文位,用来区分当前练的是哪张表。
#mermaid-svg-UYPk0rGkjGeH1c4T{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UYPk0rGkjGeH1c4T .error-icon{fill:#552222;}#mermaid-svg-UYPk0rGkjGeH1c4T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UYPk0rGkjGeH1c4T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UYPk0rGkjGeH1c4T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UYPk0rGkjGeH1c4T .marker.cross{stroke:#333333;}#mermaid-svg-UYPk0rGkjGeH1c4T svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UYPk0rGkjGeH1c4T p{margin:0;}#mermaid-svg-UYPk0rGkjGeH1c4T .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster-label text{fill:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster-label span{color:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster-label span p{background-color:transparent;}#mermaid-svg-UYPk0rGkjGeH1c4T .label text,#mermaid-svg-UYPk0rGkjGeH1c4T span{fill:#333;color:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T .node rect,#mermaid-svg-UYPk0rGkjGeH1c4T .node circle,#mermaid-svg-UYPk0rGkjGeH1c4T .node ellipse,#mermaid-svg-UYPk0rGkjGeH1c4T .node polygon,#mermaid-svg-UYPk0rGkjGeH1c4T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UYPk0rGkjGeH1c4T .rough-node .label text,#mermaid-svg-UYPk0rGkjGeH1c4T .node .label text,#mermaid-svg-UYPk0rGkjGeH1c4T .image-shape .label,#mermaid-svg-UYPk0rGkjGeH1c4T .icon-shape .label{text-anchor:middle;}#mermaid-svg-UYPk0rGkjGeH1c4T .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-UYPk0rGkjGeH1c4T .rough-node .label,#mermaid-svg-UYPk0rGkjGeH1c4T .node .label,#mermaid-svg-UYPk0rGkjGeH1c4T .image-shape .label,#mermaid-svg-UYPk0rGkjGeH1c4T .icon-shape .label{text-align:center;}#mermaid-svg-UYPk0rGkjGeH1c4T .node.clickable{cursor:pointer;}#mermaid-svg-UYPk0rGkjGeH1c4T .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-UYPk0rGkjGeH1c4T .arrowheadPath{fill:#333333;}#mermaid-svg-UYPk0rGkjGeH1c4T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UYPk0rGkjGeH1c4T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UYPk0rGkjGeH1c4T .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UYPk0rGkjGeH1c4T .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-UYPk0rGkjGeH1c4T .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UYPk0rGkjGeH1c4T .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster text{fill:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T .cluster span{color:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-UYPk0rGkjGeH1c4T .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-UYPk0rGkjGeH1c4T rect.text{fill:none;stroke-width:0;}#mermaid-svg-UYPk0rGkjGeH1c4T .icon-shape,#mermaid-svg-UYPk0rGkjGeH1c4T .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-UYPk0rGkjGeH1c4T .icon-shape p,#mermaid-svg-UYPk0rGkjGeH1c4T .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-UYPk0rGkjGeH1c4T .icon-shape .label rect,#mermaid-svg-UYPk0rGkjGeH1c4T .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-UYPk0rGkjGeH1c4T .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-UYPk0rGkjGeH1c4T .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-UYPk0rGkjGeH1c4T :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-UYPk0rGkjGeH1c4T .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-UYPk0rGkjGeH1c4T .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-UYPk0rGkjGeH1c4T .default tspan{fill:#000000!important;}
训练A-B列表
练到接近满分
改训A-C列表
每轮回测A-B
网络A-B接近零
人类被试约五成
图 1-1 两段式实验流程对比
解读:实线是网络路径,虚线是人类对照。同样的A-C训练量下,人类还能答对约五成,网络已跌到接近零。这个反差正是“灾难性”三个字的由来。
1.2 用numpy复现遗忘曲线
最小复现只需要一个两层网络和两条样本。 同一个输入A,先配目标B,练到全对。 再换成目标C,每十轮回头测一次B的命中。 十几步梯度下降就能看到原始论文的核心现象。
# 来源:自实现 / ab_ac_interference.py
# 复现 McCloskey 与 Cohen 1989 的最小化 A-B/A-C 实验
import numpy as np
rng = np.random.default_rng(7)
D_IN, D_H, D_OUT = 8, 32, 8
W1 = rng.normal(0, 0.5, (D_IN, D_H)) # 输入到隐层的权重
W2 = rng.normal(0, 0.5, (D_H, D_OUT)) # 隐层到输出的权重
def forward(x):
h = np.tanh(W1.T @ x) # 隐层激活,分布式表示
return W2.T @ h # 输出打分,最大者即答案
def train_epoch(pairs, lr):
# 单轮更新,pairs 是 (输入, 目标) 的one-hot对
global W1, W2
for x, y in pairs:
h = np.tanh(W1.T @ x)
err = W2.T @ h – y # 误差信号
dh = (W2 @ err) * (1 – h * h) # 经tanh导数回传
W2 -= lr * np.outer(h, err) # 更新输出层
W1 -= lr * np.outer(x, dh) # 更新输入层
def hit(pair):
return int(np.argmax(forward(pair[0])) == np.argmax(pair[1]))
A = np.eye(D_IN)[0] # 同一个主语A
ab = (A, np.eye(D_OUT)[1]) # 旧关联 A 对 B
ac = (A, np.eye(D_OUT)[2]) # 新关联 A 对 C
if __name__ == "__main__":
for _ in range(300): # 阶段一:只学A-B
train_epoch([ab], 0.05)
print("学A-C前 A-B命中:", hit(ab))
print("A-C轮数 A-B命中 A-C命中")
for step in range(1, 51): # 阶段二:只学A-C
train_epoch([ac], 0.05)
if step % 10 == 0:
print(step, hit(ab), hit(ac))
典型输出:学A-C前A-B命中为1。 进入阶段二后,A-C命中在十轮内升到1,A-B同时掉到0。 多数随机种子下,前十个检查点就完成崩落,曲线近乎垂直。 这段代码证明冲掉旧关联不需要任何额外机制,梯度下降本身就够了。
1.3 结果对照与三条结论
原论文的对照数据可以整理成一张表。 人类数据来自Barnes与Underwood的旧实验。 网络数据是McCloskey与Cohen的仿真结果。
| 练熟A-B后 | 约1.0 | 接近0 | 约1.0 |
| A-C练到同等强度 | 接近0,约0至0.1 | 约1.0 | 约五成 |
| A-B与A-C混合训练 | 高 | 高 | 高 |
论文还试过五种补救:增减隐单元数、调学习率、先过度训练A-B、冻结部分权重、把目标值从0和1改成0.1和0.9。 结果都没能根治,最多推迟崩落几个轮次。 作者由此给出三条结论,至今仍是这个领域的公理。
其一,只要新学习会改动编码旧知识的权重,干扰就必然发生。 其二,新学习的量越大,旧知识被破坏得越重。 其三,顺序训练时干扰是灾难性的,混合训练时几乎无害。 后文所有手段,本质上都是在绕这三条结论。
2. 干扰为什么会发生
2.1 共享权重的零和困局
神经网络的知识不在某个单元里,而在权重矩阵里。 一条关联的编码散布在成千上万个连接强度上。 这就是分布式表示,带来泛化,也带来麻烦。
关键在于新旧关联用的是同一批权重。 A-B的记忆写在W1和W2上,A-C的梯度也落在W1和W2上。 梯度下降只有一个目标:让当前批次的误差变小。 它不知道也不关心哪些权重正在承载旧记忆。
于是写入是零和的。 新关联每前进一步,都在同一个矩阵上做减法。 旧关联没有自己的保险柜,随时会被改写。
#mermaid-svg-AxFOTgHQqLMp7iss{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AxFOTgHQqLMp7iss .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AxFOTgHQqLMp7iss .error-icon{fill:#552222;}#mermaid-svg-AxFOTgHQqLMp7iss .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AxFOTgHQqLMp7iss .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AxFOTgHQqLMp7iss .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AxFOTgHQqLMp7iss .marker.cross{stroke:#333333;}#mermaid-svg-AxFOTgHQqLMp7iss svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AxFOTgHQqLMp7iss p{margin:0;}#mermaid-svg-AxFOTgHQqLMp7iss .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-AxFOTgHQqLMp7iss .cluster-label text{fill:#333;}#mermaid-svg-AxFOTgHQqLMp7iss .cluster-label span{color:#333;}#mermaid-svg-AxFOTgHQqLMp7iss .cluster-label span p{background-color:transparent;}#mermaid-svg-AxFOTgHQqLMp7iss .label text,#mermaid-svg-AxFOTgHQqLMp7iss span{fill:#333;color:#333;}#mermaid-svg-AxFOTgHQqLMp7iss .node rect,#mermaid-svg-AxFOTgHQqLMp7iss .node circle,#mermaid-svg-AxFOTgHQqLMp7iss .node ellipse,#mermaid-svg-AxFOTgHQqLMp7iss .node polygon,#mermaid-svg-AxFOTgHQqLMp7iss .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AxFOTgHQqLMp7iss .rough-node .label text,#mermaid-svg-AxFOTgHQqLMp7iss .node .label text,#mermaid-svg-AxFOTgHQqLMp7iss .image-shape .label,#mermaid-svg-AxFOTgHQqLMp7iss .icon-shape .label{text-anchor:middle;}#mermaid-svg-AxFOTgHQqLMp7iss .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AxFOTgHQqLMp7iss .rough-node .label,#mermaid-svg-AxFOTgHQqLMp7iss .node .label,#mermaid-svg-AxFOTgHQqLMp7iss .image-shape .label,#mermaid-svg-AxFOTgHQqLMp7iss .icon-shape .label{text-align:center;}#mermaid-svg-AxFOTgHQqLMp7iss .node.clickable{cursor:pointer;}#mermaid-svg-AxFOTgHQqLMp7iss .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AxFOTgHQqLMp7iss .arrowheadPath{fill:#333333;}#mermaid-svg-AxFOTgHQqLMp7iss .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AxFOTgHQqLMp7iss .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AxFOTgHQqLMp7iss .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AxFOTgHQqLMp7iss .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AxFOTgHQqLMp7iss .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AxFOTgHQqLMp7iss .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AxFOTgHQqLMp7iss .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AxFOTgHQqLMp7iss .cluster text{fill:#333;}#mermaid-svg-AxFOTgHQqLMp7iss .cluster span{color:#333;}#mermaid-svg-AxFOTgHQqLMp7iss div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AxFOTgHQqLMp7iss .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AxFOTgHQqLMp7iss rect.text{fill:none;stroke-width:0;}#mermaid-svg-AxFOTgHQqLMp7iss .icon-shape,#mermaid-svg-AxFOTgHQqLMp7iss .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AxFOTgHQqLMp7iss .icon-shape p,#mermaid-svg-AxFOTgHQqLMp7iss .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AxFOTgHQqLMp7iss .icon-shape .label rect,#mermaid-svg-AxFOTgHQqLMp7iss .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AxFOTgHQqLMp7iss .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AxFOTgHQqLMp7iss .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AxFOTgHQqLMp7iss :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-AxFOTgHQqLMp7iss .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-AxFOTgHQqLMp7iss .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-AxFOTgHQqLMp7iss .default tspan{fill:#000000!important;}
旧关联
新关联
改写
输入A
共享隐层权重
输出B
输出C
A-C的梯度
图 2-1 同一个权重矩阵服务两个主人
解读:梯度箭头只指向新任务,旧关联没有任何保护机制。图里唯一的箭头方向,就决定了遗忘的方向。
2.2 从权重空间看梯度覆盖
换个视角,把学习看成在权重空间里走路。 学A-B时,网络走到一个能答对A-B的点。 学A-C时,它被拉向另一个只关心A-C的点。 两段路径都由各自批次的梯度决定,互不通气。
单步更新可以写成一句话:新权重等于旧权重减去学习率乘以新梯度。 问题在于新梯度与旧关联的编码方向往往内积为负。 也就是说,降新误差的方向恰好抬高了旧误差。 重叠越多,这种对撞越剧烈,可整理成下表。
| 同一主语换宾语 | 强 | A-B接A-C |
| 同域不同主语 | 中 | 新旧法条交替学 |
| 远域事实 | 弱 | 物理知识与菜谱 |
这张表解释了第3章会看到的现象。 注入同域新事实时,共享主语的关系最先被冲。 远域语料的干扰小,但不是零,隐层总有公共通路。 所以缓解思路都是围绕“减少重叠”或“保护旧方向”展开。
2.3 人脑为什么不会这样
人类也有倒摄干扰,但从不灾难性。 认知科学的主流解释是互补学习系统理论。 McClelland、McNaughton与O’Reilly在1995年给出了完整论述。
脑内有两套存储:海马体快,新皮层慢。 海马体用稀疏编码记单次情节,改写成本低。 新皮层用分布式编码存长期统计规律,只在离线整合时慢改。 白天的新经验先入海马,睡眠时再回放给皮层逐步吸收。
| 写入速度 | 快,单次可记 | 慢,需反复 |
| 编码方式 | 稀疏,低重叠 | 分布式,高重叠 |
| 遗忘表现 | 快速更替 | 缓慢整合 |
| 工程对应 | 回放缓冲区 | 预训练权重 |
这张对照表是第5章回放方法的生物学依据。 旧样本混入新批次,等价于把海马的回放搬进训练循环。 它不能消除干扰,但能把灾难性压成渐进性。 对工程来说,这个差距已经足够重要。
3. 大模型里的同款问题
3.1 继续预训练时的旧域抽检
大模型的知识注入常用CPT,即继续预训练。 做法是在基座模型上,用新领域语料接着训。 训完的新模型答得上新域问题,看起来很美好。
问题出在抽检旧域。 方向性的现象描述如下:注入完成后,用旧领域的事实题抽检,命中率下滑。 注入的token越多、训练步数越长,下滑越明显。 把新旧语料混洗后再训,下滑显著缓解。 这与1.3的结论三完全同构,混合训练几乎无害。
#mermaid-svg-qwFgtOqzwoDHhOhl{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-qwFgtOqzwoDHhOhl .error-icon{fill:#552222;}#mermaid-svg-qwFgtOqzwoDHhOhl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qwFgtOqzwoDHhOhl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qwFgtOqzwoDHhOhl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qwFgtOqzwoDHhOhl .marker.cross{stroke:#333333;}#mermaid-svg-qwFgtOqzwoDHhOhl svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qwFgtOqzwoDHhOhl p{margin:0;}#mermaid-svg-qwFgtOqzwoDHhOhl .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster-label text{fill:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster-label span{color:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster-label span p{background-color:transparent;}#mermaid-svg-qwFgtOqzwoDHhOhl .label text,#mermaid-svg-qwFgtOqzwoDHhOhl span{fill:#333;color:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl .node rect,#mermaid-svg-qwFgtOqzwoDHhOhl .node circle,#mermaid-svg-qwFgtOqzwoDHhOhl .node ellipse,#mermaid-svg-qwFgtOqzwoDHhOhl .node polygon,#mermaid-svg-qwFgtOqzwoDHhOhl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qwFgtOqzwoDHhOhl .rough-node .label text,#mermaid-svg-qwFgtOqzwoDHhOhl .node .label text,#mermaid-svg-qwFgtOqzwoDHhOhl .image-shape .label,#mermaid-svg-qwFgtOqzwoDHhOhl .icon-shape .label{text-anchor:middle;}#mermaid-svg-qwFgtOqzwoDHhOhl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-qwFgtOqzwoDHhOhl .rough-node .label,#mermaid-svg-qwFgtOqzwoDHhOhl .node .label,#mermaid-svg-qwFgtOqzwoDHhOhl .image-shape .label,#mermaid-svg-qwFgtOqzwoDHhOhl .icon-shape .label{text-align:center;}#mermaid-svg-qwFgtOqzwoDHhOhl .node.clickable{cursor:pointer;}#mermaid-svg-qwFgtOqzwoDHhOhl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-qwFgtOqzwoDHhOhl .arrowheadPath{fill:#333333;}#mermaid-svg-qwFgtOqzwoDHhOhl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qwFgtOqzwoDHhOhl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qwFgtOqzwoDHhOhl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qwFgtOqzwoDHhOhl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-qwFgtOqzwoDHhOhl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qwFgtOqzwoDHhOhl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster text{fill:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl .cluster span{color:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qwFgtOqzwoDHhOhl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-qwFgtOqzwoDHhOhl rect.text{fill:none;stroke-width:0;}#mermaid-svg-qwFgtOqzwoDHhOhl .icon-shape,#mermaid-svg-qwFgtOqzwoDHhOhl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-qwFgtOqzwoDHhOhl .icon-shape p,#mermaid-svg-qwFgtOqzwoDHhOhl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-qwFgtOqzwoDHhOhl .icon-shape .label rect,#mermaid-svg-qwFgtOqzwoDHhOhl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-qwFgtOqzwoDHhOhl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-qwFgtOqzwoDHhOhl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-qwFgtOqzwoDHhOhl :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-qwFgtOqzwoDHhOhl .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-qwFgtOqzwoDHhOhl .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-qwFgtOqzwoDHhOhl .default tspan{fill:#000000!important;}
基座模型
注入新域语料
新域事实学会
旧域事实抽检下滑
注入越多下滑越明显
图 3-1 CPT注入的双面效果
解读:右侧两条支路同时发生,学会与冲掉是同一批梯度的一体两面。想让右边只有一条支路,就要靠检测和缓解手段。
这里强调一点,上述规律是方向性表述。 具体下滑幅度依赖模型规模、语料配比和领域重叠度。 不同公开报告的数字差异大,本文不引用具体值。 判断自己场景是否中招,靠第4章的探针检测。
3.2 改一个宾语,牵连同主语
冲掉的不只是远处的旧事实,还有近处的邻居。 Physics of LLMs系列第三部分之二给出了受控实验证据。 论文编号arXiv 2309.14402,作者Allen-Zhu与Li。
他们在合成传记数据上做知识编辑实验。 把某个虚拟人物的雇主改掉,然后继续训练。 结果同一个人的其他属性也出现退化,例如出生地和职业。 论文的结论是新知识学习与旧知识保持存在张力。 改一个宾语,牵连同主语的其他关系。
这种连带遗忘有明确的统计签名。 把探针按主语分组,被改写主语所在的组衰减最大。 下面的代码演示这个分组统计怎么写。
# 来源:自实现 / interference_sensitivity.py
# 按主语与关系分组,统计注入前后的命中变化
import numpy as np
from collections import defaultdict
def group_decay(records):
# records 元素为 (主语, 关系, 注入前命中, 注入后命中)
g = defaultdict(list)
for subj, rel, b, a in records:
g[(subj, rel)].append((b, a))
table = []
for (subj, rel), v in sorted(g.items()):
b = float(np.mean([p[0] for p in v]))
a = float(np.mean([p[1] for p in v]))
table.append((subj, rel, round(b, 2),
round(a, 2), round(a – b, 2)))
return table
def make_records(n=120, seed=11):
# mock数据:偶数序号模拟被改写主语的同组关系
rng = np.random.default_rng(seed)
subj_list = ["Eiffel", "Amazon", "Titan", "Beethoven"]
rel_list = ["位置", "流经", "卫星", "出生地"]
out = []
for i in range(n):
subj = subj_list[i % 4]
rel = rel_list[(i // 4) % 4]
b = 0.8 + rng.random() * 0.2
penalty = 0.3 if i % 2 == 0 else 0.06
a = max(0.0, b – penalty * rng.random())
out.append((subj, rel, b, a))
return out
if __name__ == "__main__":
print("主语 关系 前命中 后命中 变化")
for row in group_decay(make_records()):
print(*row)
mock数据里两组惩罚系数差五倍,模拟连带强度差。 跑出来的表里,同一主语不同关系的变化值明显分两档。 真实场景把mock换成探针实测即可,分组逻辑原样可用。 读懂这张表,就知道哪些关系最需要保护。
3.3 注入越多,滑得越多的数学结构
多点注入时,衰减近似连乘。 每注入一个域,旧域保持率乘上一个小于1的系数。 系数连乘几次,最老的域就被乘到很低。 这呼应1.3的结论二:新学习量越大,破坏越重。
结构上可以写成一句:n次注入后,最早域的剩余率约为各次剩余率的乘积。 即便每次只损失百分之几,连乘十次也很可观。 这就是多域知识库越训越薄的根源。
模型变大并不能自动豁免。 参数虽多,陈述性知识仍高度集中在FFN权重里。 更大的模型重叠路径更多,干扰形态只会更隐蔽。 方向性地说,规模对遗忘率的定量影响仍是开放课题,第7章再谈。
4. 注入前后的保持率检测
4.1 固定探针集的设计
对抗遗忘的第一步是量化遗忘。 业界通行做法是LAMA式探针集,源自论文arXiv 1904.01052。 思路是把关系知识写成完形填空模板。 例如“某国的首都是某市”,模型填空即视为命中。
LAMA覆盖Wikidata等来源的数十个关系模板。 工程上不必照搬全集,按自家领域裁剪即可。 设计探针集有四条硬原则。
其一,集合固定,注入前后跑同一批题,题面不许换。 其二,按域分层,每个域单独算命中率,别看总分。 其三,覆盖主语与关系的网格,专抓连带遗忘。 其四,区分必保题与可容忍题,阈值分级设置。
#mermaid-svg-HePbae3YSiY6cZpu{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HePbae3YSiY6cZpu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HePbae3YSiY6cZpu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HePbae3YSiY6cZpu .error-icon{fill:#552222;}#mermaid-svg-HePbae3YSiY6cZpu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HePbae3YSiY6cZpu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HePbae3YSiY6cZpu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HePbae3YSiY6cZpu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HePbae3YSiY6cZpu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HePbae3YSiY6cZpu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HePbae3YSiY6cZpu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HePbae3YSiY6cZpu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HePbae3YSiY6cZpu .marker.cross{stroke:#333333;}#mermaid-svg-HePbae3YSiY6cZpu svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HePbae3YSiY6cZpu p{margin:0;}#mermaid-svg-HePbae3YSiY6cZpu .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-HePbae3YSiY6cZpu .cluster-label text{fill:#333;}#mermaid-svg-HePbae3YSiY6cZpu .cluster-label span{color:#333;}#mermaid-svg-HePbae3YSiY6cZpu .cluster-label span p{background-color:transparent;}#mermaid-svg-HePbae3YSiY6cZpu .label text,#mermaid-svg-HePbae3YSiY6cZpu span{fill:#333;color:#333;}#mermaid-svg-HePbae3YSiY6cZpu .node rect,#mermaid-svg-HePbae3YSiY6cZpu .node circle,#mermaid-svg-HePbae3YSiY6cZpu .node ellipse,#mermaid-svg-HePbae3YSiY6cZpu .node polygon,#mermaid-svg-HePbae3YSiY6cZpu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-HePbae3YSiY6cZpu .rough-node .label text,#mermaid-svg-HePbae3YSiY6cZpu .node .label text,#mermaid-svg-HePbae3YSiY6cZpu .image-shape .label,#mermaid-svg-HePbae3YSiY6cZpu .icon-shape .label{text-anchor:middle;}#mermaid-svg-HePbae3YSiY6cZpu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-HePbae3YSiY6cZpu .rough-node .label,#mermaid-svg-HePbae3YSiY6cZpu .node .label,#mermaid-svg-HePbae3YSiY6cZpu .image-shape .label,#mermaid-svg-HePbae3YSiY6cZpu .icon-shape .label{text-align:center;}#mermaid-svg-HePbae3YSiY6cZpu .node.clickable{cursor:pointer;}#mermaid-svg-HePbae3YSiY6cZpu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-HePbae3YSiY6cZpu .arrowheadPath{fill:#333333;}#mermaid-svg-HePbae3YSiY6cZpu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-HePbae3YSiY6cZpu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-HePbae3YSiY6cZpu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HePbae3YSiY6cZpu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-HePbae3YSiY6cZpu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HePbae3YSiY6cZpu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-HePbae3YSiY6cZpu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-HePbae3YSiY6cZpu .cluster text{fill:#333;}#mermaid-svg-HePbae3YSiY6cZpu .cluster span{color:#333;}#mermaid-svg-HePbae3YSiY6cZpu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-HePbae3YSiY6cZpu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-HePbae3YSiY6cZpu rect.text{fill:none;stroke-width:0;}#mermaid-svg-HePbae3YSiY6cZpu .icon-shape,#mermaid-svg-HePbae3YSiY6cZpu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-HePbae3YSiY6cZpu .icon-shape p,#mermaid-svg-HePbae3YSiY6cZpu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-HePbae3YSiY6cZpu .icon-shape .label rect,#mermaid-svg-HePbae3YSiY6cZpu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-HePbae3YSiY6cZpu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-HePbae3YSiY6cZpu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-HePbae3YSiY6cZpu :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-HePbae3YSiY6cZpu .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-HePbae3YSiY6cZpu .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-HePbae3YSiY6cZpu .default tspan{fill:#000000!important;}
达标
超标
固定探针集
注入前跑一遍
注入后再跑一遍
逐域算保持率
阈值门禁
放行上线
回滚并调参
图 4-1 保持率检测流水线
解读:形状与回归测试一致。探针集扮演单元测试里的golden用例,门禁扮演CI。两条分支的差别只在阈值怎么定,4.3节展开。
4.2 保持率检测器实现
检测器本体很薄,核心是两次快照对比。 难点不在代码,在探针集的维护纪律。 下面是可直接套用的骨架。
# 来源:自实现 / retention_probe.py
# 探针集思路参照 LAMA(Petroni 等,arXiv:1904.01052)
import numpy as np
def probe_report(model, probes):
# probes 元素为 (题目id, 领域, 模型输入, 标准答案下标)
by_dom = {}
for pid, dom, x, gold in probes:
ok = int(np.argmax(model(x)) == gold)
by_dom.setdefault(dom, []).append(ok)
return {d: sum(v) / len(v) for d, v in by_dom.items()}
def retention(before, after):
# 逐领域对比命中率,负变化即遗忘幅度
rows = []
for d, b in sorted(before.items()):
a = after.get(d, 0.0)
rows.append((d, round(b, 3), round(a, 3),
round(a – b, 3)))
return rows
if __name__ == "__main__":
def snap_model(known_dom, other_acc):
# mock模型:known域全对,其余域按概率碰对
r = np.random.default_rng(3)
def model(x):
score = r.random(10)
dom, gold = x
if dom == known_dom or r.random() < other_acc:
score[gold] = 1.0
return score
return model
probes = [(i, "旧域" if i < 40 else "新域",
("旧域" if i < 40 else "新域", i % 10),
i % 10) for i in range(60)]
before = probe_report(snap_model("旧域", 0.0), probes)
after = probe_report(snap_model("新域", 0.55), probes)
print("领域 前命中 后命中 变化")
for row in retention(before, after):
print(*row)
示例输出里,旧域从1.0掉到约0.55,新域升到1.0。 mock数字是示意,真实使用时把两个snap_model换成前后两次模型前向。 retention函数返回的变化列,就是门禁判断的依据。 按域输出而不是总分,是这份代码最重要的设计。
4.3 把保持率做成回归门禁
单次检测只能救一次发布。 把检测嵌进流程,才是可持续的做法。 思路与软件回归测试同构,三条纪律。
第一,快照留档。 每次注入前的模型与探针结果都存档,出问题可回滚。 第二,阈值分级。 必保域下滑超过两个百分点即阻断,普通域放宽到五个点。 具体数值按业务定,关键是先有这条线。 第三,看趋势不看单点。 把每轮保持率画成曲线,持续下滑比偶发抖动更危险。
这套门禁的成本几乎只有推理算力。 相比注入失败后再排查,贵得其所。 它的产出还直接喂给第5章的选型决策。 没有检测数据,四种缓解手段的效果只能靠感觉。
5. 四种缓解手段对比
5.1 回放:旧样本混进新批次
回放是rehearsal的工程化,也是历史最久的方案。 做法是在新批次里掺入旧样本,让旧知识持续投票。 梯度里始终有旧方向的支持,权重不会被单边拉走。
#mermaid-svg-inMuCmUOaPIypv3e{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-inMuCmUOaPIypv3e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-inMuCmUOaPIypv3e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-inMuCmUOaPIypv3e .error-icon{fill:#552222;}#mermaid-svg-inMuCmUOaPIypv3e .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-inMuCmUOaPIypv3e .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-inMuCmUOaPIypv3e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-inMuCmUOaPIypv3e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-inMuCmUOaPIypv3e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-inMuCmUOaPIypv3e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-inMuCmUOaPIypv3e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-inMuCmUOaPIypv3e .marker{fill:#333333;stroke:#333333;}#mermaid-svg-inMuCmUOaPIypv3e .marker.cross{stroke:#333333;}#mermaid-svg-inMuCmUOaPIypv3e svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-inMuCmUOaPIypv3e p{margin:0;}#mermaid-svg-inMuCmUOaPIypv3e .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-inMuCmUOaPIypv3e .cluster-label text{fill:#333;}#mermaid-svg-inMuCmUOaPIypv3e .cluster-label span{color:#333;}#mermaid-svg-inMuCmUOaPIypv3e .cluster-label span p{background-color:transparent;}#mermaid-svg-inMuCmUOaPIypv3e .label text,#mermaid-svg-inMuCmUOaPIypv3e span{fill:#333;color:#333;}#mermaid-svg-inMuCmUOaPIypv3e .node rect,#mermaid-svg-inMuCmUOaPIypv3e .node circle,#mermaid-svg-inMuCmUOaPIypv3e .node ellipse,#mermaid-svg-inMuCmUOaPIypv3e .node polygon,#mermaid-svg-inMuCmUOaPIypv3e .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-inMuCmUOaPIypv3e .rough-node .label text,#mermaid-svg-inMuCmUOaPIypv3e .node .label text,#mermaid-svg-inMuCmUOaPIypv3e .image-shape .label,#mermaid-svg-inMuCmUOaPIypv3e .icon-shape .label{text-anchor:middle;}#mermaid-svg-inMuCmUOaPIypv3e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-inMuCmUOaPIypv3e .rough-node .label,#mermaid-svg-inMuCmUOaPIypv3e .node .label,#mermaid-svg-inMuCmUOaPIypv3e .image-shape .label,#mermaid-svg-inMuCmUOaPIypv3e .icon-shape .label{text-align:center;}#mermaid-svg-inMuCmUOaPIypv3e .node.clickable{cursor:pointer;}#mermaid-svg-inMuCmUOaPIypv3e .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-inMuCmUOaPIypv3e .arrowheadPath{fill:#333333;}#mermaid-svg-inMuCmUOaPIypv3e .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-inMuCmUOaPIypv3e .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-inMuCmUOaPIypv3e .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-inMuCmUOaPIypv3e .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-inMuCmUOaPIypv3e .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-inMuCmUOaPIypv3e .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-inMuCmUOaPIypv3e .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-inMuCmUOaPIypv3e .cluster text{fill:#333;}#mermaid-svg-inMuCmUOaPIypv3e .cluster span{color:#333;}#mermaid-svg-inMuCmUOaPIypv3e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-inMuCmUOaPIypv3e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-inMuCmUOaPIypv3e rect.text{fill:none;stroke-width:0;}#mermaid-svg-inMuCmUOaPIypv3e .icon-shape,#mermaid-svg-inMuCmUOaPIypv3e .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-inMuCmUOaPIypv3e .icon-shape p,#mermaid-svg-inMuCmUOaPIypv3e .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-inMuCmUOaPIypv3e .icon-shape .label rect,#mermaid-svg-inMuCmUOaPIypv3e .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-inMuCmUOaPIypv3e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-inMuCmUOaPIypv3e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-inMuCmUOaPIypv3e :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-inMuCmUOaPIypv3e .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-inMuCmUOaPIypv3e .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-inMuCmUOaPIypv3e .default tspan{fill:#000000!important;}
顺序注入的事实
回放
正则锚定
知识编辑
分域LoRA
代价:存旧数据
代价:算力开销
风险:涟漪效应
代价:路由与运维
图 5-1 四条缓解路线与各自的账单
解读:没有免费选项,选择本质是挑自己付得起的代价。后两小节逐条展开,5.3末尾给汇总表。
回放的关键旋钮是掺入比例。 比例太低压不住干扰,太高新知识学不进去。 示意性的经验起点是旧样本占一到三成,需按场景调。
# 来源:自实现 / replay_sampler.py
import numpy as np
class ReplayBuffer:
def __init__(self, capacity, replay_ratio):
self.capacity = capacity # 旧样本池容量
self.ratio = replay_ratio # 目标旧样本占比
self.pool = []
def add(self, samples):
# 池满后随机覆盖,近似均匀保留旧分布
for s in samples:
if len(self.pool) < self.capacity:
self.pool.append(s)
else:
i = np.random.randint(self.capacity)
self.pool[i] = s
def mix(self, new_batch):
# 按占比把旧样本混进新批次
k = int(len(new_batch) * self.ratio / (1 – self.ratio))
k = min(k, len(self.pool))
idx = np.random.choice(len(self.pool), k, replace=False)
mixed = [self.pool[i] for i in idx] + list(new_batch)
np.random.shuffle(mixed) # 打散,避免批次分组
return mixed, k / len(mixed)
if __name__ == "__main__":
buf = ReplayBuffer(capacity=500, replay_ratio=0.25)
buf.add([("旧域", i) for i in range(500)])
batch = [("新域", i) for i in range(48)]
mixed, real = buf.mix(batch)
old_cnt = sum(1 for d, _ in mixed if d == "旧域")
print("批大小", len(mixed), "旧样本", old_cnt,
"实际占比", round(real, 3))
容量参数决定旧分布能回溯多远,比例参数决定压制强度。 两个参数都要配合第4章的探针曲线来调。 回放的死穴是旧数据留存,合规不允许时只能换路线。
5.2 正则与参数隔离:给重要权重上锚
另一条路线不动数据,改损失函数。 代表思路是EWC,弹性权重巩固,源自2017年的论文。 它先估计每个权重对旧任务的重要性。 然后把重要权重拴在旧值附近,新训练拉不动。
更新规则可以口述:总损失等于新任务损失,加上惩罚项。 惩罚项等于重要性乘以权重偏移量的平方。 不重要的权重随便动,重要的动一下都很贵。 这相当于在权重空间里给旧知识画了个保护圈。
| 额外数据 | 需要旧样本 | 不需要 |
| 额外算力 | 每步更多样本 | 计算重要性矩阵 |
| 合规友好度 | 低 | 高 |
| 多任务后表现 | 稳定 | 锚点易互相牵制 |
方向性地说,任务一多,正则类的锚点会互相冲突。 后续变体如SI和MAS改用不同的重要性度量,思路相近。 工程上常把它当回放的补充,而不是替代。
5.3 知识编辑:定点改写的诱惑与失控
第三条路线最激进:不训练,直接改权重。 代表是ROME,论文arXiv 2202.05262。 它先用因果追踪定位,发现事实集中在FFN第二层。 再把该层看作线性关联存储,对单条事实做闭式秩一修正。
诱惑很明显:秒级改一条事实,不碰其他训练。 代价是失控风险,公开报告的方向性结论有三条。 其一,涟漪效应,改一条事实会带偏同主语的其他事实。 其二,句式泛化不稳,换种问法编辑就可能失效。 其三,批量编辑互相破坏,编辑之间没有隔离机制。
四种手段放到一张表里,方便横向比较。
| 回放 | 中到高 | 中 | 旧数据存储与算力 | 配比难调,合规受限 |
| 正则EWC类 | 中 | 中低 | 重要性矩阵开销 | 多任务后锚点冲突 |
| 知识编辑ROME | 定点高 | 单点高 | 定位与验证 | 涟漪效应,批量互毁 |
| 分域LoRA | 域内高 | 中 | N份适配器与路由 | 路由错误,跨域查询 |
表里没有最优解,只有场景匹配问题。 少量事实更新优先编辑,成域注入优先回放加正则。 强隔离多域场景,答案在下一章。
6. 分域隔离的工程折衷
6.1 分域LoRA的路由架构
隔离思路最彻底:不同域不共享可写参数。 做法是冻结基座,每个域单独训一个LoRA适配器。 注入新域只动本域适配器,域间天然零冲刷。
#mermaid-svg-3vct2QjqPbzYTgmO{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3vct2QjqPbzYTgmO .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3vct2QjqPbzYTgmO .error-icon{fill:#552222;}#mermaid-svg-3vct2QjqPbzYTgmO .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3vct2QjqPbzYTgmO .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3vct2QjqPbzYTgmO .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3vct2QjqPbzYTgmO .marker.cross{stroke:#333333;}#mermaid-svg-3vct2QjqPbzYTgmO svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3vct2QjqPbzYTgmO p{margin:0;}#mermaid-svg-3vct2QjqPbzYTgmO .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-3vct2QjqPbzYTgmO .cluster-label text{fill:#333;}#mermaid-svg-3vct2QjqPbzYTgmO .cluster-label span{color:#333;}#mermaid-svg-3vct2QjqPbzYTgmO .cluster-label span p{background-color:transparent;}#mermaid-svg-3vct2QjqPbzYTgmO .label text,#mermaid-svg-3vct2QjqPbzYTgmO span{fill:#333;color:#333;}#mermaid-svg-3vct2QjqPbzYTgmO .node rect,#mermaid-svg-3vct2QjqPbzYTgmO .node circle,#mermaid-svg-3vct2QjqPbzYTgmO .node ellipse,#mermaid-svg-3vct2QjqPbzYTgmO .node polygon,#mermaid-svg-3vct2QjqPbzYTgmO .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3vct2QjqPbzYTgmO .rough-node .label text,#mermaid-svg-3vct2QjqPbzYTgmO .node .label text,#mermaid-svg-3vct2QjqPbzYTgmO .image-shape .label,#mermaid-svg-3vct2QjqPbzYTgmO .icon-shape .label{text-anchor:middle;}#mermaid-svg-3vct2QjqPbzYTgmO .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3vct2QjqPbzYTgmO .rough-node .label,#mermaid-svg-3vct2QjqPbzYTgmO .node .label,#mermaid-svg-3vct2QjqPbzYTgmO .image-shape .label,#mermaid-svg-3vct2QjqPbzYTgmO .icon-shape .label{text-align:center;}#mermaid-svg-3vct2QjqPbzYTgmO .node.clickable{cursor:pointer;}#mermaid-svg-3vct2QjqPbzYTgmO .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3vct2QjqPbzYTgmO .arrowheadPath{fill:#333333;}#mermaid-svg-3vct2QjqPbzYTgmO .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3vct2QjqPbzYTgmO .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3vct2QjqPbzYTgmO .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vct2QjqPbzYTgmO .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3vct2QjqPbzYTgmO .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vct2QjqPbzYTgmO .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3vct2QjqPbzYTgmO .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3vct2QjqPbzYTgmO .cluster text{fill:#333;}#mermaid-svg-3vct2QjqPbzYTgmO .cluster span{color:#333;}#mermaid-svg-3vct2QjqPbzYTgmO div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3vct2QjqPbzYTgmO .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3vct2QjqPbzYTgmO rect.text{fill:none;stroke-width:0;}#mermaid-svg-3vct2QjqPbzYTgmO .icon-shape,#mermaid-svg-3vct2QjqPbzYTgmO .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vct2QjqPbzYTgmO .icon-shape p,#mermaid-svg-3vct2QjqPbzYTgmO .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3vct2QjqPbzYTgmO .icon-shape .label rect,#mermaid-svg-3vct2QjqPbzYTgmO .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vct2QjqPbzYTgmO .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3vct2QjqPbzYTgmO .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3vct2QjqPbzYTgmO :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-3vct2QjqPbzYTgmO .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-3vct2QjqPbzYTgmO .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-3vct2QjqPbzYTgmO .default tspan{fill:#000000!important;}
域一
域二
域三
查询
领域分类器
适配器一
适配器二
适配器三
共享冻结基座
输出
图 6-1 分域路由架构
解读:适配器可插拔,基座只读。每个适配器都能单独回滚或重训,互不牵连。代价集中在分类器这一跳上。
架构的账要算三笔。 第一,运维成本,N个域就是N份权重和N套版本管理。 第二,路由风险,查询送错适配器等于答错题。 第三,边界模糊,跨域复合查询没有唯一正确的适配器。 域划分越清晰,这套架构越划算。
6.2 多域顺序注入的累积衰减模拟
隔离到底值不值,看一组对照数字。 用指数衰减模型模拟多域顺序注入,纯示意。
# 来源:自实现 / sequential_domain_decay.py
# 指数衰减模型:每注入一个新域,旧域保持率按比例衰减
import numpy as np
def simulate(domains=4, base_wash=0.06, replay=0.0, seed=5):
# base_wash 是单次注入对旧域的冲刷率基数
rng = np.random.default_rng(seed)
keep = np.ones(domains)
rows = []
for d in range(1, domains):
for j in range(d): # 域d注入,冲刷更早的每个域
r = base_wash * (1 – replay)
r *= rng.uniform(0.7, 1.3)
keep[j] *= (1 – r)
row = ["注入域" + str(d + 1)]
row += [round(keep[j], 3) for j in range(d)]
rows.append(row)
return rows
if __name__ == "__main__":
for tag, ratio in [("纯顺序注入", 0.0),
("两成五回放", 0.25)]:
print(tag)
for row in simulate(replay=ratio):
print(*row)
示意输出整理成表,数字仅为演示量级。
| 注入域2后 | 约0.94 | 满格 | 无 |
| 注入域3后 | 约0.88 | 约0.94 | 满格 |
| 注入域4后 | 约0.83 | 约0.88 | 约0.94 |
回放把每次冲刷率压低四分之一,衰减放缓但仍连乘。 分域隔离则不同,域内剩余恒为满格,代价是路由复杂度。 何时值得上隔离,给三条判据。 域数不少于三个、域边界可判定、旧数据不能长期留存。 满足两条以上,隔离方案的长期收益通常更好。
7. 边界与开放问题
7.1 各方法的适用边界
没有万能药,只有条件匹配。 先列一张决策表,再谈检测本身的边界。
| 少量事实更新,数十条内 | 知识编辑 | 改动小,秒级生效 |
| 新领域语料成批注入 | 回放加正则 | 保持面大,组合稳健 |
| 多个强隔离领域 | 分域LoRA | 域间零冲刷 |
| 旧数据不可留存 | 参数隔离或编辑 | 合规优先 |
再泼一盆冷水,探针通过不等于没遗忘。 探针集只是知识的抽样,覆盖率永远有限。 没测到的主语关系,可能已经被冲得面目全非。 小规模注入也别掉以轻心。 哪怕只注入一批,撞上高重叠主语一样会连带崩。 把3.2节的分组检测常态化,比任何单点方案可靠。
7.2 还没解决的问题
这个领域的问题清单还很长。 挑四个对工程影响最大的。
#mermaid-svg-YZi4PLcLIbqAAXhk{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YZi4PLcLIbqAAXhk .error-icon{fill:#552222;}#mermaid-svg-YZi4PLcLIbqAAXhk .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YZi4PLcLIbqAAXhk .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YZi4PLcLIbqAAXhk .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YZi4PLcLIbqAAXhk .marker.cross{stroke:#333333;}#mermaid-svg-YZi4PLcLIbqAAXhk svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YZi4PLcLIbqAAXhk p{margin:0;}#mermaid-svg-YZi4PLcLIbqAAXhk .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster-label text{fill:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster-label span{color:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster-label span p{background-color:transparent;}#mermaid-svg-YZi4PLcLIbqAAXhk .label text,#mermaid-svg-YZi4PLcLIbqAAXhk span{fill:#333;color:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk .node rect,#mermaid-svg-YZi4PLcLIbqAAXhk .node circle,#mermaid-svg-YZi4PLcLIbqAAXhk .node ellipse,#mermaid-svg-YZi4PLcLIbqAAXhk .node polygon,#mermaid-svg-YZi4PLcLIbqAAXhk .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YZi4PLcLIbqAAXhk .rough-node .label text,#mermaid-svg-YZi4PLcLIbqAAXhk .node .label text,#mermaid-svg-YZi4PLcLIbqAAXhk .image-shape .label,#mermaid-svg-YZi4PLcLIbqAAXhk .icon-shape .label{text-anchor:middle;}#mermaid-svg-YZi4PLcLIbqAAXhk .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YZi4PLcLIbqAAXhk .rough-node .label,#mermaid-svg-YZi4PLcLIbqAAXhk .node .label,#mermaid-svg-YZi4PLcLIbqAAXhk .image-shape .label,#mermaid-svg-YZi4PLcLIbqAAXhk .icon-shape .label{text-align:center;}#mermaid-svg-YZi4PLcLIbqAAXhk .node.clickable{cursor:pointer;}#mermaid-svg-YZi4PLcLIbqAAXhk .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YZi4PLcLIbqAAXhk .arrowheadPath{fill:#333333;}#mermaid-svg-YZi4PLcLIbqAAXhk .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YZi4PLcLIbqAAXhk .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YZi4PLcLIbqAAXhk .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YZi4PLcLIbqAAXhk .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YZi4PLcLIbqAAXhk .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YZi4PLcLIbqAAXhk .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster text{fill:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk .cluster span{color:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YZi4PLcLIbqAAXhk .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YZi4PLcLIbqAAXhk rect.text{fill:none;stroke-width:0;}#mermaid-svg-YZi4PLcLIbqAAXhk .icon-shape,#mermaid-svg-YZi4PLcLIbqAAXhk .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YZi4PLcLIbqAAXhk .icon-shape p,#mermaid-svg-YZi4PLcLIbqAAXhk .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YZi4PLcLIbqAAXhk .icon-shape .label rect,#mermaid-svg-YZi4PLcLIbqAAXhk .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YZi4PLcLIbqAAXhk .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YZi4PLcLIbqAAXhk .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YZi4PLcLIbqAAXhk :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}#mermaid-svg-YZi4PLcLIbqAAXhk .default>*{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-YZi4PLcLIbqAAXhk .default span{fill:#faf9f5!important;stroke:#ffffff!important;color:#000000!important;stroke-width:0px!important;}#mermaid-svg-YZi4PLcLIbqAAXhk .default tspan{fill:#000000!important;}
开放问题
编辑的涟漪如何收敛
遗忘率随规模怎么变
探针覆盖怎么补全
回放比例如何自适应
图 7-1 四个开放问题的地图
解读:各自对应前文一章。它们共同的特点是缺少可复现的定量结论,方向性证据很多,公认规律还没有。
涟漪问题指知识编辑的副作用缺乏收敛条件。 规模问题指遗忘率与模型规模、数据量的定量关系未定。 覆盖问题指探针集无法证明完备,漏测即风险。 自适应问题指回放比例目前靠人工调,缺少自动机制。 在这些问题解决前,检测先行永远是第一原则。
总结
灾难性干扰是分布式表示的固有代价,1989年的小网络和今天的大模型同病同源。 新旧事实共用权重,写入零和,顺序注入必然冲掉旧关联。 工程上的正解是固定探针集量化保持率,再按场景组合回放、正则、编辑与分域隔离。
外部引用
- Wikipedia:Catastrophic interference条目,含McCloskey与Cohen 1989出处说明:https://en.wikipedia.org/wiki/Catastrophic_interference
- McCloskey与Cohen 1989原文,Psychology of Learning and Motivation第24卷:https://doi.org/10.1016/S0079-7421(08)60536-8
- Physics of Language Models Part 3.2,Knowledge Manipulation,arXiv 2309.14402:https://arxiv.org/abs/2309.14402
- ROME:Locating and Editing Factual Associations in GPT,arXiv 2202.05262:https://arxiv.org/abs/2202.05262
- LAMA:Language Models as Knowledge Bases,arXiv 1904.01052:https://arxiv.org/abs/1904.01052
- EWC:Overcoming catastrophic forgetting in neural networks,arXiv 1612.00796:https://arxiv.org/abs/1612.00796
- Wikipedia:Continual learning条目:https://en.wikipedia.org/wiki/Continual_learning



