神经网络中激活函数的一般差异

数据挖掘 神经网络 激活函数
2021-09-26 00:13:03

我研究了神经网络的激活函数类型。功能本身非常简单,但应用程序差异并不完全清楚。

根据所需的二进制/连续输出来区分逻辑类型函数和线性类型函数是合理的,但是 sigmoid 函数相对于简单线性函数的优势是什么?

ReLU 对我来说特别难以理解,例如:使用在正输入情况下表现得像线性但在负值情况下表现得“平坦”的函数有什么意义?这背后的直觉是什么?还是只是简单的试错,仅此而已?

1个回答

在 CV 上提出了一个类似的问题:具有优点/缺点的神经网络中激活函数的综合列表

我复制以下答案之一:

一个这样的列表,虽然不是很详尽: http ://cs231n.github.io/neural-networks-1/

常用的激活函数

每个激活函数(或非线性)都采用一个数字并对其执行某种固定的数学运算。在实践中您可能会遇到几种激活函数:

在此处输入图像描述在此处输入图像描述

左: Sigmoid 非线性将实数压缩到 [0,1] 之间的范围右: tanh 非线性将实数压缩到 [-1,1] 之间的范围。

乙状结肠。sigmoid 非线性具有数学形式σ(X)=1/(1+e-X)并且如上图左侧所示。如上一节所述,它采用实数值并将其“压缩”到 0 和 1 之间的范围内。特别是,大的负数变成 0,大的正数变成 1。sigmoid 函数在历史上经常使用因为它对神经元的放电率有很好的解释:从根本不放电 (0) 到以假定的最大频率 (1) 完全饱和放电。在实践中,sigmoid 非线性最近已经失宠并且很少使用。它有两个主要缺点:

  • Sigmoids 饱和并杀死梯度sigmoid 神经元的一个非常不受欢迎的特性是,当神经元的激活在 0 或 1 的尾部饱和时,这些区域的梯度几乎为零。回想一下,在反向传播期间,这个(局部)梯度将乘以整个目标的该门输出的梯度。因此,如果局部梯度非常小,它将有效地“杀死”梯度,几乎没有信号会通过神经元流向其权重并递归地流向其数据。此外,在初始化 sigmoid 神经元的权重以防止饱和时,必须格外小心。例如,如果初始权重太大,那么大多数神经元会变得饱和,网络几乎不会学习。
  • Sigmoid 输出不是以零为中心的这是不可取的,因为神经网络中后续处理层中的神经元(稍后会详细介绍)将接收非零中心的数据。这对梯度下降过程中的动力学有影响,因为如果进入神经元的数据总是正的(例如X>0 逐元素F=wX+b)),然后是权重的梯度 w将在反向传播过程中要么全部为正,要么全部为负(取决于整个表达式的梯度 F)。这可能会在权重的梯度更新中引入不希望的锯齿形动态。但是,请注意,一旦将这些梯度在一批数据中相加,权重的最终更新可能会有不同的符号,从而在一定程度上缓解了这个问题。因此,这是一个不便,但与上述饱和激活问题相比,它的后果较轻。

谭。tanh 非线性显示在右上方的图像中。它将实数值压缩到 [-1, 1] 范围内。与 sigmoid 神经元一样,它的激活是饱和的,但与 sigmoid 神经元不同的是,它的输出是以零为中心的。因此,在实践中,tanh 非线性总是优于 sigmoid 非线性。另请注意,tanh 神经元只是一个缩放的 sigmoid 神经元,特别是以下内容:(X)=2σ(2X)-1.

在此处输入图像描述在此处输入图像描述

左图:整流线性单元 (ReLU) 激活函数,当 x < 0 时为零,然后当 x > 0 时与斜率 1 成线性关系。右图: Krizhevsky 等人的图。(pdf) 论文表明,与 tanh 单元相比,ReLU 单元的收敛性提高了 6 倍。

ReLU。整流线性单元在过去几年中变得非常流行。它计算函数F(X)=最大限度(0,X). 换句话说,激活的阈值简单为零(见左上图)。使用 ReLU 有几个优点和缺点:

  • (+) 与 sigmoid/tanh 函数相比,发现它极大地加速了随机梯度下降的收敛(例如, Krizhevsky 等人的 6 倍)。有人认为这是由于其线性、非饱和形式。
  • (+) 与涉及昂贵操作(指数等)的 tanh/sigmoid 神经元相比,ReLU 可以通过简单地将激活矩阵设为零来实现。
  • (-) 不幸的是,ReLU 单元在训练期间可能很脆弱并且可能“死亡”。例如,流经 ReLU 神经元的大梯度可能会导致权重以这样的方式更新,使得神经元永远不会在任何数据点上再次激活。如果发生这种情况,那么从该点开始,流经该单元的梯度将永远为零。也就是说,ReLU 单元在训练过程中可能会不可逆地死亡,因为它们可能会从数据流形中剔除。例如,如果学习率设置得太高,您可能会发现多达 40% 的网络可能是“死的”(即在整个训练数据集中永远不会激活的神经元)。通过适当设置学习率,这不太常见。

泄漏的 ReLU。Leaky ReLU 是解决“垂死的 ReLU”问题的一种尝试。当 x < 0 时,函数不会为零,而是泄漏的 ReLU 将有一个小的负斜率(0.01 左右)。也就是说,函数计算F(X)=1(X<0)(αX)+1(X>=0)(X) 在哪里 α是一个小常数。有些人报告这种形式的激活函数成功,但结果并不总是一致的。负区域的斜率也可以作为每个神经元的参数,如 PReLU 神经元中所见,由 Kaiming He 等人在Delving Deep into Rectifiers中介绍,2015。然而,目前跨任务收益的一致性是不清楚。

在此处输入图像描述

最大输出已经提出了不具有功能形式的其他类型的单元F(wX+b)其中非线性应用于权重和数据之间的点积。一种相对流行的选择是 Maxout 神经元( Goodfellow 等人最近引入 ),它概括了 ReLU 及其泄漏版本。Maxout 神经元计算函数最大限度(w1X+b1,w2X+b2). 请注意,ReLU 和 Leaky ReLU 都是这种形式的特例(例如,对于 ReLU,我们有w1,b1=0)。因此,Maxout 神经元享有 ReLU 单元的所有优点(线性操作状态,无饱和),并且没有其缺点(垂死的 ReLU)。然而,与 ReLU 神经元不同,它使每个神经元的参数数量增加了一倍,导致参数总数增加。

我们对最常见类型的神经元及其激活功能的讨论到此结束。作为最后的评论,在同一个网络中混合和匹配不同类型的神经元是非常罕见的,即使这样做没有根本问题。

TLDR:“我应该使用哪种神经元类型? ”使用 ReLU 非线性,注意学习率,并可能监控网络中“死”单元的比例。如果这让你担心,试试 Leaky ReLU 或 Maxout。永远不要使用 sigmoid。尝试 tanh,但希望它比 ReLU/Maxout 更糟糕。


许可证:


麻省理工学院许可证 (MIT)

版权所有 (c) 2015 Andrej Karpathy

特此免费授予任何获得本软件和相关文档文件(“软件”)副本的人,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。

本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同诉讼、侵权行为或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。*