模型说「帕台农神庙位于罗马」,你想改成「雅典」。重训要几百万美元、几天时间,还可能破坏其他能力;在提示词里塞纠错段落,知识仍然长在权重里,换个问法就复发。知识编辑(knowledge editing)研究的就是第三条路:用一次小规模、可计算的操作,精准改写参数化知识,且不伤及无关能力。这条研究线最有价值的地方不只是方法本身,而是它揭示了「事实知识到底存在 Transformer 的哪一层、以什么形式存储」——这相当于给黑箱做了一次解剖。
一、问题定义:为什么微调不是编辑
微调的三宗罪
用微调改一条事实,看起来可行,实际会撞上三个问题。第一是记忆阈值:经验上要让一条新事实压过旧知识,往往需要几十到几百条重复样本的多轮训练,样本少则学不进去,样本多则过拟合到这句话的表面形式。第二是副作用不可控:全量微调动的是所有参数,改一条知识的同时,模型在无关任务上的表现可能整体塌掉——分布式编码意味着没有「只属于一条知识」的参数可以单独拧动。第三是成本与时效:新闻知识每天都在过期,逐条微调在操作上不成立。知识编辑要的就是四个性质的交集:可靠(改完确实变了)、泛化(换种问法也变)、特异(无关问题不受影响)、可扩展(能批量做上千条)。
先问一个更根本的问题:知识存在哪
在动手改之前,得先知道改哪里。这把知识编辑和另一类工作连接了起来:机制可解释性研究里的因果中介分析(causal tracing),它直接回答「最后几个 token 的信息在哪一层被整合」。
二、因果追踪:给知识定位
ROME 论文的干预实验
「Locating and Editing Factual Associations in GPT」(Meng, Bau, Andonian,Belinkov,2022)做了一个非常物理的实验。输入「The Space Needle is in downtown」这样的完形填空,在「Space」这个词的嵌入被注入噪声的前提下,逐层逐位置地把「干净运行」时各位置各层的激活值回注一部分,观察哪里的回注最能恢复正确预测「Seattle」。结果高度不对称:对预测贡献最大的不是最后负责「读出」的层,也不是最前面处理输入的层,而是中间层的 MLP 模块—— Specifically,在主语最后一个 token 的位置上,中间层 MLP 输出的贡献最大;读出阶段则是靠注意力把这条信息带到句尾。这暗示了一个分工:MLP 是「键值记忆库」,负责把主语映射到联想的属性;注意力负责搬运。
定位的边界
因果追踪的结论要在工程上打折扣地用:它定位的是「这条事实被整合的关键路径」,而不是「这条事实唯一的存储格」。同一事实在相邻层有冗余副本,单点改写不可能覆盖全部副本——这也是后文「连锁效应」失败的伏笔之一。但作为编辑的手术刀坐标,中间层 MLP 已经足够精确。
flowchart TD
Q["输入:The Space Needle is in downtown ? ?"] --> E["嵌入层<br/>注入噪声破坏主语信息"]
E --> L["逐层运行"]
L --> W["干预:<br/>把某层某位置的干净激活回注"]
W --> R{恢复程度}
R -->|"中间层 MLP 回注 → 预测恢复"| K1["结论:事实联想的核心在中间层 MLP"]
R -->|"浅层 / 输出层回注 → 几乎不恢复"| K2["结论:浅层只是编码、深层只是读出"]
K1 --> EDIT["编辑目标确定:对中间层 MLP 下手"]
三、ROME:一次秩一改写的数学
闭式解的推导直觉
ROME(Rank-One Model Editing)把中间层 MLP 的第二个线性层 W 当作键值存储:输入键 k 时输出值 v。想让它「输入关于埃菲尔铁塔的键,输出 Rome」——即把关联从 Paris 改写为 Rome——就构造一个秩一更新,使得新的映射精确满足目标,同时让无关键的输出尽量不动。令 W k* 为编辑后的目标值,解出满足条件的最小扰动:
W' = W + (v* − W k*) kᵀ / (kᵀ k*)
这是一个最小范数解:只在 k* 方向上移动输出,其余方向的输出几乎不变。k* 与 v* 都不是直接取编辑句的词向量,而是从数千个相似句子的统计中优化得到——这是 ROME 与朴素「直接改权重」的关键区别,编辑出来的关联能泛化到同义改写。整个过程是闭式解,一秒内完成,不需要梯度下降。
实际效果与边界
ROME 论文在 CounterFact 数据集(约 2 万条反事实改写,例如「奥巴马的国籍是日本」这类不真实但语法完好的事实)上报告:编辑成功率超过 90%,同义改写(paraphrase)保持率高,无关事实的扰动很小。但代价立刻显现:后续研究(包括 MEMIT 论文自己的消融)发现 ROME 做几百条以上的顺序编辑时,模型在无关任务上的性能开始下滑,且每条编辑只覆盖了知识的部分副本。它是手术刀,但刀口很小。
四、MEMIT:从一条到几千条
把编辑摊到多层
「Mass-Editing Memory in a Transformer」(Meng et al.,ICLR 2023)把 ROME 的单点秩一更新推广为批量更新:数千条编辑目标不是塞进一个位置,而是按预设权重摊到中间的多个连续层(GPT-J 上约为第 3 到第 17 层之间的区段),每层承担一部分更新强度。数学上是把秩一更新的残差按层分配后并行求解,各层同时做最小范数更新。这个「摊薄」策略直接回应了单点编辑的两个痛点:单层承载过多改写会局部过载,以及知识副本的冗余需要多层协同覆盖。
数字与工程意义
MEMIT 在 GPT-J(6B)上一次性插入超过一万条记忆仍保持可控的无关扰动,同期方法(基于超网络的 MEND、基于优化的 Knowledge Editor)在几百条时就明显退化。对工程团队的含义是:如果业务确有「可枚举的事实修正清单」(例如公司更名、产品参数更新、错误知识修补),MEMIT 级别的批量编辑是可行的运维手段,代价是需要为每个基座模型重新做定位与超参适配——编辑层的选择、每层强度分配都对模型架构敏感。
五、评估三指标与连锁效应失败
Efficacy、Generalization、Specificity
知识编辑的标准评估三角来自 ROME 与 CounterFact 的设定。Efficacy:编辑后的目标提示是否输出了新答案,这是底线。Generalization:换一种问法(同义改写、不同句式)是否仍输出新答案,检验编辑是否学到了「关联」而非「字符串」。Specificity:无关的邻居问题(例如改成问另一座建筑)是否不受影响,检验手术刀是否误伤。三者构成张力:想要完美泛化很容易牵连特异性,想要绝对特异又会牺牲泛化。工程上应该按用途定权重——内容审核场景宁可牺牲泛化也要保住特异性(绝不能误改无关事实),而知识纠错场景泛化优先。
连锁效应:编辑的最大软肋
「Evaluating the Ripple Effects of Knowledge Editing in Language Models」(Cohen et al.,TACL 2023)系统测试了编辑的传播失败:把「X 的 CEO 是张三」改成李四之后,问「张三还在 X 工作吗」「X 的 CEO 上个月见了谁」,模型给出的答案依然是围绕旧知识展开的——编辑只更新了被训练的那一跳,知识图谱上依赖这条事实的下游推理链全部保留旧世界。更糟的是反向操作:把「巴黎在法国」改成「巴黎在英国」这类反事实后,问与巴黎相关的地理常识(「埃菲尔铁塔在哪个城市附近」的推断链),模型一半时间仍按真实世界推理,一半时间按被编辑的世界推理,内部出现了两个不自洽的世界观。这个失败是结构性的:秩一改写改变的是单条键值映射,而下游推理由多层多位置的表征共同计算,编辑无法触及。结论很清晰:知识编辑适合「改写一条事实的表述」,不适合「让模型接受一个新世界的完整逻辑」。
六、工程实践:EasyEdit 与选型
动手跑一次编辑
开源工具 EasyEdit(浙大 ZJun 相关团队维护)把 ROME、MEMIT、MEND 等方法统一在一套 API 下,最小示例:
from easyeditor import EditHyperParams, MENDHyperParams, SERACHHyperParams
prompts = ["帕台农神庙位于"]
targets = ["雅典"]
subject = ["帕台农神庙"]
hparams = SERACHHyperParams.from_hparams('hparams/MEMIT/llama-7b.json')
edited_model, weights_copy, _ = apply_memit_to_model(
model, tok, [prompts], [targets], [subject], hparams
)
print(tok.decode(model.generate(**tok(prompts[0], return_tensors='pt').to('cuda'), max_new_tokens=20)[0]))
编辑前后对比的典型输出:编辑前 帕台农神庙位于希腊雅典卫城的山顶上(若原模型学错则为其他城市),编辑后稳定输出目标城市,且同义改写(「帕台农神庙坐落在」「帕台农神庙所在的城市是」)同样命中。
编辑、微调、RAG 的三岔口
选型逻辑其实很清楚。修正的是「可枚举的事实条目」且要求参数级生效:知识编辑,成本最低、见效最快。要注入的是「一个领域的方法论与语感」(新领域的写作风格、代码规范):微调,编辑公式无法承载连续性技能。要的是「随时可更新的知识库、带出处、可审计」:RAG,删除一条文档就是删除一条知识,连锁效应天然不存在。三者不是互斥的:成熟系统常见组合是 RAG 承载易变事实、编辑修补基座的顽固错误、微调沉淀稳定的领域能力。把知识编辑当运维工具用,而不要当学习机制用。
小结
知识编辑这条研究线的两份遗产值得分开记。方法遗产:因果追踪定位到事实联想的核心在中间层 MLP,ROME 用最小范数秩一更新实现闭式单条改写,MEMIT 把强度摊到多层实现万条级批量——三者构成了「定位、单点、批量」的完整工具链,开源生态 EasyEdit 已经可以直接上手。认知遗产更重要:连锁效应实验证明,参数化知识不是可寻址的数据库行,而是一张由多层表征共同编织的推理网,单点改写只能改「说法」,改不动「逻辑」。因此知识编辑的正确定位是修补工具——修顽固错误、清过期事实;凡是涉及系统性知识重构的需求,答案仍然在 RAG 与重训里。理解了这一点,你既不会高估编辑的能力,也不会错过它真正擅长的场景。
读者留言
COMMENTS 暂无还没有留言,来说第一句?