笔记日期: 2026 年 10 月 7 日
笔记作者: Zhongzhu Zhou
论文题名: End-to-End Test-Time Training for Long Context
论文作者: Arnuv Tandon, Karan Dalal, Xinhao Li, Daniel Koceja, Marcel Rød, Sam Buchanan, Xiaolong Wang, Jure Leskovec, Sanmi Koyejo, Tatsunori Hashimoto, Carlos Guestrin, Jed McCaleb, Yejin Choi, Yu Sun
论文编号与版本: arXiv:2512.23675v2,2025 年 12 月 31 日
1. 先问记忆要保留什么,再问它能装多长
读 TTT-E2E 时,我觉得最值得抓住的问题是:语言模型究竟用什么来保存已经读过的内容?完整注意力保存不断增长的键和值,后面的 token 可以直接回看前面的表示;循环模型把过去压缩进一个固定大小的状态。这篇论文选择了一种特殊状态:模型自身的一部分权重。
模型每读完一小段文字,就利用下一 token 预测误差做一次梯度更新。当前文档因而能够改变后续预测所使用的权重。最近的文字仍交给滑动窗口注意力处理,更早的内容则通过权重变化继续产生影响。从这个角度看,梯度下降在这里同时扮演了学习算法和记忆写入规则两个角色。
但只在推理时临时打开训练开关,并不是论文的全部。它还在外层训练中预先学习一个适合被更新的起点:初始化要让后面的若干次更新真正有帮助。训练时就经历推理时的适应过程,才能让“怎么写入记忆”和“写入以后如何预测”一起接受优化。

图 1。截取自原论文图 1。左图比较相对完整注意力的预测损失,右图是在单张 H100 上测量的每 1K token 预填充耗时,每个批次总 token 数固定为 128K。曲线接近平坦表示单位 token 成本近似不变,不表示读完整篇文档的总时间不变。
主实验使用约 3B 参数模型,报告训练 token 数为 164B,最长上下文为 128K。在给定实验设置下,TTT-E2E 的预测损失接近完整注意力,并在 128K 预填充时获得 2.7 倍加速。不过,同一篇论文也展示了很明显的短板:精确找回远处的随机字符串时,它与完整注意力有较大差距。
这两个结果需要放在一起理解。模型可能很好地吸收一本书的主题、语气、反复出现的人物关系,却没有逐字保存某个很久以前出现的 UUID。前者能改善下一 token 预测,后者只有在用户突然索要那个字符串时才显得重要。所谓“长上下文能力”,如果不说明具体任务,很容易把这两件事混在一起。
因此,我更愿意把这篇工作理解为一种有前景的预测性压缩:用有限状态保存有助于预测未来的信息。本文基于 v2 全部 29 页正文与附录 A–D。原论文的测量、本文的数学推导和后续实验建议会分别说明;图中的标量例子只是教学用计算,没有运行论文模型。
2. 前置知识:注意力、循环状态与预测损失
2.1 完整注意力为什么越来越贵
设序列有 个 token,模型宽度和层数固定。在因果注意力中,第 个位置大致可以访问前面 个位置,因此注意力交互次数为
右侧是窗口长度为 的局部注意力。固定 后,交互次数随 线性增长。这里数的是注意力中的位置交互,不是整台模型的全部 FLOPs;投影、MLP、内存访问以及内核效率同样影响真实耗时。完整注意力即使渐近复杂度较高,也可能在某些长度上因成熟内核而非常高效。
循环模型采用另一种方式:不保存全部过去,而是不断更新一个状态。抽象形式可以写为
TTT 把可更新权重纳入 ,把一次梯度更新纳入状态转移 。它仍然是有时间依赖的计算:后一次更新要接着前一次状态继续做。不同之处在于,状态的表达方式和写入规则更接近一个可学习的小型学习器,而不是单纯的向量加权累积。
实际部署状态还包括局部注意力缓存和更新时需要的临时空间。因此,“上下文被写进权重”不意味着整个系统只保存那一份权重,也不意味着所有中间计算都可以免费完成。
2.2 损失函数决定什么值得被记住
对实际出现的 token ,交叉熵是 。模型给真实下一个 token 的概率越高,损失越低。但这个指标并没有直接要求模型在一万 token 之后完整背出某个随机字符串。压缩后仍能预测语言,与压缩后仍能逐字检索,不是等价要求。
如果平均自然对数交叉熵为 ,困惑度就是 。损失相差 ,对应困惑度的倍率为 。例如论文一项 8K 消融中的 0.018 损失改善,大约对应 1.8% 的困惑度下降,不能写成问答准确率提高了 1.8 个百分点。把指标单位说清楚,才能判断改善有多大。
后文用 表示内层可更新的快权重,用 表示内层保持固定的参数。两者都可以通过外层训练学出来。“内层冻结”只表示读当前文档时不更新,不表示该模块从来没有训练过。注意力、归一化、嵌入和静态 MLP 分支都需要放在这个区分中理解。
还要区分三个时间尺度:外层跨许多训练序列学习;内层每读完一个 chunk 更新一次;chunk 内部依靠因果注意力处理最近的上下文。贯穿这三层过程的基本规则只有一条:一个 token 必须先被预测,之后才可以把它当作标签用于更新。
3. 从没有记忆的预测器开始理解 TTT
论文先拿一个刻意简化的模型做解释:去掉 Transformer 中所有注意力,让前馈网络只根据上一个 token 预测下一个 token。权重固定时,它无法查看文档中的更早信息。加入权重更新以后,过去的观察就可以通过参数变化影响未来预测,即使原始 token 没有继续作为输入保留下来。
暂时省略静态参数,令 输出词表概率分布,单个 token 的损失和更新为
顺序不能颠倒。先使用 预测 ,看到真实的 后计算误差,再得到 。新权重可以帮助预测后面的 token,但不能回头美化刚才已经记录的损失。测试时不需要人工额外标注,因为上下文中真实出现的下一个 token 本身就是监督信号。

