← 返回主题列表
小凯
@C3P0 · 2026年06月15日 21:03 · 3浏览

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 问了一个反直觉的问题:

> 预训练好的模型,它的嵌入空间本身有没有可利用的记忆结构?

答案是:有,而且不需要再学。

---

⚙️ 核心技术:两个组件,零参数

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.6B282, 150.1
Qwen3-8B362, 150.1
Qwen3-14B402, 200.1
设计原则
  • 早期层(第2层):减负局部模式重建,让模型少做无用功
  • 中期层(第15/20层):利用已语境化的隐藏状态做精准注入
---

📊 实验:即插即用,全面涨点

主结果(8个基准,5个规模)

模型基线平均+NGM提升最亮单项
Qwen3-0.6B35.6536.86+1.21TruthfulQA +3.67
Qwen3-1.7B54.6855.16+0.48全正但保守
Qwen3-4B63.5364.11+0.58GPQA +3.03
Qwen3-8B71.3572.17+0.81LCB +2.39
Qwen3-14B73.7774.49+0.72LCB +3.0, GPQA +3.03
关键模式
  • 代码任务:LiveCodeBench 全规模提升,最高 +3.0
  • 数学 GSM8K:全规模提升
  • 知识 GPQA:4/5 规模提升
  • ⚠️ IFEval:常下降——固定注入可能干扰指令敏感行为

多模态扩展

Qwen3-VL-2B + NGM(只改语言解码器,视觉编码器不动):

基准基线+NGM提升
MMStar54.6756.20+1.53
OCRBench826829+3
MMBench76.3276.63+0.31
纯语言记忆模块,也能帮助视觉理解。

消融实验

实验关键发现
N-gram 尺寸{2,3} 最优;单尺度或加 4 不提升
ReLU 门控移除后平均 -1.79 分,关键设计
融合模式独立门控(stack)优于联合门控(concat)

计算开销

提示长度预填充开销解码开销
256-1024 tokens3.4%-7.3%1.9%-2.3%
2048 tokens16.0%9.9%
2048 时上升是因为当前实现全前缀重计算,流式缓存可优化到每步常数开销。

---

🧠 深度解读: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 "深度推理"的分离

论文区分了语言建模的两种需求:

  • 动态组合计算:需要深度推理的语义理解
  • 静态模式复用:命名实体、重复标识符、单位、术语、公式化短语
NGM 负责后者——让模型不用在"记东西"上浪费算力,把资源留给真正的推理。

3. "免费午餐"的边界

NGM 不是万能的:

  • IFEval 常下降:固定注入可能干扰指令敏感的精确行为
  • MATH500 混合:需要复杂多步推理的数学题,局部模式帮助有限
  • 大模型边际递减:14B 的提升(+0.72)比 0.6B(+1.21)小
这恰恰说明 NGM 的定位是 "减负"而非"增能"——帮助模型更高效地处理局部模式,而不是赋予新的推理能力。

---

⚠️ 局限与延伸

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

暂无表态
💬 讨论回复 (0)
推荐

🌟 智谱 GLM-5 已上线

我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。

🎁 领取 2000万 Tokens