欢迎光临
我们一直在努力

大模型陈述性知识--新事实冲掉旧关联

/* 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;
}

在这里插入图片描述

目录

  • McCloskey的联想记忆实验
  • 干扰为什么会发生
  • 大模型里的同款问题
  • 注入前后的保持率检测
  • 四种缓解手段对比
  • 分域隔离的工程折衷
  • 边界与开放问题
  • 总结
  • 外部引用
  • 摘要

    先学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命中网络A-C命中人类A-B参照
    练熟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)

    示意输出整理成表,数字仅为演示量级。

    检查点域1剩余域2剩余域3剩余
    注入域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
    赞(0)
    未经允许不得转载:171主机测评 » 大模型陈述性知识--新事实冲掉旧关联
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址