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


15

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

合理的是,可以根据所需的二进制/连续输出来区分逻辑类型函数和线性类型函数,但是S型函数比简单线性函数有何优势?

例如,对我而言,ReLU尤其难以理解:使用一个在正输入情况下表现为线性,而在负输入情况下表现为“平坦”的函数有什么意义呢?这背后的直觉是什么?还是仅仅是简单的试错法,仅此而已?

Answers:


16

在CV上也提出了类似的问题:具有优缺点的神经网络中激活函数的完整列表

我复制以下答案之一:

一个这样的列表,尽管并不十分详尽:http : //cs231n.github.io/neural-networks-1/

常用的激活功能

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

在此处输入图片说明在此处输入图片说明

左: S型非线性将实数压缩在[0,1]之间。右: tanh非线性将实数压缩在[-1,1]之间。

乙状结肠。S形非线性具有数学形式,如上图所示。如上一节所提到的,它采用一个实数值并将其“压缩”到0到1之间的范围内。特别是,大的负数变为0,大的正数变为1。因为它可以很好地解释神经元的发射速率:从根本不发射(0)到以假定的最大频率(1)完全饱和发射。在实践中,S形非线性最近已失宠,很少使用。它有两个主要缺点:σ(x)=1/(1+ex)

  • 乙状结肠饱和并杀死梯度。乙状神经元的一个非常不希望的特性是,当神经元的激活在0或1的尾部饱和时,这些区域的梯度几乎为零。回想一下,在反向传播期间,此(局部)梯度将与整个目标的此门输出的梯度相乘。因此,如果局部梯度很小,它将有效地“杀死”该梯度,并且几乎没有信号将通过神经元流向其权重并递归地传递至其数据。另外,在初始化乙状神经元的权重以防止饱和时必须格外小心。例如,如果初始权重太大,则大多数神经元将变得饱和,网络将几乎无法学习。
  • 乙状结肠输出不是零中心的。这是不希望的,因为神经网络中处理的后续层中的神经元(即将对此进行详细介绍)将接收到非零中心的数据。这对梯度下降期间的动力学有影响,因为如果进入神经元的数据始终为正(例如, 在,元素方向),则权重的梯度 将在反向传播期间变为全部为正,或全部为负(取决于整个表达式的梯度 f = w T x + b w fx>0f=wTx+bwf)。这可能会在权重的梯度更新中引入不希望的之字形动力学。但是,请注意,一旦将这些梯度累加到一批数据中,权重的最终更新就可以具有可变的符号,从而在某种程度上缓解了此问题。因此,这是一个不便,但是与上面的饱和激活问题相比,后果不那么严重。

tanh非线性显示在右上方的图像中。它将实数值压缩到[-1,1]范围内。像乙状结肠神经元一样,它的激活是饱和的,但是与乙状结肠神经元不同,它的输出是零中心的。因此,在实践中,tanh非线性总是比S形非线性更好。还要注意,tanh神经元只是一个缩放的S型神经元,特别是以下条件成立:。tanh(x)=2σ(2x)1

在此处输入图片说明在此处输入图片说明

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

ReLU。在过去的几年中,整流线性单元变得非常流行。它计算函数。换句话说,激活仅将阈值设为零(请参见上面左图)。使用ReLU有很多优点和缺点:f(x)=max(0,x)

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

ReLU泄漏。泄漏的ReLU是解决“垂死的ReLU”问题的一种尝试。当x <0时,函数不为零,而是泄漏的ReLU将具有较小的负斜率(约为0.01)。也就是说,函数计算,其中是一个小常数。有人报告使用这种形式的激活功能成功,但是结果并不总是一致的。负区域中的斜率也可以设为每个神经元的参数,如Kaiming He等人在2015年的《深入整流器》中介绍的PReLU神经元所示。但是,目前跨任务的收益的一致性不清楚。f(x)=1(x<0)(αx)+1(x>=0)(x)α

在此处输入图片说明

Maxout。已经提出了不具有的函数形式的其他类型的单元,其中在权重和数据之间的点积上施加了非线性。一种相对流行的选择是Maxout神经元(由Goodfellow等人最近引入 ),它对ReLU及其泄漏版本进行了概括。Maxout神经元计算函数。请注意,ReLU和Leaky ReLU都是这种形式的特例(例如,对于ReLU,我们有max w T 1 x + b 1w T 2 x + b 2w 1b 1 = 0f(wTx+b)max(w1Tx+b1,w2Tx+b2)w1,b1=0)。因此,Maxout神经元享有ReLU单元的所有优点(线性操作方式,无饱和状态),并且没有缺点(即将死去的ReLU)。但是,与ReLU神经元不同,它使每个单个神经元的参数数量增加了一倍,从而导致参数总数很高。

这结束了我们对最常见的神经元类型及其激活功能的讨论。最后,即使在同一网络中混合并匹配不同类型的神经元,也很少见,尽管这样做根本没有问题。

TLDR:“ 我应该使用哪种神经元类型? ”使用ReLU非线性,注意您的学习率,并可能监视网络中“死”单元的比例。如果这与您有关,请尝试Leaky ReLU或Maxout。切勿使用乙状结肠。尝试使用tanh,但希望它的性能比ReLU / Maxout差。


许可证:


MIT许可证(MIT)

版权所有(c)2015 Andrej Karpathy

特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制使用软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本,并允许具备软件的人员这样做,但须满足以下条件:

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

本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性,特定目的的适用性和非侵权性的保证。无论是由于软件,使用或其他方式产生的,与之有关或与之有关的合同,侵权或其他形式的任何索赔,损害或其他责任,作者或版权所有者概不负责。软件。*


谢谢,此摘要提供了一些见解,但是坦率地说,我仍然不能直观地了解一些细节(例如,为什么ReLU“极大地加快了SGD的融合”),最重要的是:选择哪一个?根据结论,Maxout就是最好的,这就是终点。但是,除了没有在最流行的软件包(例如,在Keras中)中实现Maxout的事实之外,我认为至少在最后一层中应该放置其他类型(例如用于双分类的Sigmoid)似乎是合理的。
亨德里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.