Post
Linnainmaa 1976:从累计舍入误差到反向累积思想
这篇 1976 年论文讨论的是有限精度计算中的累计舍入误差,但它已经把“沿着复合计算过程回收影响系数”这一件事说得很清楚,也同时暴露了后来 reverse-mode 一直要面对的存储代价。
| 项目 | 内容 |
|---|---|
| 论文标题 | Taylor expansion of the accumulated rounding error |
| 作者 | Seppo Linnainmaa |
| 年份 | 1976 |
| 期刊 | BIT Numerical Mathematics 16(2) |
| 页码 | 146–160 |
| DOI | 10.1007/BF01931367 |
| 本文依据版本 | 论文摘要、预览摘录,以及 Springer 页面元数据 |
这篇论文真正要处理什么问题
Linnainmaa 讨论的对象是有限精度计算中的舍入误差。一个数值过程在纸面上可以写成精确的实数运算,但真正落到机器上时,每一步都会经过浮点舍入,因此最后得到的结果一般会偏离“无舍入时”的真实结果。论文把这个最终偏差称为 accumulated rounding error,并把每一步单独产生的偏差称为 local rounding error。
作者关心的不是泛泛地说“误差会传播”,而是更具体的一件事:能否把最终累计误差写成各个局部误差的函数,并把这种依赖关系系统地算出来。摘要已经把目标说得很清楚:论文要给出解析和算法的方法,来求累计误差关于局部舍入误差的 Taylor 展开系数,从而确定局部误差对最终误差的影响。
这个问题有很强的历史意味。它还没有进入神经网络训练的语境,但已经明确落在“复合计算过程中的影响如何传递”这一类问题上。若用后来 reverse-mode 的语言回看,论文处理的是:给定一串由前序变量生成后序变量的运算,怎样把末端量对中间误差源的敏感性有效地组织出来。
论文怎样把误差传播写成一个可计算的问题
论文先把计算过程抽象成一个序列
其中一部分是初值,其余量由更早出现的量通过某个二元运算产生:
实际计算时使用的是有限精度浮点数,于是得到的是
这里的局部舍入误差定义为
而累计舍入误差定义为
到这里,问题就被拆成了两层:
- 每一步自身引入一个新的局部误差 ;
- 更早步骤已经积累下来的误差 会继续影响当前量。
因此 不是孤立出现的,它由本步新增误差与前序误差共同决定。预览摘录给出的 Taylor 展开式正是对这件事的形式化表达。若只看一阶项,核心结构可以理解为
其中系数来自 对其输入的偏导数。论文也明确说明,很多情形下一阶近似已经能较准确地描述累计误差,所以全文重点放在一阶系数的确定上;二阶和更高阶项也被讨论,但不是论证重心。
这一步很关键,因为它把“误差分析”变成了“系数传播”。最终需要计算的对象不再只是某个数值结果,而是一个沿着整个计算过程传递的影响系数系统。
为什么它会被放进 reverse-mode 的历史链条
论文原文谈的是舍入误差,不谈神经网络,也不使用今天 automatic differentiation 的术语。但从结构上看,它已经具备了后来 reverse-mode 视角里最重要的要素。
首先,整个对象是一个由许多中间变量组成的复合计算过程。每个 都依赖于更早的变量,因而全局结果的变化必须通过这条依赖链传播。其次,作者关心的是“末端误差量如何受局部误差源影响”,并试图用一套算法把这些影响系数统一求出。摘要中的 “determining the coefficients” 和引言中的 “algorithmic methods” 指向的正是这种组织方式。
如果把 later backpropagation 的核心抽象成一句话,可以说它是在复合运算图上高效累积影响系数。Linnainmaa 这里处理的不是损失对参数的梯度,而是累计误差对局部舍入误差的展开系数;对象不同,数学骨架却已经非常接近。也正因为如此,这篇文章常被放在反向传播与 automatic differentiation 的前史位置上来阅读。
这里需要保留边界。就来源材料而言,论文证明的是累计舍入误差的 Taylor 系数如何求取,并没有讨论多层感知机训练,也没有提出后来神经网络文献中那套标准化的“误差信号回传”叙述。把它放进 reverse-mode 历史链条,是一种后见的结构性定位,而不是说论文已经直接给出了神经网络版本的 backprop。
存储问题为什么是这篇论文里特别重要的一笔
引言里有一句很值得反复看:如果要在事后以算法方式计算 Taylor 展开系数,就“有必要保存关于整个计算过程中所有操作的一些信息”,而所需存储量可能大到难以接受。摘要也对应地写道,论文分析了若干减少大量存储需求的办法。
这说明作者看到的困难不只在公式推导本身。即使系数递推关系已经明确,实现它仍然要求保留中间运算信息;一旦计算过程很长,存储就会成为实际瓶颈。这个判断在历史上很敏锐,因为它把“高效传播影响”与“必须保存多少中间状态”绑定在了一起。
从今天的角度回看,这正是 reverse-mode 长期携带的资源问题:为了在后向阶段恢复依赖关系,往往需要保留前向过程中的中间量。Linnainmaa 在 1976 年讨论累计舍入误差时,已经把这个矛盾直接摆上台面。来源材料没有提供这里的全部技术细节,但问题本身已经说得非常清楚:一方面,希望通过算法化方式求得一阶乃至更高阶系数;另一方面,保存整条计算轨迹会带来昂贵的存储代价,因此必须分析压缩与折衷。
若把这篇论文作为“反向传播起源”序列的开篇材料,最值得记住的不是某个孤立公式,而是下面这条主线:在一个复合计算过程中,影响系数可以被系统地展开与传播;一阶项通常最重要;而一旦这种传播要真正落地,存储成本就会立刻出现。后来的 reverse-mode 与 backpropagation 在不同应用里不断重演的,正是这组三联关系。