Deep Delta Learning 阅读笔记:怎样改写残差流,以及这次改写要付出什么代价

阅读日期: 2026 年 9 月 24 日
笔记作者: Zhongzhu Zhou
论文: Deep Delta Learning
论文作者: Yifan Zhang、Yifeng Liu、Mengdi Wang、Quanquan Gu
版本: arXiv:2601.00417v4,2026 年 7 月 27 日修订;最初发表于 2026 年 1 月 1 日。
本文依据完整 20 页 v4,包括附录 A—D。
资源: 论文全文 · 官方项目入口。

1. 先把问题说具体:往残差里“加东西”,和“换掉旧东西”有什么不同?

读这篇论文时,我最先想到的不是一个新的注意力算子,而是一个很普通的编辑动作:一个位置已经存着数值 4,现在希望它变成 1,应该加上 1,还是加上差额 1−4=−31-4=-3?如果我们知道旧值,后者直接完成替换;前者只会把结果变成 5。

普通残差块当然也能学会输出 −3-3。因此,DDL 的出发点不是“残差网络无法删除信息”,而是:能否把读旧值、生成目标值、计算差额这些职责,明确放进残差更新接口?这样,网络不必把整个替换行为都隐含在一个自由输出的分支里。

Deep Delta Learning 给出的接口很简洁:选择一个方向,沿着这个方向读取当前表示;生成希望看到的读数;用一个门控制,把读数和目标之间的差额写回。每次修正是一个秩至多为 1 的外积。这里的“秩 1”形容本次改动,不是说整个表示只剩下一维,也不是说整个模型只能表达低秩函数。

论文还加入了另一个设计:让残差流存得更宽,同时让昂贵的 Attention 和 MLP 继续在原来的模型宽度上计算。具体做法是给每个特征保留多个 value 通道,在进入子层前压缩,子层处理之后再改写完整状态。本文把这叫作“扩展残差状态”。它增加了存储容量,但没有把所有大矩阵都同步放大。

图 1:依据论文方法重新绘制的“压缩—处理—改写”流程。主干子层输出决定改写方向,归一化上下文生成目标值和门。

这两件事都值得研究,但需要分清证据。局部公式可以严格推导,训练收益需要实验;扩展模型的效果更好,也不代表收益全部来自“减掉旧读数”。系统代价同样不能省略:状态更大、压缩器要计算、读写会占用带宽。参数量几乎不变,不等于训练时间几乎不变。

我会沿着三个问题展开:第一,一次改写究竟改变了什么?第二,完整模型如何产生方向、目标和门?第三,实验中的质量提升值不值得它所付出的吞吐代价?文中的模型结果均来自论文。几何小例子和存储估算是帮助理解的计算;后面建议的实验没有在本次阅读中执行,也不冒充复现结果。

2. 必要的前置知识:残差状态、投影,以及“沿哪条轴递推”

2.1 残差流可以看成沿网络深度传递的一份工作状态

对于一个 token,普通残差向量写作 xl∈Rdx_l\in\mathbb{R}^d。预归一化子层通常先读一个归一化后的视图,再把分支输出加回原状态:

cl=RMSNorm⁡(xl),xl+1=xl+Fl(cl).c_l=\operatorname{RMSNorm}(x_l),\qquad x_{l+1}=x_l+F_l(c_l).

Attention 可以读取其他 token,MLP 则主要在当前 token 内变换特征;它们通过残差流把处理结果交给后面的子层。本文中的层索引 ll 指一次残差更新。一个 Transformer block 中的 Attention 和 MLP 可以对应两次这样的更新,不能在统计状态开销时随意混用“block”和“更新次数”。

“加法”并不意味着信息只能越积越多。分支可以给出负分量,也可以抵消旧值。DDL 真正改变的是接口所鼓励的计算方式:分支除了提供方向,还明确提供目标值,更新直接使用当前读数与目标之间的差额。这是一种归纳偏置,意思是架构偏向某种解题方式,而不是普通残差模型在数学上做不到同样的事。

2.2 单位方向就是一种无需显式换基的坐标

设 k∈Rdk\in\mathbb{R}^d 且 k⊤k=1k^\top k=1。沿 kk 方向读取 xx,得到标量 k⊤xk^\top x;这个方向在原向量中的分量是 k(k⊤x)k(k^\top x)。剩余部分满足

x⊥=x−k(k⊤x),k⊤x⊥=0.x_\perp=x-k(k^\top x),\qquad k^\top x_\perp=0.

矩阵 P=kk⊤P=kk^\top 是一个正交投影:P2=PP^2=P,并且 P⊤=PP^\top=P。它把一个向量投到 kk 张成的直线上。DDL 的局部几何几乎都建立在这个简单事实之上:如果改动只沿着 kk,那么与 kk 正交的部分,在这次更新里就不会改变。

扩展状态写成 X∈Rd×dvX\in\mathbb{R}^{d\times d_v}。可以把它理解为 dvd_v 个宽度为 dd 的列向量。此时 k⊤Xk^\top X 是有 dvd_v 个元素的行向量:同一个方向读取了多个 value 通道。它并不是为每个通道都生成一个独立方向,这一点会影响我们如何理解容量与秩。

2.3 DDL 沿深度更新,不是直接把注意力换成序列递归记忆

Delta rule 在序列记忆模型中已有历史:随着新 token 到来,模型修改一份记忆矩阵。DDL 借用了类似代数形式,但把更新轴放到网络深度上。一次子层处理之后,修改当前 token 的残差状态,再传给下一个子层。

两者看起来都在写矩阵,却对应不同的系统问题。DDL 论文的主干仍然使用普通注意力;扩展残差状态不会自动取代 Attention 的 KV cache。反而,如果压缩器沿 token 轴使用短卷积,解码时还要维护额外的短历史。

所以需要始终区分三类东西:沿深度传播的残差状态、解码时跨 token 保留的缓存,以及训练反传要保存的中间激活。把它们都叫成“记忆”虽然方便,却很容易得出错误的显存结论。

3. 从读数误差推导 delta 更新

3.1 四个量就能写出整个核心接口

暂时省略 token 和层索引。当前状态是 XX,单位方向是 kk,目标值向量是 v∈Rdvv\in\mathbb{R}^{d_v},标量门是 β\beta。论文的核心更新为

X+=X+βk(v⊤−k⊤X).(1)X^+=X+\beta k\left(v^\top-k^\top X\right). \tag{1}

先逐个检查形状。读数 r=k⊤Xr=k^\top X 的形状是 1×dv1\times d_v;差额 v⊤−rv^\top-r 仍然是行向量;左乘列向量 kk,就得到与状态相同形状的 d×dvd\times d_v 修正。这个外积的秩最多是 1。门 β\beta 同时控制擦除旧读数和写入新目标的力度。

把括号展开,得到更适合分析 shortcut 的形式:

X+=(I−βkk⊤)⏟AX+βkv⊤.(2)X^+=\underbrace{(I-\beta kk^\top)}_{A}X+\beta kv^\top. \tag{2}

这里最容易漏掉的一点是,擦除项和写入项共享同一个门。它们不是两个可以随意缩放的操作。这个绑定使得目标匹配具有一个很干净的恒等式。

3.2 为什么门等于 1 时,选中的读数会被替换?

在式(1)两侧左乘 k⊤k^\top:

k⊤X+=k⊤X+β(k⊤k)(v⊤−k⊤X)=(1−β)k⊤X+βv⊤.(3)\begin{aligned} k^\top X^+ &=k^\top X+\beta(k^\top k)(v^\top-k^\top X)\\ &=(1-\beta)k^\top X+\beta v^\top. \end{aligned} \tag{3}

第二行使用了单位范数假设。定义更新前的误差 e=k⊤X−v⊤e=k^\top X-v^\top,再减去目标值,就有

e+=(1−β)e.(4)e^+=(1-\beta)e. \tag{4}

因此,β=0\beta=0 时什么也不改;β=1\beta=1 时当前读数被精确改成目标;0<β<10<\beta<1 时只走一部分距离;1<β<21<\beta<2 时越过目标,但离目标仍比原来近。这最后一种是过松弛更新,越过目标并不等于误差一定变大。

如果擦除使用门 aa,写入使用另一个门 bb,读数就变成 (1−a)r+bv⊤(1-a)r+bv^\top。即便设 a=1a=1,也只得到 bv⊤bv^\top;要等于目标,一般还需要 b=1b=1。共享门编码的是一个具体不变量,不只是少用几个参数。

“精确替换”也有明确边界:只替换当前方向上的读数,方向和目标是在这次计算中生成的。它不是把整个向量换成 vv,也不是保证下一层选择的方向会读到同样的语义。后文还会看到,实际带数值保护的归一化会让单位范数条件略有偏离。

3.3 一个局部二次目标能解释门的范围

固定 kk 和 vv,考虑辅助函数

E(X)=12∥k⊤X−v⊤∥22.E(X)=\frac12\|k^\top X-v^\top\|_2^2.

它对状态的梯度为 ∇XE=k(k⊤X−v⊤)\nabla_XE=k(k^\top X-v^\top)。沿负梯度走一步、步长为 β\beta,恰好得到式(1)。由于投影矩阵的非零特征值是 1,步长在 (0,2)(0,2) 内会缩小选中坐标上的误差。

这是对局部更新的解释,不是模型另加了一个逐层重建损失。实际训练仍优化语言模型目标,kk、vv 都会随着输入和参数改变。把这个局部二次函数误认成训练目标,会把一条清楚的代数事实夸大成优化收敛结论。

4. 几何直觉:保留、替换与反射

4.1 shortcut 只有一个方向的特征值被改变

固定 kk 和 β\beta,考虑 A=I−βkk⊤A=I-\beta kk^\top。对任意与 kk 正交的向量 uu,都有 Au=uAu=u;而沿着 kk 本身,

Ak=k−βk(k⊤k)=(1−β)k.Ak=k-\beta k(k^\top k)=(1-\beta)k.

所以特征值为:正交子空间上的 1,以及选中方向上的 1−β1-\beta。当 β=0\beta=0,这些特征值全部退化为 1,不再有一个数值不同的特殊特征空间。扩展状态只是把这个操作应用到多个 value 列;不会因此凭空产生多个独立的 shortcut 谱。

图 2:固定方向和门时的特征值,以及选中读数误差的缩放系数。图中的端点是数学极限,有限 sigmoid 输出通常位于开区间内。

在 β=1\beta=1 时,AA 会投影掉旧的 kk 分量,再由单独的写入项补上目标值。直接把完整 DDL 块叫成“正交投影”并不准确,因为还存在写入项,而且方向、目标和门本身依赖输入。

在 β=2\beta=2 时,shortcut 是 Householder 反射。完整的条件更新则是

X+=X−2k(k⊤X−v⊤).X^+=X-2k(k^\top X-v^\top).

如果固定 kk 和 vv,它可以逐列理解为关于目标超平面的仿射反射。目标不为零时,反射平面不经过原点,所以不能说整个向量相对原点的范数一定保持不变。

4.2 一个二维例子,比术语更直观

令 x=(4,2)x=(4,2),k=(1,0)k=(1,0),目标为 1。第二个坐标与方向正交,始终保持 2;第一个坐标根据门变化:β=0\beta=0 得到 4,0.50.5 得到 2.5,11 得到 1,1.51.5 得到 −0.5-0.5,22 得到 −2-2。

