DeepSeek条件记忆Engram
- 英文名:Conditional Memory via Scalable Lookup: A New Axis of Sparsity for Large Language Models
- 中文名:基于可扩展查找的条件记忆:大语言模型稀疏性的新维度
- 发布日期:2026-01-12
- 论文地址:https://arxiv.org/abs/2601.07372,正文约20页,核心在第3-6页
- 相关代码:https://github.com/deepseek-ai/Engram
- 机构:北京大学,DeepSeek-AI
1 读后感
这篇论文的主要突破在于实现了知识与推理的深度解耦。
传统的 LLM 将知识隐式、散乱地存储在网络参数中,而 Engram 构建了一个相对显式的、结构化的“N-gram 记忆表”(有点像知识库)。这改变了语义存储的本质:从 Embedding 空间的“模糊分布”转向了类似知识图谱的“精确索引”。这种设计极大地增强了模型的可解释性,并为未来的局部知识更新(不重训模型而修正错误)提供了理论路径。
值得注意的是,这个记忆表并非人工引入的外部数据,而是通过与 LLM 协同训练得到的。它在训练中吸收知识,在推理中作为静态的“外部知识库”供模型调用,兼具了检索增强和原生模型的响应速度。
2 摘要
目标:解决 Transformer 缺乏高效知识检索原语的问题,使模型在稀疏计算下既能处理复杂推理又能高效存储知识。
方法:提出Engram模块,通过现代哈希技术实现基于N-gram的O(1)快速知识查找,并系统性地探索和利用计算(MoE)与静态记忆(Engram)之间的最优U型分配定律。
效果:在总参数和计算量不变的情况下,显著提升模型在知识、推理及代码数学等综合任务上的性能,并因其确定性寻址特性实现了系统级的高效部署,为下一代稀疏模型奠定了基础。
3 架构

3.1 概述
Engram 是一个条件内存模块,旨在通过结构上将静态模式存储与动态计算分离,增强 Transformer 骨干网。模块将每个位置 t 处理为两个功能阶段: 检索和融合 。 ### 3.2 2.2 通过哈希 N -gram 进行稀疏检索
第一阶段将本地上下文映射到静态内存条目,涉及分词器压缩和通过确定性哈希检索嵌入。 #### 3.2.1 分词器压缩
普通处理中为了无损还行,常把同义等分配到不同的ID上(例如 Apple 与 ␣apple),这里为了最大化语义密度,实现了一个词汇投射层X->X'。将原始令牌
ID 压缩为基于归一化文本等价的典范标识符,实现了
23%的有效词汇量减少。
3.2.2 多头哈希
以下不是论文直译,我试着用简单的语言解释一下:N-gram指的是把输入内容拆成连续的N元组,比如:1234,2-gram拆成:12, 23, 34;3-gram拆成:123, 234。再用拆分后的条目分别查表。
这里“哈希”的作用是把一个任意长度的“词条”(字符串),通过一个数学函数(哈希函数),快速转换成一个固定长度的数字(哈希值),直接定位到存储该词条对应信息的内存地址,而无需在海量数据中逐条比对。
此时可能产生哈希冲突:两个不同的N-gram可能被哈希到同一个内存地址。因为,使用了K种哈希编码方法,只要有一个函数没有冲突,就能找到它。这类似于用多个搜索引擎同时查一个词。
多个“头”(即多个并行的哈希查找路径)会各自找到一组候选的记忆条目。系统会将这些结果汇总、整合,最终形成一个与当前输入最相关的“条件记忆”向量,输送给模型的后续部分使用。
3.2.3 总结
模型内置了一个知识库,在模型训练时就已经固定下来,里面存储着大量的N-gram及其对应的知识向量。它会检索当前所遇到的词(如“苹果”)在世界知识中的常见关联信息。在这里,检索并不考虑句子内的具体语境,而是直接问:“在我的知识库中,‘苹果’这个词通常代表什么?”它的答案可能是手机,也可能是水果。
例如:当前处理的文本是“我要吃苹果”。在使用多头2-gram、3-gram后,可以分别提取出包含“苹果”和“吃苹果”这些意义的向量表示,并将它们串联起来,从而更好地定位本句中“苹果”的具体含义。这相当于从内部知识库中注入常识信息,我们可以暂时称之为e。这个过程能够快速从海量知识库中召回可能相关的信息(e_t)。但需要注意的是,这些信息可能是粗粒度的、多义的,甚至可能包含噪声。
3.3 2.3 上下文感知门
上下文感知门包含两部分:门控和卷积。
3.3.1 门控
门控的核心逻辑是:让上下文来决定,是否采纳以及采纳多少检索到的“知识”。它的设计参考了注意力机制中的QKV模式:
- 利用上一步检索出的静态知识向量
e_t,通过两个可学习的投影矩阵W_V和W_K,分别计算出v_t(要注入的知识内容)和k_t(用于匹配的“特征”)。

