为什么我们更喜欢 ReLU 而不是线性激活函数?

人工智能 神经网络 深度学习 比较 激活函数 雷路
2021-11-03 22:53:11

ReLU激活函数定义如下

y=max(0,x)

并且线性激活函数定义如下

y=x

ReLU 非线性只是将小于 0 的值裁剪为 0 并传递其他所有值。那么为什么不使用线性激活函数,因为它会在反向传播期间传递所有梯度信息呢?我确实看到参数 ReLU (PReLU) 确实提供了这种可能性。

我只是想知道是否对使用 ReLU 作为默认值有适当的解释,或者它只是基于观察到它在训练集上表现更好。

2个回答

ReLu 是一个非线性激活函数。查看这个问题,了解使用 ReLu 背后的直觉(也可以查看评论)。为什么我们不使用线性激活函数有一个非常简单的原因。

假设你有一个特征向量x0和权重向量W1. 通过神经网络中的一层将给出输出为

W1Tx0=x1

(权重和输入向量的点积)。现在通过下一层传递输出会给你

W2Tx1=x2

所以扩展这个我们得到

x2=W2TW1Tx0=W2TW1Tx0=WcompactTx0

因此如您所见,输入和输出之间存在线性关系,而我们要建模的函数通常是非线性的,因此我们无法对其建模。

您可以在此处查看我关于非线性激活的答案。

参数化 ReLu 与普通 ReLu 相比几乎没有优势。这是@NeilSlater 的一个很好的回答。它基本上是试图告诉我们,如果我们使用 ReLu,我们最终会在神经网络中产生大量冗余或死节点(那些具有负输出的节点),它们对结果没有贡献,因此没有衍生物。因此,为了逼近一个函数,我们将需要一个更大的 NN,而参数 ReLu 解决了我们这个问题,(因此一个相对较小的 NN)因为负输出节点不会死亡。

注意: alpha = 1将是参数 ReLu 的一个特例。必须在负区域所需的活力量与激活函数的线性度之间取得平衡。

所有单元都具有线性激活函数的多层网络总是可以折叠为具有两层单元的等效网络。这就是为什么必须使用非线性单元激活函数的原因。

使用非线性激活函数的根本原因涉及 Cybenko (1989) 的一个显着定理,该定理指出,一层非线性隐藏单元足以逼近从输入到输出单元的任何映射。实际上,我认为有一个后来的证明指定非线性可以是任何非多项式函数(例如 sigmoidal)。

本文基于《人工智能引擎:深度学习数学教程简介》一书。