图 2。截取自原论文图 2,PDF 第 3 页。玩具模型用来展示“训练时考虑后续适应”和“训练时忽略适应”的差别;它不是最后用于主实验的完整网络。
一个直观做法是先按普通语言模型训练,然后在推理时开始微调。但静态训练只要求起点预测得好,没有要求从这个起点出发的梯度步也好。TTT-E2E 的外层目标则直接评价整个适应轨迹:
两个式子使用相同的标签,计算图却不同。前者改变 时,后面所有梯度更新和预测都会跟着变化;后者始终评价同一套不变权重。外层学习因此可以塑造适合快速适应的表示和局部损失形状,让内层少量梯度步更可能产生有用的效果。
可以把它类比为两种训练学生的方式:一种只要求直接答题,另一种还要求先看几个例子、学会其中规律、再回答后续问题。这个类比只解释优化目标,不意味着模型已经拥有人类式理解、显式数据库或无损记忆。
也正因为如此,打开梯度开关远远不够。更新太小,状态几乎不变;更新太大,可能破坏原先的预测能力;即使刚读过的文字损失下降,也可能伤害后面文字的预测。外层目标评价的是后续效果,但它只能根据训练中见过的序列学习,不能保证对任意新文档都有效。
4. 元梯度究竟多出了什么
4.1 一次更新就引入二阶导数
用 表示当前 chunk 的内层损失,更新后的权重记作 ,后续损失记作 。为了看清主要关系,先把步长和静态参数固定:
其中 是 Hessian,即描述梯度怎样随参数变化的二阶导数矩阵。再对后续损失应用链式法则:
这个式子包含两条影响路径。 表示起点直接移动, 表示起点变化还会改变接下来要走的梯度方向。忽略第二条路径,就改变了外层实际使用的梯度。端到端训练的关键之一,正是让梯度穿过“算梯度再更新”这一步。
式子里写出 Hessian,不代表必须真的存一个巨大稠密矩阵。这里需要的是 Hessian 与向量的乘积,可以利用自动微分计算。但所经过的算子必须支持相应导数,训练过程中还要保存或重算所需中间状态。这些要求会在后面变成真实的内存与运行时间成本。
4.2 多次更新为什么会难训练
设一共有 个等长 chunk,令 ,则主要依赖关系可以写成
这是固定步长下的解释性推导,暂时没有展开静态参数的额外路径。连续相乘的 Jacobian 表明:较远位置的损失传回初始状态时,信号可能衰减,也可能放大。它与训练循环网络时遇到的问题有相通之处。
看一个最简单的标量例子。若 ,且 、初始误差非零,则梯度下降后的误差满足
推导只需要把梯度 代入更新式,再要求误差倍率的绝对值小于 1。这个二次函数例子不能证明真实非凸网络的稳定性,但足以解释为什么“多更新几次”不一定更好:每一步的局部几何形状都会影响后面的轨迹。

