长文本处理的「不可能三角」是无限长度、无损性能、线性成本。MemAgent 不在注意力结构上改,而是把文档切成块,让模型每读一块就覆盖一次固定长度的记忆;记忆更新被当成 RL 动作,用 Multi-Conv DAPO 端到端训练。 代价是:它把「读长文」变成了「串行地写摘要」,省的是注意力,不是总延迟。
做法只有三步:把长文切成 K 个块;每读一个块,模型把「问题 + 旧记忆 + 当前块」压成一段固定长度的新记忆,覆盖旧记忆;读完后只用「问题 + 最终记忆」回答。
因为记忆长度固定,每一步的上下文窗口恒定,端到端计算量随块数线性增长。
难点在于「覆盖」是离散操作,不能直接反传。论文把每次记忆更新当成一个独立对话,把最终答案的奖励广播给所有前序对话,得到 Multi-Conv DAPO:损失从 (group, token) 扩成 (group, conversation, token)。
结果:Qwen2.5-14B 在 8K 窗口、1024 token 记忆、5000 token 块的设置下训练,v2 Table 1 里 7K 到 3.5M 从 80.47 降到 71.09,差 9.38 个百分点(相对 11.7%)。 论文摘要说「loss of less than 10%」;按百分点读成立,按相对值读不成立。笔记里的 83.59 → 78.12 是 v1 的旧行,v2 已改。
先拆开三个约束:长度、性能、成本;再看为什么现有路线总得放弃一个。
论文把长文本处理的目标写成三件事:能处理任意长度;长度增加时性能不明显下降;解码复杂度随长度线性增长。三者同时满足很难,因为标准 Transformer 的完整注意力是 O(n²):文本翻倍,注意力计算约翻四倍(§1)。
现有路线各占一角。位置编码外推(YaRN、NTK-aware RoPE 等)加继续预训练,能把窗口拉长,但极长文本下仍有性能衰减和 O(n²) 的计算;稀疏注意力、线性注意力能降复杂度,却往往要重训,且线性注意力并行训练困难、稀疏模式依赖人工设计;上下文压缩(token 级或外挂记忆模块)能缩短输入,但外推能力有限,还要改生成流程(§1)。
MemAgent 把长文看成一个受控的证据流:每一步只让模型看「下一个文本块 + 一段固定长度记忆」。记忆是普通 token,放在上下文窗口里,所以基座模型的生成过程不用改;记忆长度不增长,所以每步计算恒定,总复杂度随块数线性增长(§2.1)。
这相当于把「一次读完」换成「边读边记笔记」。论文的类比是人类处理长文时会记要点、丢冗余;但要注意,模型的「笔记」仍是一段文本摘要,不是结构化数据库,也没有显式的检索或遗忘操作(§1、§2.1)。
MemAgent 的 novelty 不在某个单点技术,而在把记忆更新建模成跨多个独立上下文的 RL 问题。
通过移位位置嵌入、YaRN 等方法扩展窗口;配合长文本继续预训练。
卡点:极长文本仍有性能衰减;完整注意力仍是 O(n²)(§1)。
稀疏注意力只算部分 token 对;线性注意力把复杂度降到线性。
卡点:常要重训;线性注意力并行训练难,稀疏模式依赖人工设计(§1)。
把长文压成短表示,或外接记忆模块;RAG 也属于外部检索路线。
卡点:外推能力有限;要改生成流程,兼容性和并行化受影响(§1)。
训练算法侧,论文以 DAPO 为基础。DAPO 从 GRPO 改进而来,用组内相对优势、裁剪和动态采样做 RLVR。但标准 DAPO 的损失结构是 (group, token):一个样本对应一条轨迹。MemAgent 一次处理长文会生成多条上下文独立的对话(每次记忆更新一条,最后回答一条),这些对话不共享注意力,不能简单拼成一条多轮轨迹(§2.2)。
所以论文把每条对话当成独立优化目标,损失扩成 (group, conversation, token);最终答案所在对话给出奖励,优势广播到同一样本的所有对话。这个改动是整篇论文的方法核心,而不是「换一个更强的基座」(§2.2、Figure 3)。
先看工作流,再看 Multi-Conv DAPO 的目标函数,最后看训练配方。
设文档被切成 K 个连续块 c¹, …, c^K,每块长度不超过 C;记忆长度固定为 M。读完第 k 块后,模型生成新记忆 m^k,覆盖旧记忆 m^{k-1}。因为 |m^k| = M 恒定,每一步的计算与显存是 O(C+M),总复杂度 O(N)(§2.1、§2.3)。
推理分成两个模块:Context-Processing 循环读块、更新记忆;Answer-Generation 在流结束后只拿「问题 + 最终记忆」生成答案。论文强调,位置嵌入没有被重新缩放或打补丁,两个模块共用同一套 tokenization 和注意力布局,因此不需要架构修改(§2.1)。
对每个问题 q_i,策略采样一组 G 个样本;每个样本 i 生成 n_i 条对话 (oi,1, …, oi,n_i),每条对话再分解成 token。最终答案只在最后一条对话里,奖励是二值的:答案等价得 1,否则 0(Eq.3)。
优势不按每条对话单独算,而是用样本级奖励减去组内均值,然后原样广播到该样本的所有对话、所有 token:
损失在「组 × 对话 × token」三个维度上归一化,并对每条对话的每个 token 做 PPO 式裁剪:
这个设计的关键不是「把奖励分给每一步」这么简单,而是让模型学到一种跨对话的信用分配:某一次记忆更新写得好不好,要看它是否让最终答案正确,而不是看它自身是否像某条参考摘要。论文把它解释为优化一个读—写记忆轨迹的 MDP(§2.3)。
基座是 Qwen2.5-7B-Instruct 与 Qwen2.5-14B-Instruct;框架基于 verl。训练故意把上下文限制在 8K,以测试外推。8K 的分配是:查询 1024 token、文本块 5000 token、记忆 1024 token、输出 1024 token,剩余留给 chat template(§3.1)。
课程分两阶段:Stage I 用 32,768 条合成 QA,每条约 32K token,基于 HotpotQA 并按 RULER 方法在大量干扰段落中嵌入金段落;Stage II 用 2,560 条最长 60K token 的困难长文 QA,来自 DocQA-RL-1.6K,并与 Stage I 数据混合。Stage I 收敛约 400 步后切到 Stage II(§A.3)。
| 项目 | 设置 |
|---|---|
| 基座 | Qwen2.5-7B-Instruct / Qwen2.5-14B-Instruct |
| 训练窗口 | 8K(查询 1024 + 块 5000 + 记忆 1024 + 输出 1024 + 模板) |
| Stage I 数据 | 32,768 条合成 QA,约 32K token/条 |
| Stage II 数据 | 2,560 条,最长 60K token;DocQA-RL-1.6K + Stage I 混合 |
| 优化器 / 学习率 | AdamW;常数 1e-6;线性 warm-up 20 步 |
| KL 系数 | 1e-3;关闭 entropy loss |
| Rollout batch / group | 256 / 16;off-policy 采样比 16 |
| Stage I 步数 | 约 400 步后切 Stage II |
注意一个原文内部的小不一致:§A.3 先说 Stage I 每条「approximately 32K tokens」,后文又说每条约 28K token。页面不替作者选一个,两个数都保留(§A.3)。
笔记写于 v1 时期,数字与 v1 Table 2 一致;当前 arXiv 是 v2,RL-MemAgent-14B 的整行被重算。下面切换版本,看十个长度上的差异。
| 长度 | 7K | 14K | 28K | 56K | 112K | 224K | 448K | 896K | 1.75M | 3.5M |
|---|---|---|---|---|---|---|---|---|---|---|
| RL-14B | 80.47 | 82.03 | 82.03 | 83.59 | 81.25 | 77.34 | 79.69 | 75.78 | 78.91 | 71.09 |
v1(笔记所用):7K 83.59;3.5M 78.12。绝对降幅 83.59 − 78.12 = 5.47 个百分点;相对降幅 5.47 / 83.59 = 6.5%。v1 摘要称「performance loss < 5%」,但按 v1 Table 2 的 7K/3.5M 复算,绝对 5.47 个百分点、相对 6.5%,< 5% 不成立。
v2(当前 arXiv):7K 80.47;3.5M 71.09。绝对降幅 80.47 − 71.09 = 9.38 个百分点;相对降幅 9.38 / 80.47 = 11.7%。
口径:都是同一版本、同一行、同一基准的百分点差;论文摘要的「less than 10%」没有说明是相对还是百分点。按百分点读,v2 的 9.38 成立;按相对值读,11.7 不成立。
固定窗口把每步成本压平,但串行读块意味着总延迟仍随块数增长。
标准完整注意力的计算随上下文长度平方增长;MemAgent 每一步只看 C + M 个 token,记忆不增长,所以每步成本恒定,总 FLOPs 随块数 K 线性增长。论文用 verl 的 FLOP estimator 在 8K–4M 长度上对比,Figure 10 显示基线是 O(n²),MemAgent 是 O(n)(§B、Figure 10)。
从 8K 训练窗口到 3.5M 测试长度,长度约是窗口的 437.5 倍(按 3,500,000 / 8,000 计;3.5M 见 §3.2/Table 1,8K 见 §3.1)。这个倍数能成立,靠的是「每步窗口不变」,而不是模型学会了 3.5M 位置的注意力(§2.1、§3.1)。
论文没有报告 GPU 型号、卡数、总 GPU 小时,也没有给不同长度下的端到端延迟或吞吐。FLOPs 线性不等于延迟线性:每个块要等上一块写完记忆,串行依赖无法并行。对低延迟场景,这可能比「一次前向」更慢,尽管总算力更低(§B;Appendix 未给墙钟指标)。推断(依据:§B 只讨论 FLOPs;全文未给 wall-clock 或 GPU 小时)。
另一项成本是记忆管理的「信息取舍」:记忆固定 1024 token,读 3.5M token 意味着极大的压缩比。压缩比越高,早期关键信息被覆盖的风险越大;论文用 RL 训练来缓解,§3.3.3 的 probe 是检验位置鲁棒性的诊断实验,不是缓解机制,也没有给出「信息丢失率」这类直接指标(§3.3.3、Table 4;Table 4 未完整转录)。
按 Figure 2 / Figure 3 重绘:上半是推理时的读—写循环,下半是训练时的多对话信用分配。
(group, conversation, token) 损失、Figure 3 的奖励广播。先看 Table 1 的完整行,再看 LongBench-QA/SUM 与消融;最后把笔记的 v1 数字与 v2 并列。
Table 1 是核心外推实验:训练窗口 8K,测试从 7K 拉到 3.5M。RL-MemAgent-14B 在 v2 的 7K 是 80.47,3.5M 是 71.09;RL-MemAgent-7B 从 81.25 降到 71.88。两条曲线都不是「完全平」,但也没有出现基线那种在 896K 附近归零的崩塌(Table 1)。
| Model | 7K | 14K | 28K | 56K | 112K | 224K | 448K | 896K | 1.75M | 3.5M |
|---|---|---|---|---|---|---|---|---|---|---|
| QwenLong-L1-32B | 72.66 | 75.00 | 72.66 | 60.94 | 31.25 | 17.19 | 13.28 | 11.72 | N/A | N/A |
| Qwen2.5-Instruct-14B-1M | 60.16 | 60.94 | 50.00 | 57.03 | 50.00 | 37.50 | 8.59 | 0.00 | N/A | N/A |
| Qwen2.5-Instruct-7B-1M | 61.72 | 56.25 | 53.91 | 55.47 | 51.56 | 33.59 | 12.50 | 0.00 | N/A | N/A |
| DS-Distill-Qwen-32B | 70.31 | 66.41 | 65.62 | 46.88 | 23.44 | 13.28 | 7.81 | 7.03 | N/A | N/A |
| DS-Distill-Qwen-14B | 64.06 | 64.84 | 57.03 | 40.62 | 14.84 | 8.59 | 3.12 | 6.25 | N/A | N/A |
| DS-Distill-Qwen-7B | 30.47 | 12.50 | 3.12 | 0.00 | 0.00 | 0.78 | 0.00 | 0.00 | N/A | N/A |
| Qwen2.5-Instruct-32B | 69.53 | 64.84 | 60.16 | 51.56 | 44.53 | 21.88 | 14.06 | 7.03 | N/A | N/A |
| Qwen2.5-Instruct-14B | 75.00 | 67.19 | 57.03 | 54.69 | 44.53 | 21.88 | 10.94 | 2.34 | N/A | N/A |
| Qwen2.5-Instruct-7B | 52.34 | 57.03 | 51.56 | 44.53 | 32.81 | 13.28 | 6.25 | 1.56 | N/A | N/A |
| RL-MemAgent-14B | 80.47 | 82.03 | 82.03 | 83.59 | 81.25 | 77.34 | 79.69 | 75.78 | 78.91 | 71.09 |
| RL-MemAgent-7B | 81.25 | 81.25 | 82.03 | 80.47 | 79.69 | 75.78 | 76.56 | 74.22 | 77.34 | 71.88 |
三个基线家族的失败模式不同:DS-Distill 系列下降很快,7B 在 7K 只有 30.47;QwenLong-L1 在训练长度内还能维持,112K 后从 31.25 掉到 17.19(224K)、11.72(896K);Qwen2.5-Instruct-1M 系列在 112K 还有 50.00/51.56,到 896K 直接归零(Table 1)。
v2 摘要写「extrapolate from an 8K context to a 3.5M QA task with a performance loss of less than 10%」。按 Table 1 的 7K 列复算(Table 1 没有 8K 列,以 7K 作最近代理):14B 从 80.47 到 71.09,绝对差 9.38 个百分点,相对差 11.7%;7B 从 81.25 到 71.88,绝对差 9.37 个百分点,相对差 11.5%。
论文没有说明分母。按百分点读,9.38 和 9.37 都小于 10;按相对值读,11.7 和 11.5 都大于 10。页面不替作者选口径,只把两种算法并列。推断(依据:摘要只写「less than 10%」;Table 1 的 7K/3.5M 两列可复算)。
下面从 Table 1 取 7K、112K、896K、3.5M 四个长度,比较 RL-MemAgent-14B、QwenLong-L1-32B、Qwen2.5-Instruct-14B-1M。基线在超出评测长度时显示 N/A,不是 0。
7K:80.47 / 72.66 / 60.16。112K:81.25 / 31.25 / 50.00。
896K:75.78 / 11.72 / 0.00。3.5M:71.09 / N/A / N/A。
口径:都是 RULER-HQA accuracy(%);N/A 是原文没有评测该长度,不是 0 分。112K 时 Qwen2.5-14B-1M 仍高于 QwenLong,但 896K 时已归零。
LongBench-QA 更短但信息密度更高,考的是记忆管理而不是纯定位。MemAgent-14B 平均 51.0,比 QwenLong-L1-32B 的 50.7 高 0.3 个百分点,比 DS-Distill-Qwen-32B 的 49.0 高 2.0 个百分点;MemAgent-7B 平均 48.2(Table 3)。这说明在短而密的文本上,记忆机制仍然有效,但优势没有长文外推那么悬殊。
| Method | 2Wiki | HQA | MuSiQue | NQA | Qasper | AVG |
|---|---|---|---|---|---|---|
| QwenLong-L1-32B | 83.0 | 69.5 | 51.0 | 26.0 | 24.0 | 50.7 |
| Qwen2.5-Instruct-14B-1M | 70.5 | 65.5 | 35.0 | 22.0 | 22.0 | 43.0 |
| Qwen2.5-Instruct-7B-1M | 67.5 | 58.5 | 26.0 | 21.5 | 24.0 | 39.5 |
| DS-Distill-Qwen-32B | 83.5 | 69.0 | 47.5 | 24.0 | 21.0 | 49.0 |
| DS-Distill-Qwen-14B | 83.5 | 67.0 | 42.0 | 22.0 | 22.0 | 47.3 |
| DS-Distill-Qwen-7B | 47.0 | 31.5 | 7.5 | 4.0 | 17.5 | 21.5 |
| Qwen2.5-Instruct-32B | 68.5 | 66.0 | 37.0 | 24.5 | 22.5 | 43.7 |
| Qwen2.5-Instruct-14B | 67.0 | 63.5 | 39.0 | 20.0 | 20.5 | 42.0 |
| Qwen2.5-Instruct-7B | 52.5 | 59.0 | 24.0 | 19.0 | 19.0 | 34.7 |
| MemAgent-14B | 79.0 | 73.0 | 52.0 | 25.0 | 26.0 | 51.0 |
| MemAgent-7B | 74.0 | 69.5 | 47.0 | 21.5 | 29.0 | 48.2 |
LongBench-SUM 用 ROUGE-{1,2,L} 的 recall 评估。Table 2 中 RL-MemAgent-14B 的 GOV REPORT 平均是 21.80:比 Qwen2.5-Instruct-14B-1M 的 19.34 高 2.46 个百分点,比 Qwen2.5-Instruct-32B 的 14.90 高 6.9 个百分点。QMSUM 平均 31.39,比最高基线 Qwen2.5-Instruct-14B-1M 的 29.84 高 1.55 个百分点。论文说「almost all metrics」最好,这个限定是必要的:QMSUM ROUGE-2 一列,RL-MemAgent-7B 为 14.41(最高)、Qwen2.5-Instruct-14B-1M 为 13.13、RL-MemAgent-14B 为 12.70;14B 该项低于基线的 13.13(Table 2)。原文把 12.70 标为第二高(下划线),这与 13.13 的数值更高不一致;原文如此,页面并列呈现,不替作者消解。
| Model | GOV REPORT AVG | QMSUM AVG |
|---|---|---|
| Qwen2.5-Instruct-32B | 14.90 | 29.08 |
| Qwen2.5-Instruct-14B | 19.04 | 29.09 |
| Qwen2.5-Instruct-7B | 19.26 | 28.99 |
| QwenLong-L1 | 16.29 | 23.74 |
| Qwen2.5-Instruct-14B-1M | 19.34 | 29.84 |
| Qwen2.5-Instruct-7B-1M | 19.26 | 29.24 |
| DS-Distill-Qwen-32B | 15.99 | 23.93 |
| DS-Distill-Qwen-14B | 17.25 | 25.07 |
| DS-Distill-Qwen-7B | 19.10 | 20.62 |
| RL-MemAgent-14B | 21.80 | 31.39 |
| RL-MemAgent-7B | 19.34 | 31.27 |
RL 消融(NIAH 见 Figure 5,RULER-HQA 见 Figure 6,LongBench-QA 见 Figure 7):没有 RL 的 MemAgent 在短文本上可能优于基座,但随着长度增加仍明显下降;RL 之后曲线更平。论文的措辞是 RL 训练对「generalizable and robust memory abilities」必要,但没有给逐点数值表,只有图(§3.3.1、Figure 5、Figure 6、Figure 7)。
记忆长度消融(Figure 8/9):在 256–4096 token 范围内,论文称 1024 是「reasonable sweet spot」,且性能对记忆大小较稳健;§3.3.2 只给 Figure 8/9,Appendix D.1 的 Table 8/9 有逐点消融数据(14B/7B × m4096/m3072/m2048/m1024 × c1928/c2952/c3976/c5000;Table 8 各长度 / Table 9 各基准)。Table 8/9 未完整转录。
上下文分布探针(Table 4):把两组关键信息放在 (0%,100%)、(20%,80%)、(40%,60%)、(0%,20%)、(80%,100%) 五种位置组合,14B 在部分设置上高于 random,部分设置上低于 random。例如 (0%,20%) 在 14K 上 −3.91、在 224K 上 +4.69。论文的结论是「没有灾难性下降」,而不是「所有位置都无损」;页面按这个限定呈现(§3.3.3、Table 4;Table 4 未完整转录,仅摘此两例)。
论文自己承认的限制,加上从实验设置能看到的边界。
主实验是 RULER-HQA(合成多跳 QA)、LongBench-QA(NarrativeQA、Qasper、HotpotQA、2Wiki、MuSiQue)和 LongBench-SUM(GovReport、QMSum),奖励是答案等价的 0/1。没有开放式写作、多轮对话、代码库理解或需要全局抽象的任务(§3.1、§3.2)。
每读一块都要等上一块写完记忆,块与块之间有串行依赖。论文只报 FLOPs(Figure 10),没有报墙钟延迟、吞吐或 GPU 小时;对低延迟应用,线性 FLOPs 可能仍比一次前向慢(§B)。推断(依据:§B 只讨论 FLOPs;全文未给 wall-clock 指标)。
3.5M token 的文档最终只留 1024 token 记忆,压缩比约 3418:1(3,500,000 / 1024;3.5M 见 Table 1,1024 见 §3.1;该比值是页面推算)。早期关键信息一旦被覆盖,后续无法找回;论文用 RL 训练缓解,§3.3.3 的 probe 检验位置鲁棒性,不给信息丢失率或可恢复性指标(§3.1、§3.3.3、Table 4;Table 4 未完整转录)。推断(依据:记忆固定 1024 token;§3.3.3 只给准确率探针,没有信息保留率)。
只验证了 Qwen2.5-7B/14B-Instruct,训练数据是 HotpotQA 合成的 RULER 风格 QA 加 DocQA-RL-1.6K;没有跨模型家族、跨语言、跨领域的实验。论文的「any moderately context-sized LLM」是设计主张,不是已被多基座验证的结论(§3.1、§A.3)。
什么时候别用:如果任务需要精确引用原文、逐字定位、或对整篇文档做全局结构推理,固定长度摘要记忆会丢细节;如果任务本身短于训练窗口,分块反而增加串行开销;如果应用不能接受「读完整篇才能回答」的延迟,MemAgent 的流式循环也不合适。推断(依据:论文的任务与指标集中在 QA/摘要;未覆盖精确引用与低延迟场景)。