具有优点/缺点的神经网络中激活函数的完整列表


94

是否有参考文献提供了神经网络中激活函数及其优缺点的完整列表(理想情况下还提供了一些成功或不太成功的出版物的指针)?


我对ANN知之甚少,但是除非激活函数的形状大不相同,否则很难将它们区分开。对于类似情况的讨论,您可以在这里看到我的答案:logit模型和probit模型之间的区别
gung

1
不,这有很大的不同。
Viliami

en.wikipedia.org/wiki/Activation_function是很好的资源;您可以使用许多其他工具,包括sin(x),请参见openreview.net/pdf?id=Sks3zF9eg
Piotr Migdal

对于视频教程上激活功能,请访问:quickkt.com/tutorials/artificial-intelligence/deep-learning/...
维纳·库马尔

Answers:


143

我将在这里开始列出到目前为止所学的内容。正如@marcodena所说,优缺点比较困难,因为它主要只是尝试这些方法而获得的启发式方法,但我认为至少要列出它们不会受到伤害的列表。

首先,我将明确定义符号,以免造成混淆:

符号

这种表示法来自尼尔森的书

前馈神经网络是连接在一起的多层神经元。它接受一个输入,然后该输入通过网络“点滴”,然后神经网络返回一个输出向量。

更正式地,调用一种Ĵ一世所述的活化(又名输出)神经元中的层,其中是在输入向量的元素。ħ一个1 Ĵ Ĵ ħĴŤH一世ŤH一种Ĵ1个ĴŤH

然后,我们可以通过以下关系将下一层的输入与上一层的输入关联起来:

一种Ĵ一世=σķwĴķ一世一种ķ一世-1个+bĴ一世

哪里

  • σ是激活功能,
  • k t hi 1 t h j t h i t hwĴķ一世是重从神经元在层到神经元中的层,ķŤH一世-1个ŤHĴŤH一世ŤH
  • Ĵ ħħbĴ一世是层中神经元的偏差,并且ĴŤH一世ŤH
  • Ĵ ħħ一种Ĵ一世代表层中神经元的激活值。ĴŤH一世ŤH

有时我们写来表示,换句话说,就是在应用激活函数之前神经元的激活值。 Σ ķ瓦特Ĵ ķ一个- 1 ķ+ b ĴžĴ一世ķwĴķ一世一种ķ一世-1个+bĴ一世

在此处输入图片说明

为了更简洁的表示,我们可以写

一种一世=σw一世×一种一世-1个+b一世

要使用此公式为某些输入计算前馈网络的输出,请设置,然后计算,其中,是层数。一个1 = 一个2一个3... 一世[Rñ一种1个=一世一种2一种3一种

激活功能

(在下面,为了可读性,我们将编写而不是)e x经验值XËX

身分识别

也称为线性激活函数。

一种Ĵ一世=σžĴ一世=žĴ一世

身分识别

一种Ĵ一世=σžĴ一世={0如果 žĴ一世<01个如果 žĴ一世>0

步

分段线性

选择一些和,这是我们的“范围”。小于此范围的所有内容都将为0,大于此范围的所有内容都将为1。正式地: x 最大XX最高

一种Ĵ一世=σžĴ一世={0如果 žĴ一世<XžĴ一世+b如果 XžĴ一世X最高1个如果 žĴ一世>X最高

哪里

=1个X最高-X

b=-X=1个-X最高

分段线性

乙状结肠

一种Ĵ一世=σžĴ一世=1个1个+经验值-žĴ一世

乙状结肠

互补日志

一种Ĵ一世=σžĴ一世=1个-经验值-经验值žĴ一世

互补日志

双极

一种Ĵ一世=σžĴ一世={-1个如果 žĴ一世<0   1个如果 žĴ一世>0

双极

双极乙状结肠

一种Ĵ一世=σžĴ一世=1个-经验值-žĴ一世1个+经验值-žĴ一世
双极乙状结肠

h

一种Ĵ一世=σžĴ一世=žĴ一世

h

勒村的谭

请参阅高效反向传播

一种Ĵ一世=σžĴ一世=1.715923žĴ一世

勒村的谭

缩放比例:

LeCun的Tanh鳞片

硬丹

一种Ĵ一世=σžĴ一世=最高-1个1个žĴ一世

硬丹

绝对

一种Ĵ一世=σžĴ一世= ∣žĴ一世

绝对

整流器

也称为整流线性单位(ReLU),最大值或斜坡函数

一种Ĵ一世=σžĴ一世=最高0žĴ一世

整流器

ReLU的修改

这些是我一直在玩的一些激活功能,出于神秘的原因,这些功能对于MNIST而言似乎具有非常好的性能。

一种Ĵ一世=σžĴ一世=最高0žĴ一世+cosžĴ一世

ReLU cos

缩放比例:

ReLU cos缩放

一种Ĵ一世=σžĴ一世=最高0žĴ一世+žĴ一世

ReLU罪

缩放比例:

ReLU罪恶等级

平滑整流器

也称为平滑整流线性单位,平滑最大或软加

一种Ĵ一世=σžĴ一世=日志1个+经验值žĴ一世

平滑整流器

洛吉特

一种Ĵ一世=σžĴ一世=日志žĴ一世1个-žĴ一世

洛吉特

缩放比例:

Logit缩放

概率

一种Ĵ一世=σžĴ一世=2埃尔夫-1个2žĴ一世-1个

其中是错误函数。不能通过基本函数来描述它,但是您可以在该Wikipedia页面和此处找到近似的方法。埃尔夫

或者,它可以表示为

一种Ĵ一世=σžĴ一世=ϕžĴ一世

其中是累积分布函数(CDF)。参见此处,了解近似方法。ϕ

概率

缩放比例:

概率缩放

余弦

参见随机厨房水槽

一种Ĵ一世=σžĴ一世=cosžĴ一世

余弦

软最大

也称为归一化指数。

一种Ĵ一世=经验值žĴ一世ķ经验值žķ一世

这个有点奇怪,因为单个神经元的输出依赖于该层中的其他神经元。由于可能是一个非常高的值,因此它的确也很难计算,在这种情况下可能会溢出。同样,如果是一个非常低的值,它将下溢并变为。žĴ一世经验值žĴ一世žĴ一世0

为了解决这个问题,我们将改为计算。这给我们:日志一种Ĵ一世

日志一种Ĵ一世=日志经验值žĴ一世ķ经验值žķ一世

日志一种Ĵ一世=žĴ一世-日志ķ经验值žķ一世

在这里,我们需要使用log-sum-exp技巧

假设我们正在计算:

日志Ë2+Ë9+Ë11+Ë-7+Ë-2+Ë5

为了方便起见,我们将首先按幅度对指数进行排序:

日志Ë11+Ë9+Ë5+Ë2+Ë-2+Ë-7

然后,由于是我们的最高点,因此我们乘以:Ë11Ë-11Ë-11

日志Ë-11Ë-11Ë11+Ë9+Ë5+Ë2+Ë-2+Ë-7

日志1个Ë-11Ë0+Ë-2+Ë-6+Ë-9+Ë-13+Ë-18岁

日志Ë11Ë0+Ë-2+Ë-6+Ë-9+Ë-13+Ë-18岁

日志Ë11+日志Ë0+Ë-2+Ë-6+Ë-9+Ë-13+Ë-18岁

11+日志Ë0+Ë-2+Ë-6+Ë-9+Ë-13+Ë-18岁

然后,我们可以计算右侧的表达式并取其对数。这样做是可以的,因为相对于,该和非常小,因此任何下溢到0的意义都不足以使之有所作为。右边的表达式中不会发生溢出,因为我们保证在乘以,所有幂将都是。日志Ë11Ë-110

形式上,我们称。然后:=最高ž1个一世ž2一世ž3一世

日志ķ经验值žķ一世=+日志ķ经验值žķ一世-

然后,我们的softmax函数变为:

一种Ĵ一世=经验值日志一种Ĵ一世=经验值žĴ一世--日志ķ经验值žķ一世-

另外,softmax函数的导数为:

dσžĴ一世džĴ一世=σžĴ一世=σžĴ一世1个-σžĴ一世

最大输出

这个也有些棘手。本质上,我们的想法是将maxout层中的每个神经元分解为许多子神经元,每个子神经元都有自己的权重和偏见。然后,神经元的输入改为到达其每个子神经元,每个子神经元仅输出其(不应用任何激活函数)。那么该神经元的是其所有子神经元输出的最大值。ž一种Ĵ一世

形式上,在单个神经元中,我们有亚神经元。然后ñ

一种Ĵ一世=最高ķ[1个ñ]sĴķ一世

哪里

sĴķ一世=一种一世-1个wĴķ一世+bĴķ一世

(是点积

为了帮助我们考虑这一点,请考虑使用例如S形激活函数的神经网络的层的权重矩阵。是2D矩阵,其中每一列是神经元的向量,其中包含前一层每个神经元的权重。w ^一世一世w ^一世w ^Ĵ一世Ĵ一世-1个

如果我们要有子神经元,则每个神经元都需要一个2D权重矩阵,因为每个子神经元都需要一个包含上一层中每个神经元权重的向量。这意味着现在是3D权重矩阵,其中每个是单个神经元的2D权重矩阵。然后是神经元中亚神经元的向量,其中包含前一层每个神经元的权重。w ^一世w ^Ĵ一世Ĵw ^Ĵķ一世ķĴ一世-1个

同样,在再次使用例如S形激活函数的神经网络中,是层每个神经元具有偏差的向量。b一世bĴ一世Ĵ一世

要使用子神经元来实现此目的,我们需要为每个层一个二维偏差矩阵,其中是向量,其中中的每个子神经元都有的偏差。神经元。b一世一世bĴ一世bĴķ一世ķĴ

具有权重矩阵和偏置矢量对于每个神经元然后使上式很清楚,它简单地将每个子神经元的权重到输出从层,然后应用它们的偏差并取它们的最大值。wĴ一世bĴ一世wĴķ一世一种一世-1个一世-1个bĴķ一世

径向基函数网络

径向基函数网络是前馈神经网络的一种修改,其中使用

一种Ĵ一世=σķwĴķ一世一种ķ一世-1个+bĴ一世

我们有一个重量每个节点在先前层(正常),以及一个均值向量和一个标准偏差矢量对中的每个节点上一层。wĴķ一世ķμĴķ一世σĴķ一世

然后我们将激活函数称为以避免将其与标准偏差向量混淆。现在要计算我们首先需要为上一层中的每个节点计算一个。一种选择是使用欧几里得距离:ρσĴķ一世一种Ĵ一世žĴķ一世

žĴķ一世=一种一世-1个-μĴķ一世=一种一世-1个-μĴķ一世2

其中是的元素。这个不使用。另外,还有马哈拉诺比斯距离,据推测效果更好:μĴķ一世μĴķ一世σĴķ一世

žĴķ一世=一种一世-1个-μĴķ一世ŤΣĴķ一世一种一世-1个-μĴķ一世

其中是协方差矩阵,定义为:ΣĴķ一世

ΣĴķ一世=诊断σĴķ一世

换句话说,是对角线与矩阵,因为它是对角元素。我们在这里将和为列向量,因为这是通常使用的表示法。ΣĴķ一世σĴķ一世一种一世-1个μĴķ一世

这些实际上只是在说马氏距离定义为

žĴķ一世=一种一世-1个-μĴķ一世2σĴķ一世

其中是的元素。请注意,必须始终为正,但这是标准差的典型要求,因此并不令人惊讶。σĴķ一世σĴķ一世σĴķ一世

如果需要,马哈拉诺比斯距离足够通用,可以将协方差矩阵定义为其他矩阵。例如,如果协方差矩阵是恒等矩阵,则我们的马氏距离减少为欧几里得距离。尽管很常见,并且被称为标准化欧几里得距离ΣĴķ一世ΣĴķ一世=诊断σĴķ一世

无论哪种方式,一旦选择了距离函数,我们都可以通过以下方式计算一种Ĵ一世

一种Ĵ一世=ķwĴķ一世ρžĴķ一世

在这些网络中,出于某种原因,他们选择在应用激活函数后乘以权重。

它描述了如何创建多层径向基函数网络,但是,通常只有这些神经元之一,其输出就是该网络的输出。它被绘制为多个神经元,因为该单个神经元的每个均值向量和每个标准偏差向量被视为一个“神经元”,然后在所有这些输出之后又有另一个层就像上面的一样,将这些计算值的总和乘以权重。在最后用“求和”向量将其分为两层对我来说似乎很奇怪,但这就是他们所做的。μĴķ一世σĴķ一世一种Ĵ一世

另请参阅此处

径向基函数网络激活函数

高斯型

ρžĴķ一世=经验值-1个2žĴķ一世2

高斯型

多二次

选择某个点。然后我们计算从到的距离:XÿžĴ一世0Xÿ

ρžĴķ一世=žĴķ一世-X2+ÿ2

这是从维基百科。它不受限制,并且可以是任何正值,尽管我想知道是否有一种将其标准化的方法。

当,这等效于绝对值(水平偏移)。ÿ=0X

多二次

逆多二次

除翻转外,与二次方相同:

ρžĴķ一世=1个žĴķ一世-X2+ÿ2

逆多二次

*来自使用SVG的完整图形的图形


11
欢迎来到简历。+6这真是棒极了。我希望我们将来会看到更多类似的东西。
gung

1
还有和probit 形式的平滑整流线性函数。日志1个+经验值X
2015年

好的,我想我添加了Logit,Probit和Complementary日志日志,但是我对这些主题没有深刻的了解,因此我可能误解了它们的书面形式。这个对吗?
菲利达2015年

3
这将是一篇有趣的论文,上面有很多参考文献。例如arxiv.org/abs/1505.03654。如果您决定写论文并需要其他参考,请随时与我联系。
Hunaphu 2015年

9
有人应该使用Elu,Leaky ReLU,PReLU和RReLU进行更新。
Viliami

24

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

常用的激活功能

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

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

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

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

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

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

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

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

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

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

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

在此处输入图片说明

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

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

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


许可证:


MIT许可证(MIT)

版权所有(c)2015 Andrej Karpathy

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

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

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

其他连结:


10

我认为不存在具有优缺点的清单。激活函数高度依赖于应用程序,并且它们还取决于神经网络的体系结构(例如,在这里您看到两个softmax函数的应用,类似于sigmoid函数)。

您可以找到有关这些功能的一般行为的一些研究,但我认为您永远不会有一个已定义且确定的列表(您要问的是...)。

我仍然是学生,所以我指出了到目前为止的知识:

  • 在这里,您可以找到有关tanh和乙状结肠反向传播行为的一些想法。谭(Tanh)更通用,但有S型...(总会有一个“ but”)
  • 在Glorot Xavier等人的《深度稀疏整流器神经网络》中,他们指出整流器单元在生物学上更合理,并且其性能优于其他整流器(S型/ tanh)。

这是“正确”的答案。可以产生一个列表,但优缺点完全取决于数据。实际上,学习激活函数在理论上要合理得多。对此没有太多研究关注的原因是乙状结肠“有效”。最后,您唯一的收获就是收敛速度,这通常并不重要
runDOSrun 2015年

4

仅出于丹尼尔(Danielle)出色答案的完整性的考虑,还有其他范式,其中一个随机地“旋转”权重和/或激活类型:液态状态机极限学习机回声状态网络

考虑这些体系结构的一种方法:存储库是SVM中的一种内核,或者是简单FFNN中的一个大隐藏层,其中数据被投影到某些超空间。没有实际的学习,将重新生成储层,直到获得满意的解决方案为止。

还可以看到这个不错的答案


2

可以在以下位置找到有关最近激活功能的文章:

Chigozie Enyinna Nwankpa,Winifred Ijomah,Anthony Gachagan和Stephen Marshall的“ 激活功能:深度学习实践和研究趋势的比较

迄今为止,深度神经网络已成功应用于各种新兴领域,以解决可能具有更多深度学习(DL)架构的现实世界复杂问题。为了实现这些最新性能,DL体系结构使用激活功能(AF),以在任何给定DL体系结构的隐藏层和输出层之间执行各种计算。本文对深度学习应用中使用的现有AF进行了调查,并重点介绍了将激活功能用于深度学习应用的最新趋势。本文的新颖之处在于,它对DL中使用的大多数AF进行了编译,并针对最新的研究成果概述了在实际深度学习部署中这些功能的应用和使用的当前趋势。该编译将有助于为准备部署的任何给定应用程序选择最合适和最合适的激活功能做出有效的决策。本文之所以适时,是因为大多数关于AF的研究论文都强调了类似的工作和结果,而本文将是第一篇根据迄今为止在深度学习研究中发现的文献研究结果汇编出在实践中应用AF的趋势。

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.