最后一个值看起来离原点更远或更近都不重要;正确的参照是目标 1。原值 4 与目标相差 3,反射后的 −2-2 与目标也相差 3,只是到了另一侧。β=1.5\beta=1.5 时距离变成 1.5,虽然越过目标,误差仍然减半。

图 3:原始二维示意,展示不同门如何移动第一个坐标。数值来自上述算式,不是模型测量。

论文使用 β=2σ(g(c))\beta=2\sigma(g(c))。有限 logit 将门限制在 (0,2)(0,2) 内,0 和 2 是极限。门靠近零时近似跳过更新,但 sigmoid 对 logit 的导数也会变小;门在 1 附近时敏感度最大。这是参数化的性质,不能据此宣称训练好的模型已经形成了人能直接解释的“跳过层”“覆盖层”或“反射层”。

局部动作清楚,并不保证动作有用。如果方向选错,模型会准确地改错地方;如果目标不对,即便把读数精确匹配到目标,也未必改善下一个 token 的预测。几何提供的是操作解释,语义价值仍需要证据。

5. 稳定性要讲清楚:局部 shortcut 不等于完整 Jacobian

5.1 “不放大”不是“所有方向都收缩”

当 d>1d>1 且 0≤β≤20\leq\beta\leq2,固定方向与门的矩阵满足

∥A∥2=max⁡{1,∣1−β∣}=1.\|A\|_2=\max\{1,|1-\beta|\}=1.

选中方向上的误差可以变小,但正交部分被原样保留,因此整个线性映射并不是严格收缩。连续乘上多个满足条件的固定 shortcut,其直达路径不会放大范数;不过具体缩小哪些方向,取决于这些方向随深度如何排列。这些结论都限定在“固定生成量之后”的路径上。

完整模型里,方向、门、目标都由输入计算得来。设写入差额 w=v⊤−k⊤Xw=v^\top-k^\top X,对式(1)求微分,逐项展开:

dX+=(I−βkk⊤)dX+(dβ)kw+β(dk)w+βk dv⊤−βk(dk)⊤X.(5)\begin{aligned} dX^+={}&(I-\beta kk^\top)dX\\ &+(d\beta)kw+\beta(dk)w\\ &+\beta k\,dv^\top-\beta k(dk)^\top X. \end{aligned} \tag{5}

第一行才是我们刚才分析的 shortcut。后面还有经过门、方向、目标的导数路径;它们不会因为 AA 的特征值好看就自动消失。如果 Attention 读取其他 token,完整序列 Jacobian 还会出现 token 间耦合。

所以我不会把这个局部谱结论转述成“DDL 保证梯度不爆炸”或“整个网络的 Lipschitz 常数不超过 1”。更准确的说法是:它对一条直接状态路径施加了可描述的结构,而完整优化性质仍取决于生成分支和层间组合。

5.2 正交保留只针对本次方向

设后面某处希望沿另一个方向 qq 读取状态。本次更新给这个读数带来的变化是

q⊤X+−q⊤X=β(q⊤k)w.(6)q^\top X^+-q^\top X=\beta(q^\top k)w. \tag{6}

当 qq 与 kk 正交,变化为零;如果两者相关,后续读数就会受影响。这让“不会干扰其他信息”的说法有了非常明确的限定:本次更新保留当前正交子空间,并不保证所有未来语义方向都与它正交。

这一点反而打开了一个好问题:模型学到的是彼此尽量不干扰的方向,还是一串会相互覆盖的修正?单个更新可解释,不代表整个深度过程天然可解释。测量方向相关性与后续任务损失的关系,比直接给每个方向贴语义标签更有价值。

5.3 数值保护会让“严格单位向量”变成近似

附录 A 给出的方向归一化带有安全项,可写成

k=h∥h∥22+ϵk2.k=\frac{h}{\sqrt{\|h\|_2^2+\epsilon_k^2}}.

令 ρ=∥k∥22\rho=\|k\|_2^2。当安全项非零时,ρ<1\rho<1;只有在 ∥h∥\|h\| 远大于 ϵk\epsilon_k 的区域,它才非常接近 1。不再直接代入单位范数,读数推导就变为

r+=r+βρ(v⊤−r),r+−v⊤=(1−βρ)(r−v⊤).(7)\begin{aligned} r^+&=r+\beta\rho(v^\top-r),\\ r^+-v^\top&=(1-\beta\rho)(r-v^\top). \end{aligned} \tag{7}

因此,门等于 1 时精确匹配目标,是理想单位方向下的恒等式。实际带保护的操作,在通常区域近似满足;如果 h=0h=0,方向就是零,这次改写也会消失。安全项避免除零,但不会凭空产生一个有意义的方向。

还可以继续看归一化自身的敏感度。设 s=∥h∥2+ϵk2s=\sqrt{\|h\|^2+\epsilon_k^2},则

Dhk=Is−hh⊤s3,∥Dhk∥2≤1s≤1ϵk.D_hk=\frac{I}{s}-\frac{hh^\top}{s^3},\qquad \|D_hk\|_2\leq\frac1s\leq\frac1{\epsilon_k}.

这个上界说明安全项把奇点截住了,却不代表导数一定很小。主干输出接近零时,方向可能对扰动比较敏感。把数值保护、直接路径的谱性质和完整网络稳定性分成三层来看,才不会把一种保护措施误说成全面保证。

6. 完整模型怎么搭:方向、目标、门与压缩器

6.1 昂贵主干决定方向,小分支决定目标

DDL 先从完整状态压缩出普通宽度的输入,再归一化:

xin=C(X),c=RMSNorm⁡(xin),h=F(c),v=Wvc.x_{\mathrm{in}}=C(X),\quad c=\operatorname{RMSNorm}(x_{\mathrm{in}}),\quad h=F(c),\quad v=W_vc.