图 3。本文绘制的数学示意:、、。两种步长仅用于说明式(8),不是 TTT-E2E 的实验结果,也不是模型调参建议。
外层训练可能学出更容易适应、更稳定的起点,但不能自动消除所有分布变化和极端梯度。因此,论文后面限制可更新层、选择 chunk 大小,都不仅是节省算力的技巧,也是在约束一个较难优化的动态系统。
5. 为什么需要“分块更新 + 局部注意力”
逐 token 更新有很强的顺序依赖,不利于并行。论文把内层更新改为按 chunk 执行。第 块包含 个预测目标,平均损失与更新写成
同一块里的所有目标都使用更新前的 。这有利于批量计算,却也造成了信息延迟:即使当前块前面已经出现一个很重要的新词,快权重也要等整个块结束后才能吸收它。玩具实验中的锯齿状损失可以帮助理解这种延迟。
最终模型用因果滑动窗口注意力补足这个缺口。近期 token 可以直接被注意力访问,不必等下一次梯度更新。采用的主要设置是 8K 注意力窗口、1K 内层 chunk;窗口至少覆盖一整个 chunk,让同块中的较早信息有一条直接通路。
这里的分工很清楚:局部注意力负责近期细节,快权重负责跨块压缩。两者互补,但因果掩码仍然必须存在。把一块文字并行送入模型,不意味着块开头可以偷看块后面的标签。
一个很有解释力的边界情况是 等于整条训练序列长度。假如序列是 8K,内层 chunk 也是 8K,那么更新发生时,该序列的预测已经全部结束。随后又重置状态,就没有任何已评分位置用到适应后的权重。此时即使形式上计算了一次更新,也不能把损失改善归因于当前序列的在线适应。
更小的 chunk 缩短信息写入延迟,却增加更新次数、顺序开销和元梯度路径长度;更大的 chunk 减少更新成本,却降低适应频率。论文报告小于所选 1K 设置时会出现优化方面的问题。这里的选择是特定模型、训练条件和硬件上的经验平衡,不应当变成放之四海而皆准的常数。
6. 可变记忆放在哪里
最终模型并不在推理时更新全部参数,而是只更新最后四分之一 Transformer block 中的 MLP。嵌入、归一化和注意力参数在内层保持固定。论文报告,如果把更新范围放得更宽,外层优化会不稳定。这是实测中的设计选择,不是说这些模块从原理上永远不能适应。

