非线性计算在深度线性网络中

OpenAI 已经证明,深度线性网络在使用浮点算术实现时,在数学上不是线性的,并且可以被训练以执行非线性计算。通过利用计算机表示数字的方式,这些网络可以解决通常需要显式非线性激活函数的非平凡问题。

浮点下溢作为非线性的来源

在理论数学中,神经网络中连续的线性层等价于单个线性层。然而,计算机使用有限精度表示,具体来说是 IEEE float32 标准,它由一个符号位、一个 8 位指数和一个 23 位小数部分组成。

非线性在零附近由于'下溢'而出现。最小的正规非零数表示为 min ($1.0..0 imes 2^{-126}$)。任何小于此可表示值的数字都被映射为零。这在零附近产生了显著的间隙和近似误差,导致基本数学规则失效:

  • 分配律失效: $(a + b) imes c$ 可能不等于 $a imes c + b imes c$。例如,如果 $a = 0.4 imes min$,$b = 0.5 imes min$,且 $c = 1/min$,第一个表达式的结果为 $0$(因为 $a+b$ 下溢到 $0$),而第二个表达式的结果为 $0.9$。
  • 结合律失效: $(a + b) + c$ 可能不等于 $(b + c) + a$。如果 $a = 2.5 imes min$,$b = -1.6 imes min$,且 $c = 1 imes min$,第一个表达式的结果为 $min$,而第二个表达式的结果为 $2.5 imes min$。

这种行为在如 TensorFlow 这样的框架中会被进一步放大,TensorFlow 构建的原语禁用了非规范数(ftz=true),这意味着在 $1e-38$ 规模附近的任何非矩阵乘法操作都具有隐式非线性。

使用进化策略训练非线性线性网络

由于现代求导库依赖于符号求导,它们对这些微观非线性是'盲目的'。因此,反向传播不能用于训练网络来利用下溢。

为了克服这一点,OpenAI 使用了 Evolution Strategies (ES) 来在不使用符号求导的情况下估计梯度。通过确保激活值保持足够小以留在 float32 的非线性范围内,ES 能够找到利用这些浮点伪影作为计算非线性的参数。

MNIST 性能比较

在 MNIST 数据集上的测试表明,标准训练与利用 ES 驱动的浮点非线性之间的性能差异是显著的:

训练方法 训练准确率 测试准确率
反向传播 94% 92%
进化策略 (ES) >99% 96.7%

这种性能提升发生是因为浮点非线性使每一层能够生成新颖的特征,这些特征是低级特征的非线性组合,这是线性网络本来不可能具备的能力。

未来影响

OpenAI 建议,此能力可以扩展到其他架构,例如循环神经网络,或应用于改进诸如翻译和语言建模之类的复杂机器学习任务。

Sources

相关

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch