DeepSeek Engram实验:关掉记忆区,事实问答100%跌至61%?
2026年初,DeepSeek团队发表了一篇关于Engram架构的论文,里面有一组数字让人有点坐不住。他们做了个实验,把模型里负责"条件记忆"的那部分功能临时关掉,结果模型回答事实性问题的能力直接从100%掉到了61%左右,但面对需要理解上下文、做推理的任务,表现几乎没受影响,还能维持在72%上下。这个落差说明了一件事
2026年初,
DeepSeek团队发表了一篇关于Engram架构的论文,其中一组数字颇让人意外。他们做了个实验:临时关掉模型里负责“条件记忆”的那部分功能,模型回答事实性问题的能力随即从100%跌到61%左右;可一旦换成需要理解上下文、做推理的任务,表现却几乎没受牵连,仍能维持在72%上下。
这个落差说明了一件事:新架构里似乎真有一块专门管“记事儿”的区域,跟负责“想事儿”的区域是分开的。
乍看之下这算不得惊天动地,但往深里想,一扇一直紧闭的门或许就此打开了。
大语言模型有个众所周知的毛病:它记住的世界,停留在训练数据截止的那一刻。某家企业的CEO换了人,某条新闻有了后续进展,模型统统不知道,还会一本正经地给你过时的信息。想让它“学会”新知识,过去基本只有两条路——要么把整个模型重新训练一遍,代价高到大部分团队承受不起;要么做“知识编辑”,直接在模型参数里动手术,改掉某个具体的事实关联。
可知识编辑这件事,真做起来远没有听上去那么干脆。
记忆分散在四面八方,怎么一次改干净
传统的Transformer模型,参数高度纠缠在一起。你想把“某人的雇主从A公司变成B公司”这一个事实改掉,很可能一不小心就影响到模型对其他完全不相关问题的回答,因为这个知识点和许多别的知识点共享着同一组参数。好比你想把家里电路图纸上的一盏灯重新接线,结果发现这根线路跟厨房的插座、卧室的空调绞在了一起,稍有不慎就全楼跳闸。
Engram这类条件记忆架构的出现,给这个老问题提供了一个新思路。
模型在算每个词时,会先回看它前面的若干个词,拼成一个“n-gram”,也就是连续n个词组成的片段,再拿这个片段到一张体量很大的“查找表”里查出对应的向量表示,并把它并入当前的计算。打个比方,模型像随身揣了个小本子,碰到“某人的雇主”这种字眼,就翻到那一页,把上面记的内容取出来用。
最初设计这套机制,图的是“扩容”。MoE(混合专家模型)的做法是让每个词只激活一部分专家网络,以此省下算力;条件记忆则另走一路:专家数量不动,添的是一张能按需翻查的记忆表,于是模型的计算量基本不涨,却能装进更多参数、记住更多细节。DeepSeek-V4.1-Flash、Qwen3.8-Flash-Next等模型,都采用了相近的设计。
不过EngramEdit这篇论文的作者们盯上了另一件更有意思的事:假如事实知识大体存放在这张查找表里,通用推理能力大体存放在Transformer主干网络中,那是不是只要动查找表、不碰主干网络,知识更新就能完成?
这个想法听着很美好,真做起来却会撞上三堵墙。
三个麻烦:说法不同、牵一发动全身、改了不该改的
第一堵墙是泛化问题。
同一个事实,说法可以有很多种。“Alex的雇主是谁”和“谁雇用了Alex”讲的是同一件事,可两句里“Alex”前头挨着的词并不相同,被激活的n-gram当然也不同。你只把“雇主”这一种说法对应的记忆条目改了,人家换个问法,模型立马“失忆”,又退回旧答案。
第二堵墙是效率问题。
不同的编辑请求,有时会落到同一个n-gram上。拿“of Alex”这个片段来说,“Alex的雇主”和“Alex的住址”这两条编辑请求里都可能出现它。要是各条编辑各干各的、彼此不通气,改出来的结果就很容易相互冲突:一条编辑成了,另一条却因为共用的记忆条目被覆盖而失败。
第三堵墙是特异性问题。
n-gram越短、越常见,被激活的次数就越多,牵扯进来的无关查询也跟着变多。改一个只有两三个词长的片段,看着是省事,可实际上,成千上万个跟这次编辑毫无关系的问题,答案都可能被波及。
这三个问题凑到一块儿,指向的其实是同一个矛盾:记忆查找按“词语片段”来组织,人想编辑的却是“事实”。片段和事实并非一一对应——一个事实可能拆散在好多片段里,一个片段也可能被好多事实共用。
EngramEdit要解决的,正是这个错位。
先算出“应该记成什么样”,再分配着去改
把EngramEdit的整体思路拆开,无非三步:先弄明白模型该“记住什么”,再弄清这些记忆分别落在哪些n-gram上,最后统一算一笔账,把改动合理地分摊下去。
第一步,目标记忆的计算。
一条编辑请求进来,比如要把「Alex的雇主」从「实验室M」改成「实验室N」,EngramEdit 先请模型自己把这句话换个几种说法,像「雇用Alex的机构」「Alex所在的实验室」这类。原句加上这些生成出来的版本,凑成一组表达方式。这套做法借的是知识编辑里「locate-then-edit」那一路方法的核心思路。
locate-then-edit 说的是一种知识编辑范式:先找出模型内部跟某个事实有关的计算环节,推算出这个环节得「输出什么」才能让模型给出新答案,再倒推参数要怎么调,才能让该环节真的吐出那个目标值。ROME 和 MEMIT 是这类方法里比较有代表性的工作。
落到操作上,就是在每种表达方式对应的记忆表示上临时挂一个可学习的扰动项,然后只优化这个扰动,目标是加上它之后模型能预测出新答案「实验室N」。扰动由所有表达方式共用,优化出来的结果便是一个能同时满足各种说法的「目标记忆」。这个扰动只是算目标值的工具,算完就丢,不会真写进模型里。
这里有个细节值得多说一句:为什么要用生成出来的多种表达方式,而不是只盯着原始的编辑提示?想象你在教一个助理记住「张总的新职位是副总裁」这件事。只告诉他这一句,下次有人问「张总现在是什么级别」,助理可能完全反应不过来,因为他只认识你教的那个固定说法。可你要是换着花样说上好几遍,「张总升了」「张总现在是副总裁了」「张总的新title是副总裁」,助理大概率能在各种问法下都答对,因为他记住的不是一句话,而是这件事本身在不同语境下的样子。省掉这一步、直接只用原始编辑提示去优化,论文里的消融实验显示,CounterFact 数据集上的「泛化」得分会从97.0掉到81.5,足足掉了15个百分点。这一步不是锦上添花,是真正撑起泛化能力的关键一环。
第二步,多表达方式的记忆映射。目标记忆算出来之后,还得知道它该体现在哪些具体的 n-gram 条目上。EngramEdit 会扫描每一种表达方式在「主语最后一个词」这个位置,把这个位置能查到的所有 n-gram 都记下来(论文里用的是长度2、3、4的组合),构成一个「映射矩阵」。这个矩阵的作用,说白了就是记清楚「哪句话用到了哪个记忆条目」;如果好几句话、好几条编辑请求都用到同一个条目,矩阵里就会体现出来。
第三步才是重头戏:联合更新分配,对那些经常被「借用」的记忆条目尤其要留神。前面提到的第二堵墙和第三堵墙,卡的就是这一关。做法不难理解——把共享同一个 n-gram 的所有表达方式、所有编辑请求拢到一块儿,统一解一个优化问题。目标是让每个记忆条目的更新量既尽量照顾到所有相关方的要求,又得在幅度上收着点,收多紧,取决于这个条目被「借用」的可能有多大。
一个条目被无关输入「借用」的概率,论文用两个指标来估:n-gram 有多长,以及它在语料库里出现得多频繁。条目越短、越常见,罚得就越狠,能改的幅度也越小;反过来,越长、越冷门,可施展的空间就越大。
这套思路搬到日常生活里,挺像图书馆管理员改参考书。要动的是某本小众专业手册里一个没人翻的冷僻条目,别的读者基本查不到这一页,管理员大可以整段重写,不必手软。可要是换成通用词典里「的」「是」「在」这种高频词条,改一个字都可能波及成千上万本正拿它当参考的其他书。所以老练的管理员不会一视同仁地下笔,高频词条轻描淡写,冷僻词条才放开手脚。这层区分一旦省掉,统一按同样力度去改,结果就是论文消融实验里那个样子:拿掉「按复用程度加权」的正则化之后,CounterFact 上的特异性得分从85.2掉到84.6,ZsRE 上的效力得分从97.3掉到96.0。跌幅看着不大,可背后是无关查询被悄悄污染的真金白银。论文的分析还指出,新增错误里超过92%都跟被更新过的记忆条目的激活有关——「借用越多惩罚越重」这条规则,确实是在实打实地堵漏,不是摆样子。
数学上,这个联合求解存在闭式解。论文从几个角度论证了它靠得住:它给出的方案在满足约束的前提下更新代价最小,也就是不会做多余的、没必要的改动;优化过程中目标值难免有点小波动,只要正则化系数设得合理,最终解出的更新量就不会被这点波动带跑偏;另外,如果不同编辑请求之间根本没有共享任何记忆条目,整个大问题就能拆成几个互不相干的小问题分别求解,结果跟合在一起算一模一样,这对工程上控制计算量很有好处。
实验结果:改得准,记得牢,不殃及无辜。研究团队在三个主流知识编辑基准上做了测试。
CounterFact 是个专测「反事实」知识编辑的数据集,里面那些编辑请求,通常是把一个真实事实换成虚构的新事实,比如把某人的母语从法语改成英语,看模型是不是真能接受这种改动。ZsRE 则把知识组织成问答对,每条编辑请求对应一个问题和一个目标答案,更像真实场景里信息更新的样子。
在这两个数据集上,EngramEdit 在经历2000次连续编辑之后,CounterFact 上的效力达到99.5%,泛化达到97.0%,特异性保持在85.2%;ZsRE 上效力97.3%,泛化93.7%。和表现最接近的几个基线方法相比,EngramEdit 在「泛化」这个维度上的优势尤其明显,这正好对应前面说的,它靠多表达方式和联合更新解决了「换个说法就失忆」的问题。
| 方法 | CounterFact效力 | CounterFact泛化 | CounterFact特异性 | ZsRE效力 | ZsRE泛化 |
|---|---|---|---|---|---|
| FT | 94.9 | 63.6 | 43.8 | 76.7 | 76.8 || UnKE | 84.5 | 58.0 | 47.5 | 86.9 | 79.0 || MoEEdit | 99.1 | 67.1 | 63.5 | 85.1 | 78.7 || MFT-S | 99.0 | 59.1 | **85.2** | 66.9 | 56.5 || EngramEdit | **99.5** | **97.0** | 85.2 | **97.3** | **93.7** |
在MQuAKE这个多跳推理数据集上,表现更有看头。
所谓多跳推理,就是一个问题得串起好几条事实才答得出来。拿“某足球运动员所属国家的国家元首是谁”举例,得先查到这名球员的国籍,再查这个国家眼下由谁掌权,两次事实查询之后才能落到最终答案。
标准提示下,EngramEdit跟表现最好的基线FT咬得很紧。可换成思维链提示——先让模型一步步写出推理过程再给结论——情况就变了:EngramEdit的准确率冲到25.2%,排第二的FT只有5.7%,差了接近3倍。论文对此的解释是,思维链的中间步骤本身就会把相关事实摆到明面上,正好激活那些已经更新过的记忆条目,修正后的信息便沿着推理链条一级级传下去。这也说明条件记忆确实在参与实际推理,并非摆设。
还有两个实验,把这个结论钉得更牢。
头一个是干预实验:在编辑完的模型上,人为切断某条事实对应的记忆更新,其余一概不动。结果,原本答得对的提示有89.4%直接翻车,模型又倒回旧答案。反过来,如果关掉的是数量相同、长度匹配、却跟当前事实无关的更新,成功率几乎没变化。可见模型靠的就是这些特定记忆更新在干活,不是碰巧。
另一个是长期稳定性测试。编辑条数一路加到5000条,EngramEdit的效力和泛化优势依然在,而且在五个常见能力测试任务上,连续编辑5000次后整体表现仍保留了原来96%以上的水平。唯一明显掉下来的是MRPC任务(判断两句话意思是否相同),论文推测,判断句子等价性这件事本身就对局部词语表示的细微变动比较敏感。
不过,EngramEdit也有没彻底解决的地方。
论文自己的分析发现,约8.66%的编辑请求会跟其他编辑共用某些被更新的记忆条目,而在编辑失败的案例中,97.96%都出自这个“有共享”的小群体。说白了,多数编辑能顺利过关,是因为各自占着互不干扰的记忆空间;一旦两条编辑请求真的撞上、抢同一批记忆条目,失败率就明显抬头。这与其说是方法的缺陷,不如看作条件记忆架构自身的物理限制——记忆空间有限,n-gram的组合数量终归有上限,编辑请求越多,相撞的概率也越大。
写在后面
读完论文,我觉得最有意思的不是它解题有多巧,而是它暴露出的一个架构特性:原本只为省算力而设的查找表机制,意外成了能做局部手术的接口。好比某个工程团队本来只想给大楼装一套节能照明,结果发现这套系统自带独立开关回路,不碰主体电路就能单独修某一盏灯。设计初衷和实际用途之间的错位,有时比精心设计的功能更耐人寻味。
另一个让我反复琢磨的细节,是论文里那组“关掉记忆后性能断崖式下跌”的对照实验。事实知识从100%掉到61%,其他任务的能力却几乎不受影响,这其实在暗示一件更大的事:这类架构正把“知道什么”和“会不会想”这两种能力,从物理上掰开。放到更长的时间线上看,如果这个方向继续走,会不会有一天,我们更新AI的知识像今天更新手机系统词库一样随意,而它的“思维方式”几乎不用动?这个问题论文没有回答,但它把问题摆到了桌面上。
Q&A
Q1:EngramEdit是干什么用的?
A:EngramEdit是一种面向条件记忆架构大语言模型的知识编辑方法。它只更新模型里存事实的n-gram记忆条目,不动负责通用推理的Transformer主干网络,从而做到独立、精准地更新事实知识。
Q2:它和传统知识编辑方法差在哪?
A:传统方法一般要改模型主干网络的参数,容易牵连无关知识。EngramEdit靠条件记忆架构把事实存储和通用计算分开,只改查找表里的记忆条目,再通过联合优化和按复用频率加权的正则化,兼顾编辑效果与对无关知识的保护。
Q3:编辑后的知识能用于多步推理吗?
A:能。在MQuAKE多跳推理测试中,配合思维链提示,EngramEdit准确率达到25.2%,接近第二名基线方法的3倍,说明更新后的记忆条目能在推理链条的中间步骤被正确激活和使用。