FactorEngram:给语言模型装一本能"按需翻页"的记忆词典

你有没有想过,为什么ChatGPT这类大模型知道"埃菲尔铁塔"在巴黎、"珠穆朗玛峰"是世界最高峰,但它每次说到这些词的时候,都要重新在脑子里"推理"一遍?

这听起来有点荒谬。人类记东西不是这样工作的。你知道"埃菲尔铁塔"在巴黎,这是一个直接调取的事实,不需要每次都从头推导。但标准的Transformer

Transformer:目前主流大语言模型的基础架构,通过层层堆叠的注意力计算处理文本

架构恰恰是这么干的:任何一个词组,无论多么常见、多么固定,都要经过一层一层的神经网络计算,才能重新"拼出"它的含义。这就好比一个学生每次做加法题都要从数手指开始,即便"2+2=4"这种事早就该刻进脑子里了。

正是这个观察,催生了"查表式记忆"这个研究方向。

**查表式记忆的核心想法是:把那些固定搭配、常见词组直接存进一张表里,用的时候直接查,不用每次重新计算。**

这个思路听起来简单,但做起来学问不小。今天要讲的这篇论文,就是在这个方向上做了一次相当精细的改造,论文提出的方法叫FactorEngram。

查表记忆,现在到底做到哪一步了

在FactorEngram之前,业内已经有几个代表性的做法。

其中最值得一提的是Engram,它已经被用到了DeepSeek-V4.1-Flash这样的大模型里,说明这个思路已经不是纸上谈兵,而是被验证能在真实大模型里跑起来的技术。Engram的做法是:把每个二元词组(比如"the bank")或三元词组映射到一个哈希表的位置,取出对应的向量,再用一个"总闸门"(一个标量数值)决定这段记忆要不要参与到当前的计算中。

这里就出现了一个问题,也是这篇论文要解决的核心矛盾。

**Engram把每一条记忆当成一个不可拆分的整体,一个"闸门"要么开、要么关,没法只开一半。**

举个具体的例子。"the bank"这个词组,在不同句子里意思完全不同:可以是"银行",也可以是"河岸"。这两个意思背后应该对应记忆里不同的语义成分。但Engram存储"the bank"的方式,是把它整个塞进一个哈希槽里,取出来是一个完整的向量,闸门只能整体放大或缩小这个向量,不能说"这部分和金融相关的信息留着,那部分和地理相关的信息压下去"。

这就好比你去图书馆借一本百科全书,但图书馆规定你只能整本借走,不能只借其中关于"河流"的那几页。如果你今天要查的是"银行利率",你却拿到了一整本包含"河岸地形"内容的书,你没法把不需要的部分单独退回去。这不是借书系统笨,而是它压根没有"按章节单独调取"这个功能。

第二个问题更隐蔽,跟"哈希碰撞"

哈希碰撞:不同的输入经过哈希函数计算后,被映射到了同一个存储位置的现象

有关。由于n-gram的组合空间太大,不可能给每个词组单独开一个存储位

n-gram:指连续N个词或字符组成的序列,比如"the bank"是一个二元组(2-gram)

置,所以只能靠哈希函数把不同的词组压缩映射到有限的表格位置上。问题是,哈希函数只关心数学上的散列均匀性,完全不管语义。这意味着"the bank"和某个完全不相关的词组,可能因为哈希碰撞被分到同一个存储槽,而"the bank"和语义相近的"a riverbank",却可能因为哈希函数的随机性被分到完全不同的槽位,彼此毫无关联。

**换句话说,参数共享完全靠运气,而不是靠语义相似性。**

这就像给全班同学分宿舍,本该让性格相近、爱好类似的人住一起,方便互相照应,结果学校用的是学号尾数分配,性格再像的人也可能被分到天南地北的宿舍,而完全不熟的人反倒因为学号撞在一起,被迫共享一个房间。这种"共享"没有任何意义,纯属巧合。

FactorEngram的解法:拆开来存,按需取