上下文在此介入:使用代表当前全局上下文的隐藏状态 h_t 作为动态的 Query。先对 h_t 和 k_t 进行RMSNorm标准化,再通过点积计算匹配度,最终经由Sigmoid函数输出一个0到1之间的标量门控值 α_t。

这个门控值 α_t 用于给 v_t 加权,得到与上下文对齐后的最终知识向量:\(𝐯̃_t = α_t ·
𝐯_t\)。其核心作用是让当前语境来决定采纳多少知识,从而解决多义性和过滤噪声。
3.3.2 卷积

对前面门控输出的知识序列 𝐯̃_t 做局部平滑与融合,并增加一点非线性。它不看未来信息(因果性)。具体操作是:用一个很小的窗口(论文中 kernel size=4)在 𝐯̃_t 序列上滑动,每次将窗口内的几个知识向量混合一下,生成一个更连贯的新向量。这让相邻位置注入的知识不再完全独立,而是在局部上更连贯,避免知识“碎片化”。相当于给知识序列做了个局部“柔化”处理。最后:卷积后的输出 Y 会通过一个残差连接(H(ℓ) ← H(ℓ) + Y)直接加回到主网络,完成知识注入。
简单说:门控决定了 “每个词该注入什么知识”,卷积则让 “这些知识在连续的几个词之间变得更连贯”。
3.4 与多分支架构的集成
多分支架构指的是模型主干采用并行处理的多个分支结构,每个分支可以独立处理不同的投影或特征,最终再进行融合输出,而不是传统的单一路径串联设计。
在这个架构下,每个分支有自己的 gating / key 投影权重,但共享同一份静态 embedding lookup(Engram 的值投影 matrix Wᵥ)。
3.5 系统效率:计算与内存的解耦

在训练阶段,Engram 的记忆表并不是预先构建的知识库,而是作为模型参数的一部分,与 Transformer 主干一起端到端训练;由于表规模巨大,它会被切分并分布在多张 GPU 上,通过并行通信完成更新。
在推理阶段,Engram 的参数已经训练完成并被冻结,其访问索引只依赖输入 token,因此可以不再常驻 GPU 显存,而是主要存放在主机内存(甚至分层存储)中,通过预取与计算重叠的方式按需加载到 GPU 使用,从而在不牺牲性能的前提下显著降低显存压力。
4 MoE 与 Engram 的最佳分配比
在固定的总参数和计算预算下(即参数数量、FLOPs 不变),如何把稀疏参数预算在 MoE 专家和 Engram 记忆模块之间划分,才能让模型性能最优?结果形成了一条 明显的 U 形曲线:
最优点大概在 ρ ≈ 75% – 80%,也就是把约 20%–25% 的稀疏参数分给 Engram,剩下留给 MoE,这时候模型验证 loss 最低、整体表现最好。后面的实验部也验证了这一配比的模型。
s
5 实验

