反向传播:在二阶方法中,ReLU 导数是否为 0?它对训练有什么影响?

数据挖掘 神经网络 优化 反向传播
2021-09-23 09:31:05

ReLU 是一个激活函数,定义为h=max(0,a)在哪里a=Wx+b.

通常,我们使用 SGD、Adam、RMSprop、Adadelta 或 Adagrad 等一阶方法训练神经网络。一阶方法中的反向传播需要一阶导数。因此x派生为1.

但是如果我们使用二阶方法,ReLU 的导数会是 0? 因为x派生为1 并再次派生为 0. 会不会是错误?例如,使用牛顿法,您将除以0. (我还不太了解无 Hessian 优化。IIRC,这是使用近似 Hessian 而不是真正的 Hessian 的问题)。

这个有什么效果 h=0? 我们还能用二阶方法用 ReLU 训练神经网络吗?还是不可训练/错误(nan/infinity)?


为了清楚起见,这是 ReLU f(x)

f(x)=

0forx<0xforx0

f(x)=

0forx<01forx0

f(x)=0

1个回答

是的,ReLU 二阶导数为 0。从技术上讲,两者都不是dydx也不d2ydx2定义在x=0,但我们忽略了这一点——实际上是一个精确的x=0很少见,也不是特别有意义,所以这不是问题。Newton 方法不适用于 ReLU 传递函数,因为它没有固定点。但是,它在大多数其他常见的传递函数上也没有有意义的工作——对于有限的输入,它们不能被最小化或最大化。

当您将多个 ReLU 函数与神经网络等结构中的多层矩阵乘法相结合并希望最小化目标函数时,情况会更加复杂。这种组合确实有固定点。即使是单个 ReLU 神经元和均方误差目标也会有足够不同的行为,以至于单个权重的二阶导数会发生变化并且不能保证为 0。

多层组合时的非线性是创建更有趣的优化表面的原因。这也意味着更难计算有用的二阶偏导数(或Hessian 矩阵),这不仅仅是获取传递函数的二阶导数的问题。

事实是 d2ydx2=0 因为传递函数将使矩阵中的某些项为零(对于来自相同神经元激活的二阶效应),但 Hessian 中的大多数项的形式为 2Exixj 其中 E 是目标, xi, xj是神经网络的不同参数。一个完全实现的 Hessian 矩阵将有N2 条款在哪里 N 是参数的数量 - 对于具有超过 100 万个参数的大型神经网络,即使使用简单的计算过程并且许多项为 0(例如同一层中的 2 个权重),这也可能无法计算。

有一些技术可以估计一些神经网络优化器中使用的二阶导数的影响。例如,RMSProp 可以被视为粗略估计二阶效应。“Hessian-free”优化器更明确地计算该矩阵的影响。