面对这两个问题,FactorEngram给出的方案是把"整体记忆"拆解成"系数加词典"的组合形式。

具体来说,模型维护一个共享的字典

字典:论文中指一组共享的基础向量集合,所有词组的记忆都通过这些基础向量的加权组合来表示

,里面存的是一批基础向量。每个n-gram不再直接存一整个记忆向量,而是存一组系数,这组系数告诉你,要把字典里的哪些基础向量按什么比例组合起来,才能拼出这个词组该有的记忆内容。

这个设计的好处在哪?

不同的词组现在可以共用同一套基础向量,只是组合系数不同。这就好比调色。画家不需要给每一种可能出现的颜色单独调一罐颜料存起来,他只需要红黄蓝白黑几种基础颜料,然后按不同比例混合,就能调出成千上万种颜色。橙色和粉红色可能都用到了"红"这个基础颜料,只是比例不同,它们之间因此天然产生了关联,这种关联是通过共享基础颜料自然产生的,而不是靠随机分配画布位置产生的。

如果不这样做会怎样?就还是Engram那种每个词组单独一份记忆的老路子,语义相近的词组之间没有任何结构化的联系渠道,只能各自为战。

论文还加了一个额外的约束,叫稀疏正则化

稀疏正则化:通过在损失函数中加入惩罚项,鼓励模型只用少量的基础向量组合出每个词组的记忆,而不是把所有基础向量都用上一点

。简单说,就是逼着每个词组只依赖少数几个基础向量,而不是把字典里所有向量都掺一点。这个思路借鉴了神经科学里的稀疏编码理论,这个理论最早是用来解释视觉皮层如何用少量"基础特征"组合出丰富的视觉感知的。

用同一把尺子既做门闸也做拼图

拆解记忆只是第一步,更关键的设计是"基于基础向量的门控"。

前面说了,Engram的问题是闸门只能整体开关。FactorEngram的解法是:字典里每一个基础向量,都单独配一个属于它自己的闸门。

具体的做法是,模型把当前上下文的隐藏状态

隐藏状态:神经网络在处理文本过程中,每一层计算出来的中间表示向量,压缩了到目前为止的上下文信息

投影成一个查询向量,然后拿这个查询向量分别去跟字典里每一个基础向量做点积打分,算出一个介于0到1之间的门控值。这个门控值决定了,在当前这个具体的上下文里,这个基础向量对应的语义成分,应该被放大多少还是压低多少。

**关键的巧妙之处在于,做门控打分用的字典,和用来重构记忆内容的字典,是同一套向量。**

这意味着,判断"这个语义成分跟当前上下文相关吗"的标尺,跟实际拼装记忆内容的积木,是完全一致的。回到之前"the bank"的例子,如果字典里存在一个跟"金融"相关的基础向量和一个跟"地理"相关的基础向量,当上下文是"存钱"的时候,跟金融相关的基础向量对应的门控值会被打高,跟地理相关的会被压低,这样重构出来的记忆内容自然就偏向了"银行"这个含义,而不是被迫囫囵吞枣接受整段记忆。

这就好比一个自助餐厅,每个菜品前面都有独立的取餐按钮,而不是只有一个总闸门决定这一整盘菜端不端上来。你今天想吃辣的少油的,可以把辣椒酱那格多按一点、油炸食品那格少按一点,每一份配菜都能单独调节份量,而不是要么整盘端上桌要么整盘不要。如果只有一个总闸门,你想微调口味的空间就完全没有了。

覆盖面也要补齐:单词也要记

除了拆解和门控,论文还指出了一个此前研究里常被忽略的细节:**不同的记忆模块,覆盖的词组长度不一样,但很少有模块同时覆盖单个词和多词组合。**

STEM这个模型只记单个词,Engram只记二元组和三元组,谁也没把两者都占了。FactorEngram的做法是索性都要,单词、二元组、三元组,三种粒度的记忆同时retrieve,然后拼接在一起。

实验证明这个补齐是有意义的。论文的消融实验

消融实验:通过去掉模型的某个组件,观察性能变化,来验证该组件是否真的有用的实验方法

显示,去掉单词级别的记忆之后,模型在长文本检索任务上的表现明显下滑,尤其是较难的检索场景,准确率从58.3%掉到23.0%,掉了35个百分点。这说明单词级的记忆和多词组合的记忆,各自扮演着不同的角色,互相无法替代。

记忆该塞在Transformer的哪个位置

除了记忆本身的设计,论文还花了不少篇幅研究一个容易被忽视的工程问题:这个记忆模块,到底该插在Transformer的哪一层、哪个位置?

论文做了系统的扫描实验。先是单独测试把记忆模块放在24层Transformer的每一层,发现从最浅层挪到中间层,整体表现是逐步提升的,尤其是长文本检索任务提升明显。最终发现放在第12层是个不错的平衡点。接着固定第12层,再扫一遍第二个插入点该放哪,最后确定第10层和12层同时插入效果最好。

在层内的具体位置上,论文比较了三种方案:插在注意力模块之前、插在前馈网络之前、插在前馈网络内部(替换SwiGLU

SwiGLU:一种前馈网络中常用的激活函数结构,STEM模型直接替换了它的输出

结构的上投影输出,这是STEM采用的做法)。结果显示,插在注意力模块之前效果最好,各项指标全面领先。插在前馈网络内部的效果最差,这提示直接改造前馈网络内部结构可能会干扰原有的计算路径,不如作为一个独立的旁支叠加在残差流上更稳妥。

这个发现本身也挺有意思。它说明记忆模块不是随便加个"外挂"就能生效的,插入的位置本身就是一个需要仔细调试的超参数,跟你在一栋房子哪个位置装监控摄像头一样,装在门口和装在储物间效果肯定不一样,装错了地方,再好的摄像头也拍不到关键画面。

实验结果说话

论文在340M参数和1B参数两个规模的Transformer骨干网络上做了完整实验,训练数据分别是30B和120B token,来自FineWeb-Edu

FineWeb-Edu:一个专门筛选出高质量教育类文本的大规模训练数据集

数据集。

在340M规模下,FactorEngram相比纯Transformer,WikiText

WikiText:一个常用的语言模型评测数据集,通常用困惑度衡量模型表现,数值越低越好

困惑度从23.19降到21.29,LAMBADA

LAMBADA:一个考察模型利用上下文预测下一个词能力的评测数据集

困惑度从24.90降到21.69,下游任务平均准确率提升了1.76个百分点。跟Engram相比,FactorEngram在所有指标上都占优,尤其是在长文本检索任务NIAH

NIAH:Needle in a Haystack,一种测试模型能否在长文本中准确找到并利用某个关键信息的评测方法

上,NIAH-2和NIAH-3两项分别领先41.5和43.3个百分点,这个差距相当悬殊。

在1B规模下,FactorEngram整体保持优势,WikiText困惑度和Transformer持平,LAMBADA困惑度还略有改善,长文本检索上依然稳定超越Engram,领先幅度在9.3到27.6个百分点之间。

下面这张表格是340M规模下的核心对比:

| 模型 | WikiText困惑度↓ | LAMBADA困惑度↓ | 平均准确率↑ | NIAH-1↑ | NIAH-2↑ | NIAH-3↑ |

|---|---|---|---|---|---|---|

| Transformer | 23.19 | 24.90 | 48.10 | 44.2 | 47.7 | 22.1 |

| Engram | 22.29 | 23.94 | 49.06 | 69.8 | 37.6 | 15.0 |

| FactorEngram | **21.29** | **21.69** | **49.82** | **70.6** | **79.1** | **58.3** |

消融实验也进一步验证了每个设计要素的必要性。如果把基础向量级别的门控换成Engram式的整体标量门控,下游平均准确率从49.82掉到48.15,最难的NIAH-3任务准确率直接从58.3暴跌到9.4,几乎失效。这个数字差距非常直观地说明,"能不能按需调取记忆的一部分"这件事,在长文本检索这种需要精确定位信息的任务上,几乎是决定性的。