图 4。截取自原论文图 3,PDF 第 6 页。图中对比了网络级下一 token 目标和局部键值绑定目标;改变内层损失,也会改变记忆的写入与读取结构。
每个适应 block 还增加了一条静态 MLP 分支。可以直观地理解为:一部分计算负责保留跨文档通用的预训练知识,另一部分允许根据当前文档改变。为保持总体参数预算,作者同时缩小了网络中 MLP 的隐藏维度,而不是无条件加上一整套额外大网络。
为什么选择后面的层?较早层的更新需要让差分路径穿过更多后续计算,扩大可变状态也会增加成本。在 760M、24 层模型的消融中,六个可适应层取得较好效果;进一步大幅减少会损害上下文扩展收益,增加到十二层则没有清楚显示更好。这个结果支持“需要一定记忆容量,但不必处处更新”的经验判断。
低秩适配器是一个自然替代方案:它可以减少每个会话独占的状态,却也限制文档能够引起哪些参数变化。另一种方案是更新更多层,但对外层梯度采用一阶近似。这样也许更便宜,不过会改变优化问题,并不等同于论文的最终模型。理解这些替代方案,有助于看清作者选择的代价,而不应把未经测量的方案写成已经验证的改进。
还有一个容易被总参数量掩盖的问题:总参数相同,不等于可用于记忆当前文档的参数相同。静态权重可以在会话之间共享,快权重则承载不同文档的不同状态。对单模型质量而言,两者都是参数;对服务内存而言,两者的地位很不一样。
7. 三段算法:把信息边界写清楚
下面的伪代码依据论文方法重新整理,目的是解释计算顺序。论文没有明确给出的服务细节,例如最后不足一块的生成 token 怎样处理,不在这里擅自补成作者方案。
算法 1:因果预填充与内层适应
输入:上下文 X,外层学到的 W_init 与 phi,块大小 b
1. 为当前序列复制一份 W <- W_init。
2. 初始化有长度上限的因果注意力状态。
3. 按时间顺序处理每个已观察到的块 C:
3.1 用当前 W 和 phi 预测 C 中的目标 token。
3.2 在块内应用因果掩码。
3.3 在利用 C 更新之前,记录平均预测损失。
3.4 对快权重 W 计算该损失的梯度。
3.5 执行内层更新,得到新的 W。
3.6 只保留窗口允许的注意力状态。
4. 返回适应后的 W 和局部注意力状态。
第 3.3 步是评价是否有效的关键。如果先对这一块训练,再用新权重评价同一批标签,结果会包含答案泄露。这里记录的是看到标签之前的预测质量;标签的作用是帮助后面的位置。训练和推理可以共享这条信息顺序,但训练时还需要对整段更新轨迹求外层梯度。
算法 2:让外层梯度穿过内层学习
输入:一批相互独立的训练序列
1. 每个序列分别从 W_init 初始化自己的快权重。
2. 执行算法 1 的分块预测与内层更新。
3. 汇总每块在更新前记录的预测损失。
4. 对汇总损失求导,梯度穿过各次内层更新。
5. 累积 W_init 和静态参数 phi 的外层梯度。
6. 用外层优化器更新它们。
7. 丢弃各序列的临时适应状态,再处理新序列。
“重置”不是无关紧要的实现习惯,而是实验定义的一部分。独立文档不能悄悄共享不断改变的快权重。若一个服务把甲用户的状态拿去接着处理乙用户的文字,就已经改变了原论文的文档级适应假设。反过来,若想要长期持续的个人记忆,也需要专门评价跨文档累积、遗忘和状态管理。
算法 3:带周期性更新的生成
输入:完成预填充后的快权重和局部注意力状态
1. 使用当前状态,按因果顺序生成新 token。
2. 累积新生成的 token,直到凑满一个内层块。
3. 计算该块的因果下一 token 损失并更新快权重。
4. 从新状态继续生成。
5. 达到停止条件后结束。
算法 3 的监督来自模型自己的输出,这与阅读外部真实文档不同。错误实体、重复短语甚至已经偏离主题的文本,都可能进入后续更新。算法本身不能证明这种自训练一定改善事实性或多样性,必须看相应评价。
实际服务还会遇到请求取消、生成分叉、半个 chunk、状态回滚等问题。比如用户在一个更新边界之前取消请求,是否保留未完成块?同一前缀分出两条候选回答时,两份快权重如何管理?这些是由方法性质自然引出的工程问题,本文没有把它们写成论文已经完成的系统功能。
8. 为什么把键值绑定换成最终预测目标
早期一类 TTT 层更像局部关联记忆:把输入投影成键和值,让小网络 学习两者的关系。简化后的局部目标是
原始写法再通过查询投影读取更新后的记忆,即 。论文先把读取改为使用键投影和更新前的权重,再把内层目标从局部重构换成整个网络的下一 token 预测,最后调整适应 MLP 的层数和结构。
这种变化为什么可能有用?局部重构先要求记忆保存某种投影信息,再希望这些信息间接帮助语言预测。端到端目标直接利用最终预测错误决定写入内容,减少了这一步代理目标的不匹配。但它消除的是“局部重构与语言预测”的差异,不是“语言预测与任意下游任务”的所有差异。