FF 就是原本的 Attention 或 MLP 分支。它输出的 hh 被归一化为方向 kk,而不是另加一个独立大网络来预测方向。目标分支把上下文映射为 dvd_v 个值。门分支产生一个标量,再经过 β=2σ(gβ(c))\beta=2\sigma(g_\beta(c));论文允许线性门,或带 tanh 隐层的小型两层门。

这种职责分配值得注意:高维子层负责“往哪个方向改”,小投影负责“那个方向上应该读到什么”。归一化去掉了 hh 的整体幅度,改动大小由门和读数差额重新决定。普通残差里,F(c)F(c) 的模长直接决定加回去多少;DDL 改变了这个关系。

因此,即便标量 DDL 不扩展状态,它与普通残差之间也不只是差一个擦除项。方向归一化、目标生成、门的参数化都改变了分支行为。这是后面需要严格对照实验的原因。

附录描述了用 logit⁡(β0/2)\operatorname{logit}(\beta_0/2) 初始化门输出偏置,并对数值做截断保护;门 logit 使用 float32。本文不填入论文未明确给出的默认 β0\beta_0 数值。初始化靠近零时接近恒等映射,但可能让门较难移动;靠近 1 时更强调改写。这些都应在相同初始化规则下比较。

6.2 算法 1:一次 DDL 残差更新

输入: 状态 X∈Rd×dvX\in\mathbb{R}^{d\times d_v}、压缩器 CC、主干子层 FF、目标投影 WvW_v、门网络 gβg_\beta、正数 ϵk\epsilon_k。

  1. 压缩视图: 计算 xin←C(X)x_{\mathrm{in}}\leftarrow C(X);若涉及 token 历史,只读取因果上允许的位置。
  2. 上下文归一化: 计算 c←RMSNorm⁡(xin)c\leftarrow\operatorname{RMSNorm}(x_{\mathrm{in}})。
  3. 主干处理: 计算 h←F(c)h\leftarrow F(c);Attention 仍使用正常的因果注意力机制。
  4. 方向生成: 计算 k←h/∥h∥22+ϵk2k\leftarrow h/\sqrt{\|h\|_2^2+\epsilon_k^2}。
  5. 目标与门: 计算 v←Wvcv\leftarrow W_vc 和 β←2σ(gβ(c))\beta\leftarrow2\sigma(g_\beta(c))。
  6. 读取旧值: 计算 r←k⊤Xr\leftarrow k^\top X。
  7. 计算差额: 计算 w←v⊤−rw\leftarrow v^\top-r。
  8. 写回修正: 输出 X+←X+βkwX^+\leftarrow X+\beta kw。

这段编号步骤描述数学流程,不指定 GPU kernel 如何安排。读取、计算差额和写回可以融合,以减少中间张量和带宽流量。尤其要记住,压缩器只是给子层提供一个视图;最终改写仍发生在完整的扩展状态上。如果每层把状态永久压回 dd 维,再丢掉其余信息,那就变成另一种架构了。

6.3 CC:在当前 token 内混合 value 通道

扩展实验使用 dv=4d_v=4。Channel Compressor,简称 CC,对每个特征分别混合 value 通道:

(xin,t)i=∑j=1dvai,jXt,i,j.(8)(x_{\mathrm{in},t})_i=\sum_{j=1}^{d_v}a_{i,j}X_{t,i,j}. \tag{8}

它是一种可学习的线性压缩,使 Attention 和 MLP 仍然接收宽度 dd 的输入。这个压缩动作只用当前 token,不需要为每个子层保留 TC 那样的跨 token 历史。通道混合本身并不是论文声称的新发明,它是扩展状态接口的一种实现选择。

优点是路径直接,额外状态管理相对简单;代价是多个 value 通道先被压成一个视图,昂贵主干不能在同一次调用中独立处理每个通道。所谓“存储更宽、计算宽度不变”,正是依靠这种限制换来的。

6.4 TC:先读取局部 token 历史,再混合通道

Token Compressor,简称 TC,先在 token 轴上做逐特征的因果短卷积,再投影 value 通道:

X~t,i,j=∑s=0K−1ai,j,sXt−s,i,j,(xin,t)i=∑jpjX~t,i,j.(9)\begin{aligned} \widetilde X_{t,i,j}&=\sum_{s=0}^{K-1}a_{i,j,s}X_{t-s,i,j},\\ (x_{\mathrm{in},t})_i&=\sum_j p_j\widetilde X_{t,i,j}. \end{aligned} \tag{9}

序列开头用因果填充处理;通道投影的默认初值为均匀权重 1/dv1/d_v。它让子层在正式 Attention 之前就看到局部时间上下文,因此改变的不只是执行速度,还包括模型可利用的信息路径。

解码时,TC 需要保留最近 K−1K-1 个扩展 token 状态。训练时,卷积可能并行处理整段序列;逐 token 解码时却要维护历史。两种模式的瓶颈不同,不能只看训练吞吐就推断在线服务成本。

图 4:CC、TC 与单独的 embedding expansion convolution 对比。CC 混合当前 token 的 value 通道,TC 还读取局部 token 历史。

6.5 EC 是入口处的扩展,不是每层压缩器的别名

Embedding expansion convolution,简称 EC,在输入端把宽度 dd 的 embedding 流,通过 depthwise 因果短卷积扩成 d dvd\,d_v 个通道,再整理成扩展状态。论文描述的恒等初始化,最初行为近似把 embedding 复制到多个通道。

不使用 EC 的版本,直接重复原 embedding。因此,“without EC”并没有取消四通道状态,只是取消了输入处这种可学习的扩展方式。CC 与 TC 则发生在后续子层入口。它们的职责和位置不同,不能看见一个 EC 消融就认为扩展容量也被移除了。

同样,CC 不需要 TC 的逐层历史,不代表整个 CC+EC 模型完全没有短卷积历史;入口 EC 仍可能需要自己的缓存。系统描述越具体,越不容易在部署时漏算一个持久张量。

