← logs/

LLM 序列化知识编辑:一张领域地图,以及我们修复的查询问题

向已训练好的模型写入一条新事实,是一个大致算解决了的问题。在产品的生命周期里一条接一条写入几百条事实,并且让每一条更早的事实到最后仍然回答正确。那是一个不同的研究领域,也是我所做的领域。

这篇日志有两层。第一层,按我的读法画一张 LLM 知识编辑领域地图:ROME 到 MEMIT 到 GRACE 到 WISE 到 AlphaEdit 到 UnKE,六个方法各自以特定方式挪动了球门柱。第二层,对我自己的预印本 One Edit, Many Queries: Self-Generated Query Distributions for Unstructured Model Editing 的深读,它攻击的是我认为这个领域绕了多年的一种失败模式:一条已编辑的事实,只有以写入时完全相同的措辞被问及时才有效。

为什么序列化是困难模式

LLM 知识编辑把一条事实直接写入模型权重,跳过重训练。多数 benchmark 只测单次编辑,或者一个批次。真实部署不一样:修正以流的形式到来。用户报告一个错误答案,一条事实变了,一条策略更新了。每次编辑很小,而编辑不断累积。

LLM 序列化模型编辑是领域里方法集体失效的地方,原因有三个,且相互叠加。

**干扰。**第 50 次编辑落在第 1 到第 49 次编辑之上。直接更新权重的方法不断覆盖自己做过的工作,旧事实被挤掉。编辑越多,更早的一次编辑停止回答的概率越高。

**崩塌。**同一批参数不断被扰动。反复更新让模型偏离预训练分布,最终无关的能力也跟着退化。领域里一些知名方法在编辑足够多次之后干脆整个崩塌。

**局部性–泛化张力。**一次编辑必须改变目标事实,又不触碰它周围的一切(局部性),同时仍然回答改写句和相关问题(泛化)。序列化场景逼出两者的最坏一面:每次编辑都重新打开这个张力,错误层层累积。

还有第四个失败模式,更安静、更少被 benchmark 覆盖:改写鲁棒性。多数 benchmark 用与写入时相同的模板来问一次编辑。换一种问法,就有数量惊人的已编辑模型装傻:事实只在其原始措辞里存活。这一点我后面会再回来。

领域地图

2022            2023          2024            2025
ROME ────▶ MEMIT ───▶ GRACE ───▶ WISE ──▶ AlphaEdit ──▶ UnKE
locate +    batch     lifelong    router +     null-space   unstructured
rank-one    edits     key-value   side         safety       long-form
update      in one    adaptors    memory       edits        knowledge
            pass                  (impossible
                                  triangle)

**ROME。**Rank-One Model Editing:先定位,再编辑。Meng、Bau、Andonian 和 Belinkov 构建了一次因果干预,找出哪些神经元激活对一个事实性预测是决定性的,在中层前馈模块里找到一组明确的步骤,然后证明对这些权重做秩一更新能改变关联,同时保住特异性和泛化。这是做出领域核心动作的那篇论文:事实住在局部化的计算里,所以你可以外科手术式地编辑它们。Locating and Editing Factual Associations in GPT

**MEMIT。**Mass-Editing Memory in a Transformer。同一个团队把先定位后编辑从一条事实扩展到很多条:MEMIT 在 GPT-J、GPT-NeoX 这类模型上一次通过就更新数千条关联,远超此前方法能做到的。一个重要细节:MEMIT 是批量编辑,不是 LLM 序列化模型编辑。一次通过,一个计划,一切一致。那比部署系统面对的活容易得多。

GRACE。Aging with GRACE: Lifelong Model Editing with Discrete Key-Value Adaptors,Hartvigsen 及其同事。与权重编辑的第一次认真决裂。GRACE 让模型保持冻结,把新映射作为编辑的离散码本写入其隐空间:一个键值存储,而不是权重补丁。因为权重从不改变,后来的编辑不可能损害先前的编辑,GRACE 能支持数千次来自流式错误的 LLM 序列化模型编辑。这就是我亲手复现过的方法;下文详述。

WISE。WISE: Rethinking the Knowledge Memory for Lifelong Model Editing of Large Language Models。Wang 及其同事精确地命名了问题:不可能三角。可靠性、泛化、局部性无法在终身编辑中同时实现——如果你只编辑长期记忆(参数)或只编辑工作记忆(检索)的话。他们的解法是双重参数记忆:主记忆存放预训练知识,侧记忆存放编辑,由一个路由决定查询走哪块记忆,外加分片机制,让各次编辑住在相互分离的子空间里。

AlphaEdit。AlphaEdit: Null-Space Constrained Knowledge Editing for Language Models。Fang 及其同事观察到,先定位后编辑的扰动会破坏被保留的知识,而在 LLM 序列化模型编辑中这一点更糟。他们的解法很优雅:施加扰动之前,先把扰动投影到被保留知识的零空间上,于是被编辑的区域移动了,而该留下的不受打扰。可证明、成本低,还抬升了整个先定位后编辑方法家族。这是把序列化损害当作几何问题处理的那条工作线。