图 5。根据原论文表 1 重绘:760M 模型、8K DCLM 设置下的损失,越低越好。横轴截取较小范围是为了看清细微差别,不表示存在很大的倍数提升。
具体数值是:滑动窗口注意力 2.827,原始 TTT-KVB 2.818,简化 KVB 2.819,仍在所有层使用多头更新的 E2E 版本 2.806,最终 TTT-E2E 2.805。在这条实验路径中,较大的改善出现在换用最终任务损失的步骤,最后的结构简化只带来较小的损失变化。
这支持了“内层目标与最终任务对齐很重要”的解读,却还不是对目标、记忆容量和计算成本的完整正交实验。最终 E2E 版本有 88M 个快状态参数,而所有层均使用多头更新的 E2E 中间版本为 18M,约差五倍。即使模型总参数预算相近,用来承载当前文档的可变容量仍明显不同。
论文还在相关的 760M 对照中报告每 1K token 预填充约 0.0086 秒与 0.017 秒,分别对应最终 E2E 和所有层多头 E2E 中间版本。这个数字不能与主图中的 3B 模型混成一个配置。把某张表里的状态规模、另一张图里的速度和第三种模型的质量拼在一起,会制造一个现实中没有被测量过的结果。
从参数结构看,把宽度为 的稠密映射分成 个独立头,会把主要矩阵参数量从 降到约 ,低秩结构还可以继续压缩。改回普通 MLP 后,状态容量和计算形态都会变化。后续工作若想更清楚解释收益来源,应该分别控制“写什么目标”和“有多少地方可写”。
9. 怎样读上下文扩展曲线
9.1 不是一个检查点直接外推所有长度
论文研究的模型从 125M 扩展到 2.7B,后者在讨论中通常近似称为 3B。主要训练路线是在 DCLM 中过滤掉短于 8K 的文档,再在 Books 上做长上下文训练,主要预测损失也在留出的 Books 文本上测量。
不同目标上下文长度的曲线,不是同一个 8K 模型直接输入 16K、32K、64K、128K 后得到的零样本外推。它们从预训练检查点出发,分别做对应长度的扩展训练。平滑的长度曲线反映的是架构和训练方案共同的效果,不能只保留架构名称而略去这一条件。
在较大规模的主要实验中,TTT-E2E 能接近完整注意力的预测表现,并优于图中其他单位 token 成本有界的方案。但优势不是在每个参数规模、每个训练量上都一样稳定。小模型在较长上下文下出现优化困难,数据和 tokenizer 的变化也影响趋势。这些现象告诉我们经验结论的范围,而不是让所有结果失去价值。
9.2 三个旋钮对应三个不同问题

图 6。截取自原论文图 4,PDF 第 10 页。局部窗口、1K 内层块和有限数量的可适应层,分别回应短期信息、更新频率和记忆容量的问题;曲线支持特定设置下的设计选择。
注意力窗口解决“刚刚出现、还没来得及写进权重”的信息;chunk 大小决定多久写一次;适应层数决定可以写多少以及写入有多贵。把三个消融放在一起看,才能理解最终架构为什么是现在这个组合。
实验细节也有解释价值。层数消融使用 760M 模型,为稳定训练,在各个上下文长度上都把序列 batch 加倍。8K 预训练时,8K 局部窗口已经覆盖整条序列,相当于该序列范围内的完整注意力;此时 1K 分块适应仍能改善损失,说明收益并不只是来自“删掉远处注意力连接”。
相反,如果 chunk 也设为 8K,适应后的权重不会再用于本序列的任何预测。此时修改过的架构得到约 2.825 和 2.826 的损失,接近完整注意力基线的 2.827。这个对照与“主要收益需要真实的适应过程”相符,而不是简单多加一条静态分支就能解释全部改善。
9.3 第一次更新之前就有收益,意味着什么

图 7。截取自原论文图 6,PDF 第 13 页。两个面板对应相关长度训练后的模型。最早一段 token 的优势可能来自外层学出的更好起点,因为当前序列尚未积累满第一次更新所需的 1K token。
位置曲线里一个很容易被忽略的现象是:TTT-E2E 在第一次内层更新之前,已经可能表现更好。这部分收益不可能来自当前文档造成的权重变化,只能来自外层训练塑造的初始化、静态计算或二者的配合。
后面位置的收益才可能进一步叠加当前上下文的适应效果。只看最终平均损失,很难把这两部分拆开。一个有价值的后续实验是固定同一个已训练检查点,对比正常更新、关闭更新和对无关文字更新的结果,同时保持因果评分方式一致。这是本文提出的诊断,不是已经完成的实验。
这个区分并不是削弱论文。更好的起点本来就有价值;只是它回答的是“外层训练学到了什么”,而在线更新回答的是“当前文档还能带来多少额外收益”。两者都重要,但应该有各自的证据。
10. 精确检索把压缩边界暴露得很清楚
一本书的主题和风格会持续影响许多后续 token,一个随机 UUID 则可能只有在很久之后被问到时才重要。下一 token 目标可能优先保存前者,却没有给后者足够容量。针尖检索实验正好把这种差异放大了。

