1. 问题与 TTT layer 的三个组件
问题: 固定大小的状态装不下长上下文. 序列层可以按「状态」来分. 自注意力的状态是 KV cache, 每读一个 token 追加一对 , 状态随 线性增长, 生成第 个 token 要扫描 对 KV, 每个 token 的开销是 . RNN 的状态大小固定, 每个 token 的开销是 , 代价是要把整个历史压进固定大小的状态.
Kaplan 等 (2020) 的 Scaling Laws 论文里已经观察到, LSTM 既不能像 Transformer 那样随规模扩展, 也不能有效利用长上下文. 提出 TTT layer 的 Sun, Li, Dalal 等 (2024) 用 Mamba 重做了这个检查 (论文图 2): Mamba 在规模上的 Scaling Laws 已经和 Transformer 接近, 但在 Books 数据上按 token 位置画平均困惑度, Transformer 的曲线在 32k 内一直下降, Mamba 在 16k 之后变平. 后面的 token 能看到的历史更多, 理应更容易预测, 曲线变平说明 Mamba 的状态没能装下更多有用的信息.
RNN 相对 Transformer 的优势是线性复杂度, 这个优势只在长上下文里才兑现 (论文测得 8k 之后); 偏偏在长上下文里, 现有 RNN 用不上多出来的信息. 这是 TTT layer 要处理的矛盾. 论文的切入点是: 自监督学习本来就是一种把大量数据压进模型权重的方法, LLM 的预训练就是例子. 那么把 RNN 的状态更新本身写成一次自监督学习, 状态的压缩能力就来自学习算法, 而不是一个手写的门控公式. TTT layer 的机制可以拆成几个相互连接的问题:
- 状态是一个模型的权重, 更新规则是一步梯度下降, 这个层具体怎么算?
- 内循环学什么, 由谁决定?
- 它和线性注意力, DeltaNet, 自注意力是什么关系?
- 逐 token 的梯度下降是串行的, 怎么在 GPU/TPU 上跑快?
- 实验在多大规模, 多长上下文下成立, 成本在哪?
三个组件: 初始状态, 更新规则, 输出规则. 论文把所有序列层拆成三个组件. 设输入 token 为 , 输出为 , 状态为 :
| 层 | 初始状态 | 更新规则 | 输出规则 | 每 token 开销 |
|---|---|---|---|---|
| 朴素 RNN | 零向量 | |||
| 自注意力 | 空列表 | |||
| 朴素 TTT | 的初始参数 |
自注意力一行里 是前 个 key, value 按列拼成的矩阵. TTT 一行的状态是 的参数 , 大小固定, 所以它属于 RNN; 区别在更新规则, 它是对损失 的一步梯度下降, 没有手写的门控或非线性映射:
是内循环学习率. 从压缩的角度看, 式 (1) 决定了记住什么: 梯度大的 token (让 学到很多的 token) 对状态的改动大. 内循环损失. 最简单的 是重建: 把 加噪或投影成 , 让 从 重建 , 损失 . 论文图 4 在 125M 模型上画了这个损失: 每走一步, 比 低; 沿着序列往后, 也比用初始权重的 越来越低, 说明 确实在积累关于这条序列的信息. 手工设计加噪方式不一定对下游任务有用. 论文把重建任务本身参数化, 交给外循环学. 训练视图 是一个可学习的低秩投影, 重建目标 (标签视图) 是另一个可学习投影 :
训练视图的维度比 低, 输出不能再直接用 , 于是再加一个测试视图 :
下标 是有意的: 它们在形式上对应自注意力的 key, value, query 投影. 式 (2) 决定 的哪部分信息被压进 并沿时间往后传; 式 (3) 决定从 里读出什么, 送到当前位置的下一层. 是这一层的输出向量, 送进网络后续层; 它本身不是下一个 token 的预测. 下一个 token 的预测由整个网络的输出头给出, 训练目标是标准的下一个 token 预测. 内循环与外循环.
| 内循环 (TTT) | 外循环 (正常训练) | |
|---|---|---|
| 一条数据 | 一个 token | 一条序列 |
| 训练集 | 一条序列 | 序列的数据集, 如 Books |
| 目标 | 重建, 式 (2) | 下一个 token 预测 |
| 被优化的参数 | ( 的权重) | 网络其余参数 ; ; 初始值 ; 学习率参数 |
这张表 (论文 Table 2) 里最重要的一点是: 在外循环看来, 只是隐状态, 不是参数; 外循环的参数是内循环损失和优化器的「超参数」. 外循环对 等求梯度时, 要穿过式 (1) 里的梯度算子, 也就是对梯度求梯度. 这和 MAML 一类元学习的二阶梯度是同一种计算.
和常见的元学习相比, 这里的层级关系是反过来的. MAML 一类方法的内循环在一整个数据集 (一个任务) 上学习, 外循环要在很多个数据集上平均, 所以外循环比常规训练「高一级」, 需要收集成千上万个任务, 很难扩大规模. TTT layer 的内循环把一条序列当作一个数据集, 一个 token 当作一条数据, 内循环比常规训练「低一级」; 外循环面对的就是普通的序列数据集和普通的下一个 token 预测目标, 和训练一个 Transformer 没有区别. 论文认为这是这套外循环容易扩展的原因. 论文还试过在 后面再接一个解码器 , 用 做重建. 效果略好, 但外循环训练变得不稳, 计算也明显增加, 最终只用编码器式的 . TTT layer 在序列内维护的状态可以具体写成:
| 问题 | TTT layer |
|---|---|
| 更新对象 | 内循环模型 的权重 , 每个 token 或每个 mini-batch 更新一次 |
| 损失与读出 | 当前 token 的训练视图 和标签视图 计算损失; 输出时输入测试视图 |
| 状态生命周期 | 由式 (1) 从 得到, 每条序列从 开始, 序列结束丢弃 |
| 信息限制 | 保存对重建损失有用的统计结构, 无法精确复现任一历史 token |
1.1. 手算, mini-batch 与 dual form
手算: TTT-Linear 一步就是 delta rule. 取 (不加 LN 和残差), 记 , , 式 (2) 变成 . 对 求梯度:
代入式 (1), 整理:
DeltaNet 的状态更新是 . 取 , 两者相同. 论文在 related work 里也给了这个结论: DeltaNet 等价于内循环 mini-batch 大小为 1, 去掉 LN 和残差的 TTT-Linear. 式 (5) 的两项各有含义. 第二项 把新的 key-value 关联写进去; 第一项 先把旧状态在 方向上的分量擦掉一部分. 先擦后写, 所以同一个 key 再次出现时, 新 value 会替换旧 value. 代入数字. 二维, , (所以 ). 第 1 个 token: , . , 误差 , 按式 (5):
查询 : , 读回了刚写入的 value. 第 2 个 token 用同一个 key, 换一个 value: , . 先算当前状态对 的输出 , 误差 :
查询 : , 旧 value 被完整替换. 同样两个 token 交给不带归一化的线性注意力, 状态是外积的累加 , 查询得到 , 是 和 的叠加. 线性注意力只写不擦, 同一个 key 上的多个 value 会混在一起; delta rule 用当前预测误差决定写多少, 能覆盖. 这里 , , 覆盖是完全的; 时是部分覆盖. 让它跑起来: mini-batch TTT. 式 (1) 不能并行: 依赖 , 依赖出现在两处, 减号前面和梯度里面. 梯度是主要计算量, 论文从这里下手. 把梯度下降写成通式:
是下降方向. 只要所有 都算出来, 所有 就是一次累加 (cumsum). 三种选择:
- 在线 GD: , 每个梯度依赖上一步, 完全串行. 离 有 步.
- batch GD: , 全部相对 求, 完全并行. 但 实际上离 只有一步, 搜索空间小, 语言建模效果差.
- mini-batch GD: , 其中 是上一个 mini-batch 结束时. 同一块内的 个梯度相对同一个基点求, 可以并行; 块与块之间串行.
论文所有实验取 . 图 7 的消融显示 越小困惑度越好 (梯度步数越多), 但并行度越低. 信息在 到 () 之间有两条传播通道: 累加 (式 (6) 的求和, 始终在) 和梯度算子 (只在 来自之前的块时才在). 不同的 GD 变体只改变梯度通道.
用前面的手算例子看 mini-batch 的代价. 取 , 两个 token 在同一块里, 梯度都相对 求: , . 块结束时 , 和线性注意力的结果一样, 查询得到 . 块内的 token 之间没有擦除, 只有块与块之间才有 delta rule 的覆盖. 越大, TTT 越接近线性注意力; (整条序列一块) 就是下一节的定理 1. dual form: 把外积换成矩阵乘. mini-batch 解决了并行, 没解决硬件利用率. 现代加速器的算力集中在矩阵乘单元 (A100 的 TensorCore 一次做 的矩阵乘), 而 mini-batch TTT 的每个 是一个 的外积, 个外积要一个个算, 每个都要写回显存, 内存 I/O 远大于 本身. 论文的观察是, 块内的 和中间的 都不需要显式生成, 只要算出块末的 和块内所有输出 . 以最简单的情况推导: , , 第一个块. 记 . 块末权重:
一次矩阵乘. 块内输出:
记 , . 交换求和顺序, 把 收成一个 Gram 矩阵:
mask 是上三角掩码, 被掩掉的位置填 0 (自注意力的因果掩码填 , 这里填 0). 于是 , 全是矩阵乘. 在式 (7) 和式 (9) 里共用. 两种形式输出相同, 代价不同. primal form (显式生成 和 ) 块内复杂度 ; dual form 算 是 , 算 另加 . 理论复杂度变高了, 换来的是硬件利用率. 代入 , : , , 额外开销约 6%. 论文的 JAX 实现里, 用 dual form 训练比 primal form 快 5 倍以上. 附录 A 说明 含非线性层时 dual form 同样成立. 推理时两种形式分工: prefill 和训练的前向一样可以并行, 用 dual form; decode 逐 token 生成, 本身就串行, 用 primal form.
1.2. 更新稳定性与外循环梯度手推
单个 key 上的收敛区间. 式 (5) 说明 TTT-Linear 在每个 token 上做一次最小二乘。若同一个单位范数 key 反复出现,目标 value 固定为 ,只看状态在 方向上的输出 ,更新可化成
令误差 ,得到
因此 ,也就是 时误差才收敛。 时一步写准; 时单调靠近; 时在目标两侧振荡但幅度衰减; 则发散。 取初始 、目标 。当 ,序列为 ;当 ,序列为 ;当 ,序列为 。三组都在优化同一平方误差,区别只来自更新谱半径。可学习学习率必须受到适当参数化约束,否则外循环可能为了短期训练损失选择过大的写入强度,让长序列状态在训练长度之外爆炸。 key 不归一化时,式 (11) 的系数变成 ,稳定条件为
这解释了内模型中的归一化为何不只是常规网络组件:它还控制 fast-weight 更新的有效步长。同一个 遇到范数为 1 和范数为 10 的 key,后者的安全上界小 100 倍。输入依赖的 可以降低异常 token 的写入强度,但门控本身由外循环学得,仍要在比训练更长的序列和异常激活上检查。 两个不正交 key 如何互相干扰. 状态写入容量不能只用矩阵元素个数判断。设两个单位 key 满足 ,先以 写入 ,再写入 。第一步后 。第二步使用 delta rule:
重新读取第一个 key:
当 正交时 ,第二次写入完全不影响第一条记忆;二者相似时,新残差会按 泄漏进旧查询。取 、,所以 ;令 、。第一步 ,于是 。第二步残差为 ,再读 得
旧 value 已明显改变。固定状态把相似 key 写进同一子空间, 干扰由此产生, 与优化器的偶然失误无关。学习 的作用之一,就是把以后需要分别取回的信息映射到较少冲突的方向;但 维空间最多容纳 个互相正交方向,序列无限增长后仍要压缩或覆盖。 外循环为什么包含二阶项. 用标量例子把“对梯度求梯度”算一遍。内模型为 ,内损失
其中 类似可学习的 key 投影。一步内更新为
外损失设为 。外循环对投影参数 的梯度经链式法则为
取 。内梯度为 ,所以 ;外残差为 ;,最终 。外循环会减小 ,因为它响应的是这次内更新造成的最终预测误差, 而非当前重建误差。 若在实现中对内梯度 stop_gradient,式 (16) 对 的通路会被切断, 无法学习“怎样构造一个有用的内任务”。一阶近似可以省显存和计算,却改变了可学习对象。完整 TTT layer 训练需要为内更新保留高阶自动微分所需的信息;序列越长、内模型越大,这部分激活与重计算就越昂贵。 mini-batch 近似到底丢了哪一项. 设一个块含两个样本,在线更新为
在 附近对第二个梯度做一阶展开:
其中 是第二个内损失对 的 Hessian。代回后
mini-batch TTT 在同一基点并行求两个梯度,只保留前两项,丢掉 。这项表达“第一个 token 改变状态以后,第二个 token 的梯度也随之改变”。步长小、块内曲率低或梯度相互作用弱时,省略项较小;块大以后,被省略的跨 token 高阶作用不断累积。因而 同时是硬件并行参数和学习算法近似精度参数,不能只按吞吐选择。
状态、参数与缓存的资源构成. 设 TTT-Linear 的状态矩阵 。每层每条独立序列需要 个状态元素;FP16 下是 字节。 时约 128 KiB, 时约 2 MiB。若批中有 32 条互不相干的序列,状态不能混用,单层分别约为 4 MiB 和 64 MiB。多层模型还要按 TTT 层数相乘。 TTT-MLP 若隐层为 ,两块主要权重分别为 与 ,fast-weight 状态约 ,比线性状态大八倍。它仍然对序列长度保持常数,却未必比短上下文 KV cache 小。以每层 attention 的 KV cache 为例,忽略 GQA 等细节,单序列长度 的两块缓存约有 个元素。令 ,TTT-Linear 与 KV 的元素数在 处相交;TTT-MLP 的 则在 才相交。固定状态的优势要到足够长上下文才兑现。
训练状态还包括慢参数、fast-weight 轨迹和外循环优化器。fast weights 是运行态,不代表无需存梯度。完整反向需要穿过每个块的更新;可以保存块边界状态并在反向时重算块内过程,以计算换显存。报告“状态大小 ”只描述在线前向持有的压缩状态,不能直接当作训练峰值显存。
服务端还面临状态归属。不同会话必须持有各自的 ;请求迁移到另一张 GPU 时,fast weights 与必要的优化器状态要一起搬运;会话被换出后,恢复点必须包含当前 token 位置、…12613 tokens truncated…带宽和失败率;生命周期层保证文档与用户边界完整复位.
主张写成可证伪条件. 「学会写入」要求打乱投影或停止元梯度会降;「使用长上下文」要求清空状态与删除关键写入会降;「优于线性 attention」要求等状态和计算下在预定任务占优;「可扩展」要求更长序列中状态与性能保持稳定.
公式编号、标题与 LaTeX 在发布前机械扫描,参考文献置于文末. 这些格式检查无法证明理论正确,却能阻止转义错误、重复编号和渲染缺失破坏推导. 原始实验状态与逐长度结果一起保存,使新 kernel 或硬件上能重新验证.
还可以从在线回归的遗憾界理解 fast weights. 对每步平方损失,在线梯度下降相对固定最优 的累积遗憾受梯度范数、可行域直径和学习率控制. 这类界说明更新不会无限落后于同一序列上的最佳固定线性映射,却没有保证 next-token 风险、精确检索或非平稳最优. 外循环学到的表示若让块内关系接近固定线性映射,理论条件才更贴近实际.
序列中的最优映射本身可能变化. 人物指代、主题和局部规则随章节切换,一份全局 会平均互相冲突的阶段. 门控衰减、分块重置或混合多个 fast model 可处理分段平稳性. 代价是需要识别切换与路由,错误分段会提前忘记仍有用信息.
多记忆槽可以把状态写成 ,由路由权重选择更新和读出. 它缓解冲突,也让状态随槽数增长. 与增加矩阵维度相比,槽路由提供离散分工;与 attention 相比,每槽仍压缩多个 token. 比较等总字节下的单大状态和多槽状态,才能判断路由价值.
快速权重也可能记住训练提示中的恶意指令. 单序列内 prompt injection 若修改状态,后文即使不再包含攻击文本仍受影响. 序列结束复位阻止跨会话传播,却不能保护同一长会话. 对不可信文档设置只读段、降低写门或隔离记忆槽,是生命周期内部的权限控制.
可构造「可信查询—不可信文档—可信查询」序列,测攻击段前后输出与状态差. 删除攻击写入、冻结不可信段和普通全写三组对照,判断影响是否经 fast weights 传播. 如果窗口 attention 已足以携带攻击,还要将查询距离拉出窗口,隔离长期状态通道.
信息删除同样困难. KV cache 可按位置删除一项,压缩进矩阵或 MLP 后,单个 token 的贡献与其他更新混合. 若应用要求撤回某段上下文,最可靠方式是从删除点前的状态快照重放后续合法 token. 保存快照增加内存,重放增加延迟,这是压缩状态的系统代价.
可逆更新在特定线性条件下可能近似撤销,但后续梯度在被污染状态上计算,简单减去原外积无法恢复真实轨迹. 因此状态 provenance 仍重要:每个快照对应哪个 token prefix、模型版本和更新配置. 删除语义不能只靠参数差.
生成时 beam search 或多分支采样也改变状态管理. 每个候选分支需要自己的 fast weights,复制完整 MLP 状态成本高;共享状态则让一个分支的 token 污染其他分支. 可采用 copy-on-write、低秩增量或在分支阶段冻结更新. 推理吞吐比较若只用 greedy decoding,漏掉这一实际开销. speculative decoding 中,草稿 token 可能被验证模型拒绝. 若 fast weights 已根据被拒 token 更新,必须回滚到接受 prefix 的状态. KV cache 有明确截断位置,优化器式状态需要保存中间快照或可重放更新. 这再次说明 fast state 不只是矩阵大小,还带有事务成本.
连续批处理服务把不同长度序列动态拼接,每个 batch 行对应不同 . 若用一个合并大矩阵计算,需要正确的 sequence mask 和状态 gather/scatter. 序列结束的槽位被新请求复用时必须初始化 ,任何遗漏都会跨用户泄漏. 随机压力测试频繁加入、结束和重排请求,能验证生命周期实现. 量化 fast weights 比量化慢参数更敏感. 慢参数离线校准一次,fast weights 分布随序列变化,尺度可能漂移. 固定量化范围会饱和,动态范围增加每步开销. 对不同长度记录饱和率、量化误差和检索,避免只在短 prefix 测精度. 低秩 fast weights 能降低状态和更新成本,设 . 更新因子比更新完整矩阵更受秩限制,且分解尺度不唯一. rank 决定可写方向,长序列可能更快饱和. 扫描 rank、状态字节和检索容量,与同字节完整小矩阵比较.
稀疏更新也是一种选择. 每个 token 只更新部分通道或专家,减少干扰和计算;路由失误会把相关信息分散或写错专家. 路由负载、专家碰撞与未命中率应和语言 loss 一起报告. 若专家数随上下文增长,固定状态优势会逐渐消失.
在多模态序列中,图像 patch、音频帧和文本 token 的数量与统计不同. 共用 fast state 时,高频模态可能占满容量;分模态状态又削弱跨模态绑定. 学习率门可按模态归一化,或为跨模态关系保留专门槽. 文本上的长度外推结论不能直接覆盖视频百万 token. 值的尺度也会影响写入. 平方误差梯度与 成正比,某模态或层的值范数大,会主导状态. 对键值做 LayerNorm、L2 归一化或学习尺度能平衡更新,也改变相似度与表达. 报告归一化位置是复现 delta rule 的必要条件.
残差通道可能绕开 fast state. 若输出为静态路径加 TTT 路径,训练初期外循环可能偏爱更容易优化的静态路径,让快速分支接近零. 增大 fast 分支、drop-path 静态通道或加状态利用辅助目标能迫使使用,但可能损害稳定. 因果清空实验最能判断是否发生绕行.
状态读出也可以多步迭代. 单次 只执行一次映射,多跳问题可能需要把读出结果再次查询状态. 增加迭代提升推理能力和延迟,也可能产生固定点或振荡. 与普通深层 MLP、recurrent depth 对齐计算,才能归因于记忆反复访问.
精确检索失败未必意味着状态毫无长程价值. 语言模型可通过压缩主题、实体频率、文体和局部规则降低 loss,这些统计无需逐 token 回看. 反过来,needle 成功也可能靠特殊键或训练模板,不能证明一般压缩质量. 多指标共同定义状态用途.
对于事实问答,可以把答案依赖分成局部复制、单跳键值、多跳组合和全局统计. fast weights 可能在全局统计与重复模式强,在随机单跳碰撞上弱. 每类单独报告随长度和负载的曲线,避免一个 RULER 平均隐藏能力形状.
状态容量的实验应固定写入次数与查询次数. 某些模型在每个写入后立即查询,容易;全部写完后随机查询早期项,更难;边写边查询又会让查询自身更新状态. 明确查询是否参与写入,防止测试过程改变被测记忆.
查询 token 若也执行重建更新,它可能覆盖即将读取的方向. 可以先读后写、对查询禁写或使用独立 query 投影. 三种语义需要与语言建模因果顺序一致. 合成检索中禁写常更干净,真实生成则每个 token 通常兼具读写角色. 多步内循环的计算图还会受到梯度 checkpointing. 为省显存重算前向时,dropout 或随机增强必须恢复 RNG,否则重算梯度对应另一条轨迹. 数值检查在 dropout 关闭和开启两种模式运行,验证重计算一致性. 优化器状态跨块延续会增加长程记忆,即使 在某些边界重置,动量仍可能携带过去. 生命周期清单必须包含全部 optimizer buffer. 做复位消融时分别清 、清动量和全清,找出实际信息载体.
如果每层学习率由外循环学成常数,它也会编码层的时间尺度. 大学习率层快速写快忘,小学习率层缓慢积累,可形成多尺度记忆. 分析各层有效半衰期与任务贡献,比把全部层统称 TTT 更有解释力. 输入依赖学习率进一步让时间尺度随内容变化. 罕见实体强写、普通词弱写是合理模式;模型也可能因频率偏差让低资源语言总是弱写. 按语言、token 类型和实体类别统计门值,检查容量分配公平性.
外循环数据分布决定写入策略. 在重复结构多的训练语料上学到的门控,面对代码、表格或数学证明可能失效. 留出整种文档类型做迁移测试,观察状态利用而非只看静态模型能力. 若需要按域重新训练外循环,所谓通用可学习记忆范围有限.
对代码任务,变量定义与调用形成精确绑定,适合检验覆盖和作用域. 在不同函数复用变量名、嵌套作用域与重新赋值,测试快速状态能否按上下文区分. 线性相似键更容易碰撞,MLP 或注意力混合可能改善. 数学证明需要保留假设并多步组合,平均 next-token loss可能偏爱局部模板. 将早期假设替换为矛盾版本,后续结论应改变;清空 fast state 后差异消失,才支持状态参与推理. 仅在原证明上续写流畅不足以证明长程使用.
最终的系统选择通常不是「attention 或 TTT」二选一. 给定显存、延迟和精度预算,可以分配局部 KV、稀疏全局 KV、SSM 状态和 TTT fast weights. 各组件解决不同记忆需求. 研究 TTT layer 的价值,是提供一种误差驱动、可学习且固定大小的写入机制,并清楚标出它付出的反向计算、近似并行和压缩干扰.
发布结论时,应将数学等价、经验优势和工程速度分成三层. 等价定理只在指定线性模型与优化规则成立;经验优势只覆盖数据、长度与指标;工程速度依赖 kernel 和硬件. 三层都成立的范围可能交集很小,逐层写清比一句「用训练替代注意力」更准确. 如果某个新 kernel 改变块大小、数值精度或 prefix 计算,它已经可能改变算法. 性能优化前后同时跑小规模状态逐步对齐、长程能力和吞吐,不能只验证终点 loss. 对 fast weights 而言,系统排布就是状态更新语义的一部分.
接受条件也应包含负收益边界. 在短上下文、精确检索、低延迟单 token 与多分支解码上,TTT 可能不如 attention 或简单递推. 明确这些场景能指导混合路由:短请求走静态路径,长文档启用 fast state,敏感检索保留显式 KV. 有选择地使用比强求单一架构覆盖全部任务更合理.
一个端到端手算可把内外循环连接起来. 假设标量快速权重 、键 、值 、学习率 ,内循环后 . 若外层希望 query 的输出接近目标 ,外损失为 . 对 的梯度是 ,对学习率的梯度是 . 外循环会同时移动初始化和写入速度,使一步更新后的状态更适合最终任务. 若 ,内循环精确重建值 2,外层目标 3 仍有误差;外循环可能让 或 偏离重建最优,以服务外层预测. 这说明内循环 loss 最低不一定是语言模型最优. 元学习允许「怎样学」服从最终任务,而非把重建当绝对目标.
多 token 时,外层对早期学习率的梯度要穿过后续所有更新. 早期 token 若为后面大量预测提供主题信息,外循环会提高其写门;若它随后被证明是噪声,梯度会降低写入. 截断 BPTT 后,超出截断范围的收益无法直接回传,学习率门可能偏爱短期信号.
可以构造延迟奖励实验:第一个 token 给随机键,答案只在远处查询,中间 token 与任务无关. 随着查询距离超过元梯度截断,写门是否仍学会保存该键,直接检验归纳偏置能否弥补信用范围. attention 有显式路径,TTT 依赖状态保持和训练分布. 对 dual form,还应检验 forward 等价与 backward 等价. 两种实现输出接近,不代表对慢参数的梯度也接近;mask、转置或广播错误可能只在外循环梯度暴露. 小块用 double precision 运行逐 token 与 dual,实现参数梯度、学习率梯度和 梯度逐项比较.
二阶梯度检查可以用有限差分. 对一个慢参数 加减小扰动,重跑完整内循环,比较外损失差分与自动微分. 状态维度很小时成本可控,能发现 stop-gradient、in-place 更新和 checkpoint 重算错误. 数值步长过小受浮点误差影响,使用多尺度扰动观察收敛. in-place 更新 fast weights 容易破坏自动微分需要的旧值. 为速度使用自定义 kernel 时,要证明反向保存或重算了正确状态. 推理只需 forward 的 kernel 与训练需 meta-gradient 的 kernel可能不同,分别验证. 论文报告训练速度时应说明是否包含完整二阶反向.
状态初始化还与 batch 中的序列对齐有关. 不同序列长度导致 padding,padding token 不能写入状态;序列结束后该行状态重置,新序列的第一个 token从 出发. mask 错一位会把 padding 或前一个用户尾部写入. 随机长度、频繁复用 batch 行的测试能暴露问题.
文档拼接训练常为提高利用率把多个文档接在固定长度块里. 如果只用 attention mask 阻止跨文档读取,却忘记重置 fast weights,后文仍可通过状态看到前文. 这既造成训练泄漏,也让模型学到部署时不存在的跨文档信号. 状态 reset mask 必须与文档边界同步. 反过来,某些应用希望跨段落保留状态. 这时边界由同一文档或会话决定,而不是固定训练 block. 将 block 边界当 reset 会丢失跨块记忆. 数据管线需要携带语义 sequence ID,不能仅凭张量切块决定生命周期.
checkpoint 恢复长生成时,保存 之外还要保存当前块起点、块内已处理位置、学习率/动量状态和窗口 KV. 若在块中部只保存块末近似状态,恢复后重复或跳过写入. 简化方案只允许块边界 checkpoint,恢复粒度与最大重算成本一并报告.
状态序列化的带宽可能超过生成 token 带宽. 对大量并发会话做迁移或休眠,保存大 MLP fast weights成本高. 低秩压缩、量化和只保存增量可降低空间,恢复后必须测行为差异. 系统是否能经济地持久化状态,决定「长上下文」能否跨服务调度维持.
状态缓存淘汰也有语义. KV cache 可按 token 位置裁剪,fast weights 已压缩整个前缀,无法只删最老一段. 固定状态看似解决缓存增长,却失去精确时间选择. 门控衰减提供软遗忘,不能保证删除指定内容. 对合规删除或可引用记忆,仍可能需要显式存储.
学习到的键空间可以用谱分析诊断. 收集长序列键的协方差,查看有效秩与头间冗余. 有效秩远低于维度时容量未充分利用;高秩但条件数极大时碰撞仍严重. 对比静态表示与外循环训练后的表示,判断 TTT 是否主动展开地址空间. 值空间同样重要. 如果多个不同 token 映射到相似值,状态无需精确区分;若相似键对应差异很大的值,冲突最大. 联合统计键相似度与值差,按象限报告写后查询误差,能比总体 loss 更直接验证 delta rule 的行为.
多头状态提供子空间分工. 不同 head 可学习语法、实体或局部模式,也可能全部重复. 逐头清空、交换和测有效秩,观察哪个能力下降. 若只有少数头承载长程记忆,可以缩减其他状态或为关键头提高精度. 模型规模扩大时,状态维度、层数和快参数比例可能同时增长. 性能随规模提升无法归因于哪一项. 固定慢参数规模扫描 fast state,固定 state 扫描 backbone,再做联合 scaling,才能估计容量瓶颈. 仅比较不同总参数的系列不够.
训练 token 也影响结论. 更复杂 TTT 模型可能需要更多数据学会稳定写入,固定训练 token下显得欠训;给更多 token 又增加预算. scaling 曲线应按训练 FLOPs和数据量对齐,展示交叉点. 系统声称的长序列推理节省可能被昂贵预训练抵消.
能耗与硬件利用不能只用峰值 FLOPs. 内循环反向增加内存访问、同步和临时激活,功率和时间共同决定能量. 在目标硬件测端到端 prefill、decode 与状态保存,才有部署意义. TPU、GPU 和专用加速器对小矩阵与反向支持不同,速度结论注明平台.
可证伪的最终结论应形如:在给定状态字节、窗口、块大小、训练预算与序列边界下,TTT 在指定长度的语言 loss 或记忆任务上超过基线,同时通过因果状态干预和数值实现检查. 去掉这些限定,「线性复杂度」「等价 attention」「学会长期记忆」都容易超出证据.
读者进入后续两篇时,可以继续沿四个量追踪:状态是什么、写入损失是什么、一次更新跨多少 token、外循环信用穿过多远. LaCT 主要改变第三项与系统排布,TTT-E2E 主要改变第二项和外循环位置,5.3 则用同一组量比较 attention、SSM、RWKV 与 Titans. 这样方法名字变化,分析坐标仍保持一致.
参考文献
- Sun, Y., Li, X., Dalal, K., Xu, J., Vikram, A., Zhang, G., Dubois, Y., Chen, X., Wang, X., Koyejo, S., Hashimoto, T., & Guestrin, C. (2024). Learning to (Learn at Test Time): RNNs with Expressive Hidden States. arXiv:2407.04620.
- Yang, S., Wang, B., Zhang, Y., Shen, Y., & Kim, Y. (2024). Parallelizing Linear Transformers with the Delta Rule over Sequence Length. NeurIPS 2024.
- Katharopoulos, A., Vyas, A., Pappas, N., & Fleuret, F. (2020). Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention. ICML 2020.
- Schlag, I., Irie, K., & Schmidhuber, J. (2021). Linear Transformers Are Secretly Fast Weight Programmers. ICML 2021.
- Hinton, G. E., & Plaut, D. C. (1987). Using Fast Weights to Deblur Old Memories. Proceedings of the 9th Annual Conference of the Cognitive Science Society.
- Ba, J., Hinton, G. E., Mnih, V., Leibo, J. Z., & Ionescu, C. (2016). Using Fast Weights to Attend to the Recent Past. NeurIPS 2016.
- Schmidhuber, J. (1992). Learning to Control Fast-Weight Memories: An Alternative to Dynamic Recurrent Networks. Neural Computation, 4(1).
- Gu, A., & Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces. arXiv:2312.00752.
- Peng, B., Alcaide, E., Anthony, Q., Albalak, A., Arcadinho, S., Biderman, S., et al. (2023). RWKV: Reinventing RNNs for the Transformer Era. arXiv:2305.13048.
- Behrouz, A., Zhong, P., & Mirrokni, V. (2025). Titans: Learning to Memorize at Test Time. arXiv:2501.00663.
- Krause, B., Kahembwe, E., Murray, I., & Renals, S. (2018). Dynamic Evaluation of Neural Sequence Models. ICML 2018.
- Kaplan, J., et al. (2020). Scaling Laws for Neural Language Models. arXiv:2001.08361.
- Gao, L., et al. (2020). The Pile: An 800GB Dataset of Diverse Text for Language Modeling. arXiv:2101.00027.
- Clark, K., Guu, K., Chang, M.-W., Pasupat, P., Hinton, G., & Norouzi, M. (2022). Meta-Learning Fast Weight Language Models. arXiv:2212.02475.