UnKE。UnKE: Unstructured Knowledge Editing in Large Language Models。Deng 及其同事指出,领域的 benchmark 大多是结构化知识(三元组),而真实知识是长篇、嘈杂、复杂的。他们证明,MEMIT 式的局部层键值存储和术语驱动的优化无法迁移,并用非局部块键值存储和原因驱动的优化取而代之:直接编辑最后一个 token,同时保留上下文。他们的结果在批量与序列化两种设定下都成立。

为什么这才是对这个领域的正确读法?每一步都修掉了上一步撞上的那一堵具体的墙。ROME 证明了 LLM 模型编辑是可能的。MEMIT 把它扩展到批量。GRACE 拒绝触碰权重,从而让它变成序列化的。WISE 承认记忆必须是双重的。AlphaEdit 让编辑在几何上安全。UnKE 把目标从三元组挪到非结构化文本。我自己的工作在这条链的末端:非结构化编辑、序列化,以及问题的查询侧。

精读

三篇我反复回来读的论文。

ROME:定位步骤比编辑本身更关键

ROME 的贡献常被概括为「对 MLP 的秩一更新」,但定位步骤才是真正的成果。因果追踪表明:当模型读到主语 token 时,一组特定的中层前馈计算对接下来出现的那个事实是决定性的。编辑几乎是个事后补丁:对这些权重的低秩修正,求解时让目标关系触发,而相邻关系保持不动。

它的优雅在于把「模型是个黑箱」转化为「这条事实是一小段可找到的电路」。正是这个框架让我认真对待领域早期的论文,尽管按今天的标准,那些模型看起来很小。问题从来不是你能不能给权重打补丁,而是「位置」这个故事能不能扛过规模扩大。MEMIT 说这个故事在批量下幸存;AlphaEdit 说它在反复扰动下幸存。我把两者都读作 ROME 的先定位后编辑赌注的延续。

ROME 还定下了领域的评测习惯,好坏参半。在反事实数据上的特异性和泛化成了标准坐标轴。缺失的恰恰是在 LLM 序列化模型编辑里最咬人的那个东西:编辑累积之后会发生什么,以及用户不按训练模板提问时会发生什么。2022 年,这两个问题都不在考虑之列。

GRACE:值在写入时被冻结

GRACE 是这份名单里我最敬重的设计。权重永远不变。每次编辑是适配器离散码本里的一对键值;推理时,输入被编码、匹配到最近的键,对应的值被拼接进模型的表示。流式错误变成定点修补。这个设计带来的后果就是要点:LLM 模型编辑变成检索问题,而检索可逆、可检查、与顺序无关。

我在 HoReN-paper-reproduction 仓库里复现了 GRACE,读代码改变了我对这个领域的看法。当值在写入时冻结,键就决定一切。键是主语和关系的编码;如果后来的查询没有落在那个键附近,这次编辑就形同不存在。GRACE 式系统的整个读取时行为就是路由:把查询送到正确的键,存好的值就完成自己的工作。

这是漂亮的属性,同时也是天花板。GRACE 把问题的路由侧优化得很用力,却把值当作固定成品。如果值本身就是薄弱点呢?如果查询到达了正确的键,存好的值却仍然无法以查询要求的形状说出这条事实呢?这个问题就是我论文的种子。

UnKE:目标转向非结构化文本

UnKE 是终于说出「皇帝基本没穿衣服」的那篇论文:领域的 benchmark 是结构化三元组,而结构化三元组让结构化的编辑方法占尽便宜。真实知识是段落、上下文、噪声和细微差别。UnKE 证明,为三元组打造的工——局部层键值存储和术语驱动的优化——在长篇知识上退化,并把两者重建:跨越非局部块的键(于是注意力层的知识也算数),以及保留周边上下文、直接编辑最终 token 的优化。

这为什么对我重要?因为「非结构化」就在我论文的标题里。现实中的 LLM 序列化模型编辑不是干净三元组的流;它是杂乱文档、修正和用户陈述的流。如果值只能以三元组形状写入,编辑就只能以三元组形状被检索,模型就只能困在「以没人用的格式被问及真实知识」里。UnKE 移动了领域的目标;我的工作在这个目标之上,移动了对灵活性的评测。

为什么改写是那堵墙

整个领域都把改写存活当作路由问题处理。WISE 把查询路由到正确的记忆。GRACE 查找码本键。基于检索的编辑器把改写后的查询匹配到某次编辑的存储表示。共同假设是:把查询送到正确的编辑,编辑就完成它的工作。

我们的发现是:路由只占一半。即使检索完美、每次都找到正确的编辑,在一种措辞上训练出来的值,常常无法在另一种措辞下产出存储的段落。查询到达了正确的键,答案却仍然出不来。失败不是「找不到事实」,而是「找到了却还是表达不出来」。

想想这在机制上意味着什么。适配器学到的是:当输入看起来像训练提示词时产出段落。改写激活的是不同的输入分布,而只见过一种形状的适配器,没有动力去泛化到它。你可以路由得完美无缺仍然失败,因为瓶颈从索引移到了值上。

论文:One Edit, Many Queries