7. 四倍状态为什么没有变成四倍整机显存?

7.1 先只算一份状态,再讨论峰值

批大小为 BB、序列长度为 TT、每元素 ss 字节时,一份展开残差状态的原始存储量是

Mstate=BTddvs.(10)M_{\mathrm{state}}=BTdd_vs. \tag{10}

用一个纯示意例子:B=1B=1、T=1024T=1024、d=1024d=1024、dv=4d_v=4,每元素两字节,得到 8 MiB;不扩展时为 2 MiB。这确实是四倍,但只计算了一份活跃残差状态。它不是整次训练的峰值显存,也不能直接乘到论文给出的 GB 数字上。

整机峰值还包含参数、梯度、优化器状态、其他反传激活、Attention 中间量,以及具体执行时哪些张量同时存活。只要被扩展的部分不是全部,某个张量四倍就不意味着总量四倍。反过来,总峰值只增加几个百分点,也不代表扩展状态可以不占带宽。

7.2 算术少,不代表硬件代价可忽略

读数和秩 1 写回,每个 token 都是 O(ddv)O(dd_v) 量级;CC 也是这个量级,直接的 TC 则是 O(Kddv)O(Kdd_v)。Attention 和 MLP 的输入宽度保持 dd,大权重矩阵不会全部随 dvd_v 扩大。

计算时也没有必要构造 d×dd\times d 的 kk⊤kk^\top。先得到长度 dvd_v 的读数,再做外积写回就足够。如果显式生成完整投影矩阵,会把一个便宜的低秩表达变成昂贵的稠密操作。

不过,这些操作常涉及归约、逐元素运算、读写和额外调度,可能受带宽而非矩阵乘算力限制。论文报告了包含优化 kernel 的配置,包括 CC 与启用 EC 的路径。这里依据论文记录分析测量,不把公式里的低复杂度直接等同于任意硬件上的低延迟。

7.3 解码缓存还要单独算

若 TC 卷积长度为 KK,每次更新所需历史大致为

MTC history=B(K−1)ddvs.M_{\mathrm{TC\ history}}=B(K-1)dd_vs.

举例设 B=1B=1、K=3K=3、d=1024d=1024、dv=4d_v=4、两字节存储,一次更新的历史就是 16 KiB。这个 KK 只是示意选择,不代表论文默认设置。实际估算还要乘上相关更新次数、批大小,并加入 KV cache、EC 历史和实际缓冲布局。

对于已经被 KV cache 限制的服务场景,扩展残差表达可能改善质量,却不会自动缓解注意力缓存压力。对小批次解码,额外读写也可能比训练时更显眼。训练速度、推理速度和峰值显存因此必须分别报告,单靠参数量无法概括这项设计。

8. 实验到底比较了什么?先看训练协议,再看 loss

8.1 两个规模、相同 token 数、每种配置一次训练

论文在 FineWeb-Edu 上训练约 124M 和 353M 参数的 Llama 风格模型。小模型是 12 层、宽度 768、6 个注意力头;中模型是 24 层、宽度 1024、8 个头,两者 head dimension 都是 128。主干使用 RoPE、SwiGLU 和 Q/K normalization。小模型成本表把参数量写成 123M,是同一组比较中的近似表述,不是额外增加了一个规模。

每个配置训练 100,000 步,全局 batch 为 480 条序列,序列长度 1024。因此每步处理 491,520 个 token,总量为

100000×480×1024=49.152×109.100000\times480\times1024=49.152\times10^9.

每次训练使用 4 张 NVIDIA H200。共同配方包括学习率 10−310^{-3}、cosine 衰减、2,000 步 warmup、AdamW 权重衰减 0.1、动量系数 (0.9,0.95)(0.9,0.95)、梯度裁剪 1.0、dropout 为零。普通主干偏置关闭,DDL 门保留初始化输出偏置;各方法采用相同的 μ\muP 风格参数化。

这个设计控制了数据量和主要训练配方,但没有为每种架构穷尽超参数搜索。更重要的是,每个配置只报告一次训练。后面所有排名都只是这些运行的点估计,没有种子方差或置信区间。我们可以说某次运行更好,不能仅凭表格就说重复训练时一定稳定胜出。

8.2 标量版本有小幅改善,扩展版本的改善更大

下面直接列出论文表 3 的最终验证 loss,数值越低越好。

配置小模型 loss中模型 loss
Baseline2.85432.6053
标量 DDL2.84822.6039
TC,无 EC2.83552.5927
CC,无 EC2.83212.5790
TC2.82992.5905
CC2.83292.5758

图 5:相对同规模 baseline 的验证 loss 降幅,由论文表 3 重绘。正值表示改善;每个值对应单次训练,不带跨种子误差条。

标量 DDL 在小规模下降低 0.0061,在中规模下降低 0.0014。符号一致值得继续研究,但中规模差值尤其小。没有重复种子,我们不知道它与训练随机性的量级相比如何。把这两行直接写成“验证了 delta 改写稳定有效”,证据就走得太远了。

扩展状态的差异更明显。小模型最优是 TC,loss 下降 0.0244;中模型最优是 CC,下降 0.0295。相应的论文困惑度为:小模型 16.9438 对 17.3616,中模型 13.1420 对 13.5356。

困惑度是平均负对数似然的指数变换,并不是另一套独立实验证据。以 ΔL=0.0295\Delta L=0.0295 为例,困惑度比例约为 e−0.0295≈0.971e^{-0.0295}\approx0.971,也就是相对降低约 2.9%。这不能翻译成“下游正确率提高 2.9%”,因为两个指标衡量的东西不同。

8.3 EC 消融支持的结论比“有卷积就更好”窄

小模型 CC 不带 EC 时,loss 为 2.8321,反而略低于带 EC 的 2.8329;中模型 CC 带 EC 则从 2.5790 改善到 2.5758。TC 在两个规模上都出现了带 EC 更好的点估计。

因此可以说 EC 在若干配置里有帮助,但不能说所有版本都因 EC 而改善。更不能从“不带 EC 也有收益”推导出“收益一定来自擦除项”:不带 EC 的模型仍然拥有扩展状态、压缩器、归一化方向、目标和门。

这组表格最稳妥的读法是:扩展 DDL 这套组合在等 token 运行中展现了较好的 loss;各组件到底贡献多少,仍需进一步拆开。作者在 v4 的证据边界部分也明确承认了这一点。

9. 下游评测:平均值改善,并不代表每项都改善

论文用 lm-evaluation-harness 评测八列任务:ARC-C、ARC-E、HellaSwag、OpenBookQA、PIQA、SciQ、Social IQA 和 WinoGrande。正文表 1、2 是 one-shot,附录 D 是 zero-shot。两种设置应分开看,不能只挑更好看的一组作为整体结论。

配置小模型 1-shot小模型 0-shot中模型 1-shot中模型 0-shot
Baseline48.5647.3053.9651.92
标量 DDL48.7347.3254.6951.94
TC,无 EC48.9147.5454.8352.22
CC,无 EC49.1347.0754.9252.88
TC49.4747.8354.8652.87
CC49.2947.1855.1452.85

图 6:one-shot 与 zero-shot 平均准确率相对 baseline 的变化,单位是百分点。来源为正文表 1、2 及附录 D;两种提示设置不是置信区间。

小模型 CC 的 one-shot 从 48.56 升到 49.29,增加 0.73 个百分点;但 zero-shot 从 47.30 降到 47.18,减少 0.12 个百分点。小模型 TC 的 one-shot 为 49.47,是这一规模最高;zero-shot 也比 baseline 高 0.53 个百分点。最好的 loss 行与作者默认的效率折中行,并不总是一回事。

中模型 CC 的 one-shot 平均值达到 55.14,比 baseline 高 1.18 个百分点,但逐项结果仍有回退。ARC-E 从 67.05 降到 65.57,PIQA 从 70.24 降到 69.48;与此同时,OpenBookQA 从 33.20 升到 36.00,SciQ 从 87.30 升到 90.50,WinoGrande 从 52.57 升到 55.72。平均提升正是由这些不同方向的变化合成的。

八列宏平均给每列相同权重,其中 ARC 的两个子集分别占一列。这是一种报告约定,不是任何实际产品的效用函数。如果应用更接近发生回退的任务,平均分的优势未必重要;如果更接近提升明显的任务,也不能跳过领域内验证直接采用结论。

还要区分训练随机性、任务样本误差和提示敏感性。本文没有足够重复运行来量化这些因素,但 one-shot 与 zero-shot 的差异已经提醒我们:不要把一个正的宏平均改写成“通用推理能力全面增强”。合理的下一步是找出值得复验的配置与最脆弱的结果,再做匹配应用场景的评测。

10. 系统视角:吞吐下降要换算成时间,显存要说明分母

10.1 默认 CC 是一种质量与效率折中

论文表 4、5 在相同软硬件栈下报告吞吐和峰值显存,并说明 CC 与启用 EC 的配置使用了优化 Triton kernel。这些是特定环境中的测量,不是总预训练 GPU 小时,也不是具有服务延迟约束的线上压测。表中的吞吐单位是千 token 每秒。

配置训练 Ktok/s推理 Ktok/s峰值显存
小模型 Baseline1509.61826.12.94 GB
小模型 CC1158.01220.73.08 GB
中模型 Baseline537.1531.57.06 GB
中模型 CC422.3400.57.20 GB

图 7:各版本吞吐除以同规模 baseline 的吞吐,由论文表 4、5 重绘。中模型标量 DDL 的成本未报告,图中保留缺失标记,没有用零或估计值补齐。

小模型 CC 保留约 76.7% 的训练吞吐和 66.8% 的推理吞吐;中模型 CC 保留约 78.6% 和 75.4%。所以,这不是一种在当前数据下“几乎没有额外成本”的增强。推理与训练受到的影响也不同,说明单一速度标签不足以描述它。

小模型标量 DDL 即便没有扩展状态,训练吞吐也从 1509.6 降到 1330.8 Ktok/s,而表里的参数量和峰值显存近似不变。新增归约、门、归一化和逐元素操作,即使没有让参数表变大,也可能让时间表变差。中模型成本表缺少标量 DDL,不能拿小模型比例机械外推并当成实测。

带 EC 的 TC 更贵:小模型训练吞吐为 783.5 Ktok/s,中模型为 282.9 Ktok/s,大约只剩对应 baseline 的 51.9% 和 52.7%。小模型最好的验证 loss 因而伴随着明显速度损失。作者选 CC 为默认版本,是综合质量与效率的判断,并非 CC 在每个质量指标上都第一。

10.2 吞吐少 23%,不等于固定工作量只多花 23% 时间

固定 token 数时,时间与吞吐成反比。以小模型 CC 为例,吞吐比为 1158/1509.6≈0.7671158/1509.6\approx0.767,理想化时间比则为

tCCtbase=1509.61158≈1.304.\frac{t_{\mathrm{CC}}}{t_{\mathrm{base}}} =\frac{1509.6}{1158}\approx1.304.

也就是说,假设测得速率可持续且其他开销相同,同样 token 数约多花 30.4% 时间。中模型对应约多花 27.2%。这里计算的是速率倒数,不是论文新增的端到端训练时间测量。

这个区别在讨论系统论文时很实用。“吞吐下降多少”和“完成任务慢多少”各自有不同分母,混用会系统性低估代价。进一步还要考虑通信、checkpoint、数据加载和调度开销,所以不应该用这个理想值替代真实 GPU 小时。

10.3 为什么启用 EC 的某些行反而更省内存、更快?

图 8:论文实测峰值显存及其相对 baseline 的比例。它们是完整测量配置的峰值,不是残差张量本身的大小。

小模型 CC 的峰值从 2.94 GB 变成 3.08 GB,增加约 4.8%;中模型从 7.06 GB 变成 7.20 GB,增加约 2.0%。这与前面的四倍原始状态并不矛盾,因为峰值的组成与存活时间不同。

更有意思的是,小模型 CC 不带 EC 时报告 3.47 GB、1019.8 Ktok/s;带 EC 时反而是 3.08 GB、1158.0 Ktok/s。不能据此说“多加一个卷积在数学上会自动减少计算”。这些行对应完整执行配置,论文又明确提到了不同优化路径。正确结论是某个组合在测得系统里更快、更省峰值,而不是把改善全部归因于组件本身的算术性质。

若要解释原因,需要把架构差异、融合策略、中间张量和实际工作负载分开设计实验。当前论文提供了操作上有用的结果,却没有让我们能从一个表格反推出唯一的底层瓶颈。

10.4 等时间预算会改变比较的问题

设 qq 为 DDL 与 baseline 的训练吞吐比。如果两者在完整训练中都保持表中速率、其他开销也相同,那么 baseline 处理 NN 个 token 的时间里,DDL 只能处理 qNqN 个。

取 N=49.152N=49.152B,CC 小模型约能处理 37.70B,中模型约 38.65B。这个计算只是预算示意,并不是这两个 token 数下的额外训练结果。我们没有资格据此填入一个新的最终 loss。

还不能把 100,000 步 cosine 训练直接截断,再称为公平的短预算运行。提前停止一个长计划,与为较短预算完整设计学习率衰减,回答的是不同问题。等时间实验应比较完整计划,并记录实际时间;等 FLOPs 实验应另外明确前向、反向和其他计算的计数约定。

同样,不建议把 loss 降幅乘以吞吐比,造出一个含义模糊的“综合效率分”。我们真正关心的是给定预算下能达到什么质量,以及达到某个质量需要多少预算。画出 loss 对累计时间、累计 FLOPs 的曲线,会比一个随意相乘的分数更容易解释。

对在线服务,还需要明确 batch、上下文长度、生成长度和延迟要求。论文的推理吞吐是有价值的起点,但并不直接告诉我们面向某种用户流量时的成本。DDL 目前展示的是可测量的质量—成本交换,而不是已经证明的更便宜预训练或更快服务。

11. 局限与失败边界

先说明一件公平阅读很重要的事:v4 已明确写出单种子、归因不充分、没有等 FLOPs 或等时间比较,以及可解释性只到局部算子这一层。下面不是把作者已经承认的限制包装成“发现了隐藏漏洞”,而是用这些限制约束我们能从结果中得出什么。

第一,标量改写的收益尚未与随机波动区分。 两个规模的 loss 点差方向一致,但幅度较小,尤其是中模型的 0.0014。重复种子最值得优先补在这里,因为标量版本更接近“不扩展存储,只改残差接口”的问题。

第二,扩展模型同时改变了多个因素。 四个 value 通道、压缩器、方向/目标/门分支,以及通常启用的 EC 一起进入模型。无 EC 消融只隔离了入口扩展方式,没有隔离读取并擦除旧值的作用。现有结果支持这套组合,不支持把全部收益分给其中一个项。

第三,规模和序列长度的外推尚无测量。 论文覆盖约 124M、353M 参数,以及 1024 token 的预训练长度。多十亿参数、长上下文、指令微调后的行为和真实服务延迟,都不能仅凭当前趋势当作已经成立。

第四,局部编辑可能精确但无用。 错的方向、错的目标或饱和的门,都可能让动作与任务需求脱节。方向归一化的安全项还有特殊数值区域;完整网络也包含超出 frozen shortcut 的梯度路径。因此操作透明不等于语义可解释,更不等于全局稳定性保证。

第五,质量比较和资源比较尚未完全对齐。 等 token 的训练结果与硬件吞吐点测量可以说明代价,却不能给出等总算力的胜负。中模型标量成本缺失,也使得最简单变体的资源比较不完整。换硬件、换 batch 或换序列长度,都可能改变相对位置。

第六,新意需要放在正确位置。 Delta rule 本身并非新出现,通道混合也不是新概念。值得关注的是把 delta 形式放到网络深度方向的残差接口,并与扩展状态结合。清楚区分已有机制与新的组合方式,反而更容易理解这篇论文真正提出的问题。

12. 独立批判性分析:下一步怎样把有趣想法变成更强证据?

12.1 最有判别力的对照,是保留其余结构的 write-only 模型

作者也提出了 write-only 对照,我认为这应当是优先级最高的后续实验。保持 dvd_v、EC、压缩器、k/v/βk/v/\beta 生成分支、初始化、数据顺序和优化器,只把更新替换成

Xwrite+=X+βkv⊤.X^+_{\mathrm{write}}=X+\beta kv^\top.

这样两边都有扩展状态、归一化方向和目标分支,差别集中在是否减去当前读数。直接拿 DDL 与普通 additive 残差比较,会同时改变分支角色、幅度表达和门结构,无法把收益唯一归因于 erase。

算法 2:建议的成对归因实验。

  1. 固定一个展开配置,例如 CC、dv=4d_v=4,明确训练预算与评价时点。
  2. 对 DDL 和 write-only 模型进行成对初始化,在结构一致处使用匹配参数样本与门设置。
  3. 使用相同有序数据和优化器计划,并对多组随机种子重复配对。
  4. DDL 组执行算法 1;对照组省去旧值读取,把最终修正改成 βkv⊤\beta kv^\top。
  5. 在公共 checkpoint 记录验证 loss、下游分数、实际时间、峰值显存和累计计算量。
  6. 报告成对差值的分布,分别比较等 token 与等资源时点,不把两种结论混合。

这是一项建议,没有在本次阅读中运行。它也不是一个“改一行便绝对公平”的魔法实验:去掉读取项会改变初始更新统计和计算量。应如实报告这些变化,而不是悄悄调一边直到想要的结果出现。

严格组件归因和充分调参后的最优表现,是两个都值得问的问题。前者尽量固定其余条件,后者允许各自寻找适合的设置。把这两种实验分开,才能同时回答机制是否有效、架构是否实用。

图 9:独立分析中的证据关系图。多个组件都可能影响质量与成本,匹配 write-only 对照、多种子和等资源曲线分别补足不同证据。

12.2 验证一个由公式保证的现象,不等于解释模型为何变好

假设测量改写前后 ∥k⊤X−v⊤∥\|k^\top X-v^\top\| 的变化,在严格单位方向下,比值就是 ∣1−β∣|1-\beta|。观察到它下降,可以确认模型处于哪种门区间、数值归一化是否接近理想条件,却不能独立证明方向代表了有用概念。

这类现象很容易被包装成漂亮的机制图,但它在相当程度上由定义决定。更强的解释,应把某种可预测的门行为或方向干预,连接到 held-out 任务损失。例如固定生成目标,改变某层方向;或者限制某些更新,测量预测如何受影响,再与简单的层深、范数解释比较。

这种干预也需要谨慎设计。随意扰动表示,任何模型都可能受损;损失上升本身不足以证明一个精细的语义故事。关键是所提解释能否预测干预结果,且比更简单的替代解释更好。

式(6)还提示一个可测量问题:某次改写会通过 q⊤kq^\top k 影响后续读数。模型究竟学会了减少方向冲突,还是依赖多层相互覆盖来纠错?当前结果没有区分。研究这种跨层干扰,比直接把“每次操作清楚”升级为“内部语义清楚”更有说服力。

12.3 多分配通道,不代表模型真的用出了独立容量

扩展状态从重复 embedding 或恒等扩展开始。分配四个 value 通道,只保证张量有四列,不保证四列从一开始就承载四份独立信息。目标投影和后续更新可以产生差异,但差异是否持续、是否对任务有用,需要测量。

一个可行方向,是观察不同层、不同 token 上经过中心化的通道协方差谱,同时记录压缩后视图和任务质量。如果通道变化长期近似冗余,扩展带来的好处可能更多来自优化路径或局部变换;如果多样性增长且与质量相关,则更支持“状态容量被利用”的解释。

即便出现相关性,也不能立即断言因果。还需要有控制地减少通道容量,观察质量和资源怎样变化。这样的实验可以告诉我们,四通道是否必要,两个通道是否已经接近,或者多出来的存储能否被更便宜的结构替代。

由此也自然得到更公平的工程比较对象:同样时间内训练的稍宽普通模型、其他残差混合方案,或者更小 dvd_v 的 DDL。参数量相近有助于说明容量存放位置,却不是唯一公平标准。用户付出的是显存、时间和服务成本,而不只是一串参数数量。

12.4 与其找一个总冠军,不如画出质量—成本前沿

当前表格没有一行同时赢下 loss、one-shot、zero-shot、训练速度和推理速度。小模型 TC 的质量点很好,但吞吐明显更低;中模型 CC 在 loss 与 one-shot 上有吸引力,也仍要支付开销;小模型 CC 的 zero-shot 平均值则低于 baseline。

我更希望后续首先画出验证 loss 对真实训练时间的曲线,再单独画出相关任务质量对推理成本的曲线。这样问题就从“哪种连接更先进”变成“多花多少预算,可以获得什么改善,哪些任务会退步”。这类结果更容易用于实际架构选择。

再加入配对多种子和 write-only 对照,两个重要问题就能被分开:模型组合是否值得用,以及显式读—擦除是否是关键原因。前者是工程选择,后者是机制归因;二者互相帮助,但不应该用其中一个替另一个作答。

13. 结论:这篇论文最值得带走的是什么?

DDL 提供了一个有清楚局部含义的残差接口:先读取选中方向上的值,再与目标比较,最后写回受门控制的秩 1 修正。在理想单位方向下,目标匹配与 shortcut 谱都能直接推导。扩展残差状态又把存储宽度和昂贵主干的计算宽度分开,形成一种值得研究的容量分配方式。

实验支持的结论需要保留条件:扩展版本在已报告的等 token 运行里降低了验证 loss,并经常提高 one-shot 平均值,同时损失吞吐、增加部分峰值显存。标量收益较小,zero-shot 结果并不一致,扩展状态收益也尚未隔离到擦除项,更没有证明等计算预算下更划算。

对我来说,这篇论文的价值既在那个简洁接口,也在它让后续问题变得具体。下一步需要匹配的 write-only 对照、重复种子、真正的等资源曲线,以及将局部编辑与有效预测联系起来的证据。在此之前,DDL 是一个值得继续检验的质量—成本取舍,而不是已经兑现的低成本预训练捷径。

参考资料与配图说明

  1. Yifan Zhang、Yifeng Liu、Mengdi Wang、Quanquan Gu,Deep Delta Learning,arXiv:2601.00417v4,2026 年 7 月 27 日。摘要与版本记录;完整论文。本文方法与实验分析依据这一版本正文和附录 A—D。
  2. Deep Delta Learning 官方项目,作为论文资源入口。

图 1、4、9 为依据方法和本文分析绘制的解释图。图 2、3 是解析计算示意,不是训练观察。图 5—8 依据正文表 1—5 与附录 D 重绘,未填补缺失测量。文中的存储和时间换算为明确标注的示意计算;没有新增训练结果、复现结论或虚构置信区间。