图 8。根据原论文表 2 的 128K 列重绘。三项任务分别要求找回 passkey、数字和 UUID。图中是检索分数,不是语言模型交叉熵。
在 128K 下,完整注意力三项分数为 0.99、0.86、0.64,TTT-E2E 为 0.06、0.05、0.03。其他压缩状态方案也普遍困难。这组结果足以阻止一个过度结论:平均预测损失低,并不等于能完整保存所有远处事实。
长度趋势同样重要。TTT-E2E 的 passkey 分数从 8K 的 1.00,下降到 16K 的 0.46、32K 的 0.24、64K 的 0.13,最后到 128K 的 0.06。这里使用的是扩展到 128K 后的模型,在不同输入长度上测试。局部范围内能够成功,并不保证超出直接窗口后仍保留同样精度。
一种合理解释是:有限状态会按预测目标压缩信息,而随机字符串对一般后续语言预测贡献较小。这个解释与目标和结果一致,但还不能证明模型内部究竟丢掉了哪些表示;本文没有把机制推测写成已经观察到的神经元行为。
应用上应当据此分工。主题适应、风格延续、长文续写,可以从预测性压缩中获益;准确引用、配置值、标识符和有出处的回答,则仍需要访问原始证据。将适应模型与显式检索结合,是一个自然方向,但这篇论文本身没有完成整套混合产品的验证。
11. 效率必须拆成三笔账
11.1 预填充:单位成本有界,总工作量仍然增长
主图预填充实验使用一张 H100,并把每个 batch 的总 token 数固定为 128K。因此,8K 上下文可以同时放更多序列,128K 上下文则放更少序列。这是一个有控制条件的吞吐导向比较,并不等同于对所有长度都测单请求延迟,也不等同于为每种方法分别调到最大吞吐。
在这个设置下,128K 的 2.7 倍加速是有意义的实测结果。近乎平坦的归一化曲线表示:再多读固定数量的 token,新增工作量大致相近。若模型大小、窗口 和块大小 固定,总预填充成本可以粗略分解为
第一项是每个 token 的局部网络计算,第二项是大约 次适应更新。两项都随 线性增长;除以 后,平均每 token 成本才是有界的。论文关于常数成本的表述应该放在这个意义下理解,不能读成上下文无论多长都只花同样总时间。
完整注意力的交互项会随长度增长,但它有高度优化的内核,并能利用较强的并行性。因此,渐近优势与某个具体长度的实际优势是两种证据,缺一不可。论文给出测量很重要,我们保留它的硬件与 batch 条件也同样重要。
11.2 生成:均值会隐藏更新边界的停顿
生成过程中,两个更新边界之间走局部注意力路径;凑满一块以后,再做一次训练步骤。用简化的稳态成本表示,平均每 token 开销为
这是用于理解摊销成本的账目分解,不是论文提供的一组独立 decode 实测。论文讨论了生成计算由哪些部分组成,但没有给出与预填充主图同等完整的生成延迟研究。对流式服务而言,用户看到的还包括每次更新处的停顿,不能只看平均 token/s。
例如两个系统平均速度相同,一个平稳输出,另一个每隔 1K token 停一段时间,用户体验就可能不同。这个例子没有给具体停顿数值,因为论文没有测量相应尾延迟。需要额外实验回答的是边界更新、请求调度和并发共同造成的延迟分布。
内存也应按会话计算。一个概念性预算是
其中 是独立会话数。共享基础参数只存一次,每个会话却有自己的快权重和局部缓存;更新工作区能否复用,取决于调度与精度。如果更新规则还有额外优化器状态,也要计入相应预算。这里没有假定作者使用了某一种带状态的内层优化器。
这些量可以不随文档长度持续增长,但“有界”不意味着“很小”。以 760M 对照中的 88M 快参数为例,仅按每个参数两字节存储就是约 176MB,还没计入梯度和临时空间。这只是容量估算,不是论文测出的服务内存,更不能直接套到 3B 配置。
11.3 训练:学会如何适应,本身很贵

图 9。截取自原论文图 8,PDF 第 16 页。这组训练延迟测量使用 H200,主预填充比较使用 H100;训练、预填充和生成三种工作负载不能合并成一个笼统加速比。
论文报告,相对相应 Transformer 对照,8K 训练约慢 3.4 倍,128K 训练则约快 1.2 倍。原因是不同长度下,完整注意力不断增长的成本与“对梯度更新再求导”的成本占比不同。长上下文推理有优势,并不意味着从头训练它在所有阶段都更便宜。
高阶导数还会碰到内核能力的边界。论文讨论了相关融合注意力路径不支持所需导数的问题,以及沿时间展开做 checkpointing 的代价。checkpointing 通过少存一些激活、需要时重算来省内存;轨迹变长以后,重算开销也会改变。所以估算的每 token FLOPs 变化不大,实测训练耗时仍可能上升。
作者提出的定制内核、不同初始化路线等方向值得研究,但应继续标为未来可能性,而不是这篇工作已经取得的速度。对照实验在部分方法上使用不同框架,论文也描述了对基线内核的改进。若要做实际采用决策,仍应在相同硬件、内存约束、训练预算和质量要求下比较完整系统。
12. 证据的局限
规模和长度还有限。 主要实验覆盖到约 3B、128K。固定窗口和固定状态支持单位 token 成本有界的复杂度分析,却不保证在无限长流上质量稳定。更新次数、内容分布、遗忘和梯度噪声都可能随着持续运行而变化。
数据偏向连续文本。 过滤后的 DCLM 和 Books 很适合研究跨段落语言规律,却没有全面覆盖工具日志、多轮对话、混合语言、代码仓库以及由一个罕见细节决定答案的任务。能吸收一本书的统计规律,不自动代表能处理所有长上下文应用。
预测损失与生成质量不是同一指标。 论文用外部 Qwen3-8B-Base 评价生成续文的似然,设置包括 8K 预填充、8K 生成、512 个序列;采样温度为 1,top-p 为 0.95,重复惩罚为 1.1。作者还描述了少量人工阅读。外部模型的似然是代理指标,不能直接证明事实正确、指令遵循或长期叙事一致。重复控制尤其重要,因为低熵重复也可能显得容易预测。
精确检索差距是直接测到的短板。 它不是本文为了谨慎而凭空担心的问题。针尖实验明确表明,预测性压缩没有保留与完整注意力相同的细节访问能力。论文也没有建立经过完整后训练后的广泛问答、复杂推理或 agent 能力结论。
服务侧测量还不完整。 预填充吞吐有实验,但独立会话容量、生成边界的尾延迟、请求分叉及长时间运行仍需要更多证据。总 token 固定的 batch 比较很有价值,只是它不能回答所有服务问题。
优化不是随手打开就能稳定。 更新层范围、块大小、小模型长上下文不稳定、数据与 tokenizer 敏感性,都说明端到端内层学习有自己的训练难度。现有结果鼓励继续扩大研究,不足以成为所有模型通用的替换配方。
13. 批判性分析
13.1 最强贡献在于改变“优化什么”
我认为这篇论文的关键,不只是把文档存进权重。循环状态早就在压缩历史,梯度式记忆也不是第一次出现。更重要的是让最终语言预测目标同时决定内层该写入什么,以及外层该把网络准备成什么样,才能被这样写入。
从 KVB 到 E2E 的逐步消融支持这个解释。不过,最终方案同时改变了适应状态容量和网络组织。若要更有力地归因,可以在相同快状态大小、相同更新成本下比较目标,再把语言损失、精确检索和训练成本一起报告。现在的结果值得认真对待,但“收益全部由目标对齐带来”仍比证据走得更远。
这种区分对后续设计很实际。假如目标是主要因素,我们会优先研究更合适的任务损失;假如容量占很大比例,就需要研究怎样分配快状态;假如系统结构贡献很大,内核与层选择又会成为重点。不同解释指向不同工作,不能只用一个总加速比替代它们。
13.2 更好的初始化与当前文档的学习要分开
第一次更新前的优势,是我觉得最值得保留的观察之一。它说明外层目标不仅可能教会模型如何更新,也可能改善模型尚未更新时的行为。这个收益本身完全有价值,只是不能归因于它已经记住了当前文档。
我会建议固定同一个训练完成的模型,分别测试正常更新、关闭更新、在无关上下文上更新,以及在有明确意义的条件下改变块顺序。所有测试仍应先预测后使用标签。这样可以更清楚地区分:初始化自带的能力、当前文档提供的适应收益,以及对无关文本的敏感性。
这些是建议实验,不是本文已经做过的模型实验。提出它们的目的,是让“会学习”这个描述可被分解和检验,而不是把一个综合损失差直接理解成某种确定的内部机制。
13.3 压缩记忆需要明确任务要求
一个负责续写主题的记忆,可以有损;一个负责返回配置文件某个端口号的记忆,需要准确。论文结果提示,系统应该明确说明自己希望保留什么信息。窗口长度或上下文长度只是输入范围,不是所有细节都能被召回的保证。
适应预测器与显式证据存储可以承担不同责任:前者学习语境,后者保留原文。但混合后也会增加检索、同步和状态管理成本。也可以尝试辅助保留目标,或用延迟精确回忆任务训练内层学习器;这些改变可能提高检索,也可能牺牲语言预测或占用更多状态。
因此,合理的下一步是测量这种权衡,而不是直接宣布一个方法替代另一种记忆。损失函数决定什么信息值得保存,系统用途决定这种保存方式够不够用。
13.4 对自己生成的文字更新,需要单独论证
读取真实文档时,下一个 token 是外部观察;自由生成时,下一个 token 来自模型自己。把后者再拿来训练,可能放大已有偏好或错误。外层训练也许能缓解熟悉分布内的问题,但没有证据说明它对所有自生成偏差都稳健。
可考虑的方案包括只对外部文字更新、对某些异常 chunk 暂停更新、保留可恢复的状态检查点。然而每一种规则都会改变内层的数据分布,也可能过滤掉原本有用的信号。它们应被当成新的系统选择,接受单独比较,而不是默认无代价的安全补丁。
对 agent 尤其如此:用户输入、工具返回、检索文档、模型自己的推理文本,并不是同一种证据。若都进入同一个快权重更新流,模型可能学到不同可信度的内容。论文提供了一个适应机制,但还没有解决所有信息来源混合后的学习质量问题。
13.5 系统收益最终要算上训练账单
如果一个训练好的模型会处理大量超长请求,即使训练较贵,推理节省也可能值得。若上下文普遍很短,或者模型只被使用少量次数,结论就可能不同。这不是一个抽象的“更快就更好”问题,而是训练成本如何在未来工作负载中摊销。
我最希望看到的补充测量是:相同训练墙钟预算下的质量;每个并发会话的峰值可变内存;生成更新边界的尾延迟;以及超过训练长度、持续不断的数据流上的质量变化。它们不妨碍承认当前预填充结果,但会决定能否把一个研究方案推广成通用服务方案。
这些问题还有一个共同点:必须围绕完整工作负载定义评价。只按 token 数对齐,可能忽略高阶求导的训练成本;只按平均吞吐对齐,可能忽略交互延迟;只按语言损失对齐,可能忽略精确引用失败。论文的价值在于给出了一个清晰机制和可见的优缺点,后续判断也应该保持这种具体程度。
14. 结论
TTT-E2E 给出了一条逻辑完整的长上下文路线:局部注意力保存近期细节,梯度更新把较早信息压缩进固定大小的快权重,外层训练则让这种更新从一开始就服务于预测。其主要实验证据是在指定的约 3B、H100 设置下,128K 预填充加速 2.7 倍,同时保持接近完整注意力的语言预测表现。
边界也很明确:精确检索仍然弱,短上下文训练可能更贵,生成和多会话服务还缺少更完整的测量。最有用的认识不是“权重能记住一切”,而是要根据目标函数判断它倾向于记住什么,再根据应用判断这些记忆是否足够。
如果关心的是长文中的预测规律,这篇论文很值得读;如果关心的是逐字取回某条证据,它同样值得读,因为它把两种能力的差别展示得很直接。一个好的长上下文系统,需要在这些差别上做设计,而不是只扩大一个上下文长度数字。