用大白话讲这个问题

LLM 知识编辑在不重训练的情况下,把一条新事实写进已训练好的模型。我们做的是困难版本:LLM 序列化模型编辑,随时间写入几百条事实,全部保持有效。

领域的长期缺陷:已编辑的事实只有用原始措辞提问时才能找回。改写它,或者只问其中一个细节,模型就装傻:这是死记硬背,不是学习。

我们的诊断:失败不是「找不到事实」,而是「找到了却还是表达不出来」。我们的修复:模型围绕每条新事实写出自己的测验问题,并用它们让知识变灵活。在 500 次 LLM 序列化模型编辑之后,改写后的问题和分解后的问题被回答得明显更好,对其他能力没有可测量的损伤。

它是怎么工作的

论文是 One Edit, Many Queries: Self-Generated Query Distributions for Unstructured Model Editing。我是第一作者,它是一篇在审的预印本。我刻意不点名 venue。

方法分三步:

edit arrives
    |
    v
frozen model writes its own questions about the fact
    |
    +----> questions build the retrieval key
    |          (a distribution of phrasings rather than one prompt)
    |
    +----> questions train the per-edit adaptor
              (the value learns to answer under many shapes)

第一,一个冻结模型从这次编辑出发生成自己的问题。没有 benchmark 改写句,没有子问题,不从测试分布里取任何东西。模型必须想象自己会被怎么问。第二,这些问题构建检索键,于是后来的改写查询有一个措辞分布可以匹配,而不是单个提示词。第三,同样的问题训练逐编辑适配器,于是存储的值本身学会在多种形状下产出段落。

为什么这胜过只做路由:适配器在它实际将面对的查询分布上训练,而不是寄希望于某个固定表示能迁移。检索侧和生成侧被同一批自生成问题耦合在一起。模型在写入时,只凭自己对「可能被怎么问」的想象,把自己编辑进灵活之中。

我们测了什么

在一个留出的问题池上,改写 ROUGE-L 比匹配对照组提高 0.208,子问题 ROUGE-L 提高 0.176:相同的检索与适配器机制,只是去掉了自生成查询分布。而 MMLU 没有可测量的变化——这是要紧的局部性检查:几百次编辑,通用能力纹丝不动。

那句话里的两个选择值得辩护。第一,指标。编辑目标是非结构化的,所以存储的值是一段文字;没有唯一的正确字符串可供匹配。对模板做精确匹配准确率,无法告诉你段落能否扛过新的问题形状;对金标准段落做 ROUGE-L 可以,因为它衡量的是实质有没有出来,无论表面长什么样。第二,池。它是留出的,因为方法在写入时自生成问题,编辑过程中从不使用任何 benchmark 改写句或子问题。在编辑器从未见过的问题上评分,这是主张本身,不是细节。对照组让差值可归因:相同的检索机制、相同的逐编辑适配器,唯一缺的是自生成查询分布,所以提升不能记在管道头上。

数字没有结果的形状重要。我们没有造一个更大的路由。我们改变了值被训练去做的事,收益恰好出现在领域失败模式所在之处:编辑器在写入时从未见过的问题。

论文下一步指向哪里

这个领域以路由为中心的观点已经触及收益递减。WISE、GRACE 和它们的后继者把路由做得足够强,它不再是约束瓶颈。约束瓶颈是值:一段无法在新形状下被产出的存储段落。

具体的下一步构建是 GRACE 式码本,其中的值是用自生成查询分布训练的适配器。离散、可逆、与顺序无关:这些是让 GRACE 有吸引力的生命周期属性,外加我论文新增的灵活性属性。每次编辑都从一个自生成问题分布写出自己的键,并写出在该分布上训练出来的自己的值。检索保持快速,编辑保持可逆,改写这堵墙不再是墙。

评测 harness 同样重要。模板精确匹配准确率不该再是默认的头条指标。扛不住改写的序列化编辑器就没有在做好本职工作,所以改写存活和子问题存活应当是一等坐标轴,随编辑次数追踪。这就是我希望下一代方法被评分的测试。

我接下来会攻的开放问题:围绕单次编辑的分解后问题和多跳问题;对观点和风格而非事实的编辑;在远超当前任何 benchmark 所压测的极长周期上的衰减;以及直接度量灵活性:一次编辑能扛过多少种不同的问题形状,而不是报告准确率差值。

这篇日志的位置

这篇日志是 权重 vs 上下文 的模型侧互补:那篇问一条事实应该住在哪里,这篇问一旦你把事实写进权重,它如何存活。带完整地图的支柱总览是 基础模型:一张领域地图

如果你想要应用层:我在 Engram:把用户信念写进模型权重 里写过的个人记忆原型,是同一条工作线指向单个用户的持久信念。GRACE 的键值适配器思想、UnKE 的非结构化目标、这篇论文的查询灵活性修复,是我在那里反复取用的三样原料。

LLM 序列化模型编辑是这个问题的落地版本。上面的领域地图是过去四年买来的成果,而查询问题是我认为接下来四年要面对的那堵墙。

本文链接的来源均已抓取并核实。