稀疏正则化的强度也不能乱调。论文测试了0、1e-4、1e-3、1e-2四档,发现1e-3是最佳的甜点位置。调到1e-2反而让所有指标都比不加正则化还差,说明过度强迫稀疏会伤害模型表达能力,这跟"过犹不及"是同一个道理,逼得太紧,该保留的信息也被挤没了。

这条路上还有谁在探索

FactorEngram不是孤军奋战。类似的查表记忆思路,还有几个平行的探索方向。

Gemma 3n的PLE

PLE:Per-Layer Embeddings,谷歌Gemma 3n模型中用于记忆单个词元的模块

只记单词,门控是直接从隐藏状态算出来的,不涉及跟记忆内容的相似度比较。LongCat-Flash-Lite则把n-gram记忆主要用在输入嵌入层的增强上。

在Engram的直接后续工作里,也有几篇论文值得一提。TN-gram提出了类似的因子化思路,通过共享的词元位置因子来构造n-gram表示,但它没有覆盖单词级记忆,门控仍然是标量式的。Lngram换了个思路,从隐藏状态里学习离散的键,而不是直接用输入词元。这两篇工作分别在2026年发表,说明整个领域几乎是同时朝着"打破整体记忆单元"这个方向摸索,FactorEngram算是把因子化表示、精细门控、稀疏编码这三件事同时做到位的一个版本。

写在后面

读完这篇论文,最触动我的其实不是技术细节本身,而是它揪出的那个"参数共享靠哈希碰撞"的问题。这个问题在此之前几乎没人明确指出过,大家都在讨论怎么让记忆模块更大、覆盖更多词组,却很少有人质疑:这些参数之间的关联,到底是不是有意义的关联?

这让我想起一个更普遍的现象。很多系统设计里,"共享"这个词经常被滥用。表面上两个东西共享了同一份资源,听起来很高效,但如果共享的方式跟这两个东西真正的内在联系毫无关系,这种共享本质上只是一种巧合式的资源复用,而不是真正的结构化知识迁移。FactorEngram提醒我们,共享的前提得是共享的东西真的有共同之处,不然共享本身就是一句空话。

论文里还有一个细节让我印象深刻,就是稀疏正则化强度的那组实验。不加正则化的模型已经比Transformer强了,加了适当强度的正则化后又更强了一截,但强度稍微调大一点,效果立刻反超到还不如不加。这种"甜点区间"极其狭窄的现象,某种程度上也提醒我们,很多看似简单的超参数调节,背后可能藏着模型内部机制的剧烈变化,不是越多越好,也不是越少越好,而是存在一个需要精细摸索的平衡点。

论文自己也承认了一个局限:目前只在340M和1B参数规模上做了验证,更大规模的模型上这套方法是否依然有效,还是个开放问题。查表记忆这条路,能不能一直扛到千亿参数的模型上,还得等后续工作来回答。

Q&A

Q1:FactorEngram和Engram最大的区别是什么?

A:Engram把每个记忆条目当成不可拆分的整体,用一个标量闸门整体开关。FactorEngram把记忆拆成系数加共享字典的组合形式,可以对字典里每个基础向量单独做门控,实现更精细的上下文调节。

Q2:FactorEngram在长文本检索任务上的表现怎么样?

A:提升非常明显。在340M参数规模下,FactorEngram在最难的NIAH-3检索任务上准确率达到58.3%,比Engram的15.0%高出43.3个百分点,是几种设计里差距最大的一项指标。

Q3:FactorEngram应该插在Transformer的哪个位置效果最好?

A:论文实验显示,插在注意力模块之前、放在网络中间层(比如第10层和第12层)效果最好,比插在前馈网络内部或前馈网络之前的效果都更稳定全面。

作者声明:作品含AI生成内容
举报/反馈
分享到: 微博 QQ 空间
对本文内容有合作意向?
我们将在 1 个工作日内与您联系
留言咨询