NGM:不训练、不加参、不建库——南京大学用最懒的方式给LLM装上了记忆
> 论文:NGM: A Plug-and-Play Training-Free Memory Module for LLMs > arXiv: 2605.16893 | 2026年5月16日 > 机构:南京大学 > 代码:https://github.com/PioneerQyw/NGM
---
🔥 一句话总结
NGM 做了一件极其叛逆的事:它证明了预训练 LLM 的 token 嵌入矩阵本身就是一座金矿——不需要额外训练记忆参数,不需要构建外部检索库,只需要把嵌入空间里的 N-gram 局部模式挖出来,用余弦相似度门控注入到隐藏层,就能稳定涨点 0.5-1.2 分,代码任务最高 +3.0。
---
🎯 问题:记忆增强的"重装备"困境
现有记忆增强方法有一个通病:太重了。
| 方法类型 | 需要什么 | 重量 |
|---|---|---|
| MoE 动态计算 | 专用路由参数 | 中等 |
| 条件记忆嵌入 (Engram/SCONE/L³) | 训练专用记忆嵌入 | 重 |
| 非参数化数据存储 (kNN-LM/RETRO) | 外部数据存储 + 检索索引 | 很重 |
> 预训练好的模型,它的嵌入空间本身有没有可利用的记忆结构?
答案是:有,而且不需要再学。
---
⚙️ 核心技术:两个组件,零参数
NGM 只有两个组件,都没有可学习参数:
1. 因果 N-gram 编码器:从嵌入矩阵里"读"记忆
核心洞察:token 嵌入矩阵 $E \in \mathbb{R}^{V \times d}$ 不只是输入接口,它本身编码了词汇的语义关系。把相邻 token 的嵌入平均一下,就得到了局部上下文模式的表示。
具体做法:
# 极其简单的实现
for n in [2, 3]: # 多尺度 N-gram
# 对输入序列做因果平均池化
# 位置 t 的 n-gram = 位置 t, t-1, ..., t-n+1 的嵌入平均
g_t_n = average(e_t, e_{t-1}, ..., e_{t-n+1})
关键点:
- 零参数:直接复用预训练嵌入矩阵,不学习任何新东西
- 因果性:位置 t 只依赖 ≤ t 的 token,适合自回归
- 多尺度:同时取 2-gram 和 3-gram,捕获不同粒度的局部模式
- 完全并行:用
F.pad+F.avg_pool1d实现,GPU 友好
2. 余弦门控记忆注入器:只给"对得上"的信号
拿到 N-gram 表示后,怎么注入到模型里?NGM 的设计很克制:
Step 1: 计算 N-gram 和当前隐藏状态的余弦相似度
s = cos(h_t, g_t_n)
Step 2: ReLU 过滤——只保留正相关的
s = max(0, s)
Step 3: 残差注入——补充信息,不破坏原有计算
h_t' = h_t + λ * s * g_t_n
为什么用 ReLU?
图3的机制分析显示,对角位置的余弦相似度显著高于非对角位置——有用的记忆信号集中在"对齐位置",不是均匀分布的。 ReLU 把负相关的信号直接掐掉,避免反方向干扰。
消融实验证实了 ReLU 的关键性:移除 ReLU,Qwen3-8B 的平均分从 72.17 暴跌到 70.38,LiveCodeBench 直接崩了。
3. 层插入策略
| 模型 | 总层数 | 插入层 | λ |
|---|---|---|---|
| Qwen3-0.6B | 28 | 2, 15 | 0.1 |
| Qwen3-8B | 36 | 2, 15 | 0.1 |
| Qwen3-14B | 40 | 2, 20 | 0.1 |
- 早期层(第2层):减负局部模式重建,让模型少做无用功
- 中期层(第15/20层):利用已语境化的隐藏状态做精准注入
📊 实验:即插即用,全面涨点
主结果(8个基准,5个规模)
| 模型 | 基线平均 | +NGM | 提升 | 最亮单项 |
|---|---|---|---|---|
| Qwen3-0.6B | 35.65 | 36.86 | +1.21 | TruthfulQA +3.67 |
| Qwen3-1.7B | 54.68 | 55.16 | +0.48 | 全正但保守 |
| Qwen3-4B | 63.53 | 64.11 | +0.58 | GPQA +3.03 |
| Qwen3-8B | 71.35 | 72.17 | +0.81 | LCB +2.39 |
| Qwen3-14B | 73.77 | 74.49 | +0.72 | LCB +3.0, GPQA +3.03 |
- ✅ 代码任务:LiveCodeBench 全规模提升,最高 +3.0
- ✅ 数学 GSM8K:全规模提升
- ✅ 知识 GPQA:4/5 规模提升
- ⚠️ IFEval:常下降——固定注入可能干扰指令敏感行为
多模态扩展
Qwen3-VL-2B + NGM(只改语言解码器,视觉编码器不动):
| 基准 | 基线 | +NGM | 提升 |
|---|---|---|---|
| MMStar | 54.67 | 56.20 | +1.53 |
| OCRBench | 826 | 829 | +3 |
| MMBench | 76.32 | 76.63 | +0.31 |
消融实验
| 实验 | 关键发现 |
|---|---|
| N-gram 尺寸 | {2,3} 最优;单尺度或加 4 不提升 |
| ReLU 门控 | 移除后平均 -1.79 分,关键设计 |
| 融合模式 | 独立门控(stack)优于联合门控(concat) |
计算开销
| 提示长度 | 预填充开销 | 解码开销 |
|---|---|---|
| 256-1024 tokens | 3.4%-7.3% | 1.9%-2.3% |
| 2048 tokens | 16.0% | 9.9% |
---
🧠 深度解读:NGM 为什么有效?
1. "预训练嵌入本身就是记忆"
NGM 的核心假设——预训练 token 嵌入空间包含可利用的本地模式结构——被图1的残差对齐验证证实了:
实际 N-gram vs 隐藏状态: cos=0.312@L1, 0.137@L14
位置打乱控制: cos=0.172@L1, 0.084@L14
随机 token 控制: cos=0.014@L1, 0.008@L14
实际嵌入的相似度是随机控制的 20-100 倍。 这说明预训练嵌入空间的几何结构,天然地和模型内部的隐藏状态"对得上"。
2. "刻板模式" vs "深度推理"的分离
论文区分了语言建模的两种需求:
- 动态组合计算:需要深度推理的语义理解
- 静态模式复用:命名实体、重复标识符、单位、术语、公式化短语
3. "免费午餐"的边界
NGM 不是万能的:
- IFEval 常下降:固定注入可能干扰指令敏感的精确行为
- MATH500 混合:需要复杂多步推理的数学题,局部模式帮助有限
- 大模型边际递减:14B 的提升(+0.72)比 0.6B(+1.21)小
---
⚠️ 局限与延伸
1. 任务特异性:IFEval 的下降说明 NGM 不是 universally beneficial。能否设计任务自适应的注入策略?
2. N-gram 的局限:只考虑连续的局部窗口,跳字模式(如 "not ... good")或长距离依赖无法捕获。
3. 嵌入矩阵的通用性:论文只在 Qwen3 上验证。其他架构(LLaMA、GPT、Mistral)的嵌入空间是否同样"有记忆"?
4. 与 KV Cache 的更深集成:当前实现还有优化空间,流式缓存能否把开销压到接近零?
---
🔗 相关阅读
- 论文原文:arXiv:2605.16893
- 代码仓库:https://github.com/PioneerQyw/NGM
- 对比基线:
- Engram [8] — 需要训练专用哈希嵌入
- SCONE [42] — 需要辅助 Transformer
- L³ [38] — 需要学习层特定聚合矩阵
- kNN-LM [24] / RETRO [3] — 需要外部数据存储
> NGM 的启示:有时候最优雅的解决方案,不是加法而是减法。 与其花大力气训练记忆模块、构建检索系统,不如先问问:模型自己已经有的东西,用好了吗?预训练嵌入矩阵里埋着的局部模式,可能就是那个被忽视的"免费午餐"。
#NGM #记忆模块 #无需训练 #即插即用 #大语言模型 #南京大学 #论文解读 #AI研究 #LLM
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens