非线性计算在深度线性网络中
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