是否有参考文献提供了神经网络中激活函数及其优缺点的完整列表(理想情况下还提供了一些成功或不太成功的出版物的指针)?
sin(x)
,请参见openreview.net/pdf?id=Sks3zF9eg。
是否有参考文献提供了神经网络中激活函数及其优缺点的完整列表(理想情况下还提供了一些成功或不太成功的出版物的指针)?
sin(x)
,请参见openreview.net/pdf?id=Sks3zF9eg。
Answers:
我将在这里开始列出到目前为止所学的内容。正如@marcodena所说,优缺点比较困难,因为它主要只是尝试这些方法而获得的启发式方法,但我认为至少要列出它们不会受到伤害的列表。
首先,我将明确定义符号,以免造成混淆:
这种表示法来自尼尔森的书。
前馈神经网络是连接在一起的多层神经元。它接受一个输入,然后该输入通过网络“点滴”,然后神经网络返回一个输出向量。
更正式地,调用所述的活化(又名输出)神经元中的层,其中是在输入向量的元素。我吨ħ一个1 Ĵ Ĵ 吨ħ
然后,我们可以通过以下关系将下一层的输入与上一层的输入关联起来:
哪里
有时我们写来表示,换句话说,就是在应用激活函数之前神经元的激活值。 Σ ķ(瓦特我Ĵ ķ ⋅ 一个我- 1 ķ)+ b 我Ĵ
为了更简洁的表示,我们可以写
要使用此公式为某些输入计算前馈网络的输出,请设置,然后计算,其中,是层数。一个1 = 我一个2,一个3,... ,一米米
(在下面,为了可读性,我们将编写而不是)e x
也称为线性激活函数。
选择一些和,这是我们的“范围”。小于此范围的所有内容都将为0,大于此范围的所有内容都将为1。正式地: x 最大
哪里
和
请参阅高效反向传播。
缩放比例:
也称为整流线性单位(ReLU),最大值或斜坡函数。
这些是我一直在玩的一些激活功能,出于神秘的原因,这些功能对于MNIST而言似乎具有非常好的性能。
缩放比例:
缩放比例:
也称为平滑整流线性单位,平滑最大或软加
缩放比例:
其中是错误函数。不能通过基本函数来描述它,但是您可以在该Wikipedia页面和此处找到近似的方法。
或者,它可以表示为
缩放比例:
参见随机厨房水槽。
也称为归一化指数。
这个有点奇怪,因为单个神经元的输出依赖于该层中的其他神经元。由于可能是一个非常高的值,因此它的确也很难计算,在这种情况下可能会溢出。同样,如果是一个非常低的值,它将下溢并变为。
为了解决这个问题,我们将改为计算。这给我们:
在这里,我们需要使用log-sum-exp技巧:
假设我们正在计算:
为了方便起见,我们将首先按幅度对指数进行排序:
然后,由于是我们的最高点,因此我们乘以:
然后,我们可以计算右侧的表达式并取其对数。这样做是可以的,因为相对于,该和非常小,因此任何下溢到0的意义都不足以使之有所作为。右边的表达式中不会发生溢出,因为我们保证在乘以,所有幂将都是。
形式上,我们称。然后:
然后,我们的softmax函数变为:
另外,softmax函数的导数为:
这个也有些棘手。本质上,我们的想法是将maxout层中的每个神经元分解为许多子神经元,每个子神经元都有自己的权重和偏见。然后,神经元的输入改为到达其每个子神经元,每个子神经元仅输出其(不应用任何激活函数)。那么该神经元的是其所有子神经元输出的最大值。
形式上,在单个神经元中,我们有亚神经元。然后
哪里
(是点积)
为了帮助我们考虑这一点,请考虑使用例如S形激活函数的神经网络的层的权重矩阵。是2D矩阵,其中每一列是神经元的向量,其中包含前一层每个神经元的权重。
如果我们要有子神经元,则每个神经元都需要一个2D权重矩阵,因为每个子神经元都需要一个包含上一层中每个神经元权重的向量。这意味着现在是3D权重矩阵,其中每个是单个神经元的2D权重矩阵。然后是神经元中亚神经元的向量,其中包含前一层每个神经元的权重。
同样,在再次使用例如S形激活函数的神经网络中,是层每个神经元具有偏差的向量。
要使用子神经元来实现此目的,我们需要为每个层一个二维偏差矩阵,其中是向量,其中中的每个子神经元都有的偏差。神经元。
具有权重矩阵和偏置矢量对于每个神经元然后使上式很清楚,它简单地将每个子神经元的权重到输出从层,然后应用它们的偏差并取它们的最大值。
径向基函数网络是前馈神经网络的一种修改,其中使用
我们有一个重量每个节点在先前层(正常),以及一个均值向量和一个标准偏差矢量对中的每个节点上一层。
然后我们将激活函数称为以避免将其与标准偏差向量混淆。现在要计算我们首先需要为上一层中的每个节点计算一个。一种选择是使用欧几里得距离:
其中是的元素。这个不使用。另外,还有马哈拉诺比斯距离,据推测效果更好:
其中是协方差矩阵,定义为:
换句话说,是对角线与矩阵,因为它是对角元素。我们在这里将和为列向量,因为这是通常使用的表示法。
这些实际上只是在说马氏距离定义为
其中是的元素。请注意,必须始终为正,但这是标准差的典型要求,因此并不令人惊讶。
如果需要,马哈拉诺比斯距离足够通用,可以将协方差矩阵定义为其他矩阵。例如,如果协方差矩阵是恒等矩阵,则我们的马氏距离减少为欧几里得距离。尽管很常见,并且被称为标准化欧几里得距离。
无论哪种方式,一旦选择了距离函数,我们都可以通过以下方式计算
在这些网络中,出于某种原因,他们选择在应用激活函数后乘以权重。
它描述了如何创建多层径向基函数网络,但是,通常只有这些神经元之一,其输出就是该网络的输出。它被绘制为多个神经元,因为该单个神经元的每个均值向量和每个标准偏差向量被视为一个“神经元”,然后在所有这些输出之后又有另一个层就像上面的一样,将这些计算值的总和乘以权重。在最后用“求和”向量将其分为两层对我来说似乎很奇怪,但这就是他们所做的。
另请参阅此处。
选择某个点。然后我们计算从到的距离:
这是从维基百科。它不受限制,并且可以是任何正值,尽管我想知道是否有一种将其标准化的方法。
当,这等效于绝对值(水平偏移)。
除翻转外,与二次方相同:
一个这样的列表,尽管不是很详尽:http : //cs231n.github.io/neural-networks-1/
常用的激活功能
每个激活函数(或非线性函数)取一个数字并对其执行某个固定的数学运算。在实践中可能会遇到几种激活功能:
左: S型非线性将实数压缩在[0,1]之间。右: tanh非线性将实数压缩在[-1,1]之间。乙状结肠。S形非线性的数学形式为,如左图所示。正如上一节所提到的,它采用一个实数值并将其“压缩”到0到1之间的范围内。特别是,大的负数变为0,大的正数变为1。因为它对神经元的激发速率有很好的解释:从根本不激发(0)到以假定的最大频率(1)完全饱和激发。在实践中,S形非线性最近已失宠,很少使用。它有两个主要缺点:
- 乙状结肠饱和并杀死梯度。乙状神经元的一个非常不希望的特性是,当神经元的激活在0或1的尾部饱和时,这些区域的梯度几乎为零。回想一下,在反向传播期间,此(局部)梯度将与整个目标的此门输出的梯度相乘。因此,如果局部梯度很小,它将有效地“杀死”该梯度,几乎没有信号将通过神经元流向其权重并递归地传递至其数据。另外,在初始化乙状神经元的权重以防止饱和时必须格外小心。例如,如果初始权重太大,则大多数神经元将变得饱和,网络将几乎无法学习。
- 乙状结肠输出不是零中心的。这是不希望的,因为神经网络中处理的后续层中的神经元(即将对此进行详细介绍)将接收到非零中心的数据。这对梯度下降期间的动力学有影响,因为如果进入神经元的数据始终为正(例如, 则在元素级),则权重的梯度 将在反向传播期间变为全部为正,或全部为负(取决于整个表达式的梯度 )。这可能会在权重的梯度更新中引入不希望的之字形动力学。但是,请注意,一旦将这些梯度添加到一批数据中,权重的最终更新就可以具有可变的符号,从而在某种程度上缓解了此问题。因此,这是一个不便,但是与上面的饱和激活问题相比,后果不那么严重。
丹妮 tanh非线性显示在右上方的图像中。它将实数值压缩到[-1,1]范围内。像乙状结肠神经元一样,它的激活是饱和的,但是与乙状结肠神经元不同,它的输出是零中心的。因此,实际上,tanh非线性总是比S形非线性更好。还要注意,tanh神经元只是一个缩放的S型神经元,尤其是以下条件成立:。
左:整流线性单位(ReLU)激活函数,当x <0时为零,然后在x> 0时线性为斜率1。右: Krizhevsky等人的图。(pdf)文件指出,与tanh单元相比,ReLU单元的收敛性提高了6倍。ReLU。整流线性单元在最近几年变得非常流行。它计算函数。换句话说,激活仅将阈值设为零(请参见左上方的上图)。使用ReLU有很多优点和缺点:
- (+)发现与S型/ tanh函数相比,随机梯度下降的收敛速度大大加快(例如Krizhevsky等人的系数为6 )。有人认为这是由于其线性,非饱和形式。
- (+)与涉及昂贵操作(指数等)的tanh /乙状神经元相比,ReLU可以通过简单地将激活矩阵阈值设为零来实现。
- (-)不幸的是,ReLU单元在训练过程中可能很脆弱,并且可能“死亡”。例如,流过ReLU神经元的大梯度可能导致权重更新,以使神经元再也不会在任何数据点上激活。如果发生这种情况,那么从该点开始,流经设备的梯度将永远为零。也就是说,ReLU单元在训练期间可能会不可逆地死亡,因为它们可能会从数据总管上脱落。例如,如果将学习速率设置得太高,您可能会发现多达40%的网络可能是“死的”(即永远不会在整个训练数据集中激活的神经元)。通过正确设置学习率,这将不再是一个问题。
ReLU泄漏。泄漏的ReLU是解决“垂死的ReLU”问题的一种尝试。当x <0时,函数不为零,而是泄漏的ReLU将具有较小的负斜率(约为0.01)。也就是说,函数计算其中是一个小常数。有人报告使用这种形式的激活功能成功,但是结果并不总是一致的。负区域中的斜率也可以作为每个神经元的参数,如Kaiming He等人在2015年的《深入研究整流器》中介绍的PReLU神经元中所示。但是,目前跨任务的收益一致性不清楚。
Maxout。已经提出了不具有的函数形式的其他类型的单元,其中在权重和数据之间的点积上施加了非线性。一种相对流行的选择是Maxout神经元(由Goodfellow等人最近引入 ),它对ReLU及其泄漏版本进行了概括。Maxout神经元计算函数。请注意,ReLU和Leaky ReLU都是这种形式的特例(例如,对于ReLU,我们有)。因此,Maxout神经元享有ReLU单元的所有优点(线性操作方式,无饱和状态),并且没有缺点(即将死去的ReLU)。但是,与ReLU神经元不同,它使每个神经元的参数数量增加了一倍,从而导致参数总数很高。
这结束了我们对最常见的神经元类型及其激活功能的讨论。最后一点,即使在同一网络中混合和匹配不同类型的神经元,也很少见,尽管这样做根本没有问题。
TLDR:“ 我应该使用哪种神经元类型? ”使用ReLU非线性,小心您的学习率,并可能监视网络中“死”单元的比例。如果这与您有关,请尝试Leaky ReLU或Maxout。切勿使用乙状结肠。尝试使用tanh,但希望它的性能比ReLU / Maxout差。
许可证:
MIT许可证(MIT)版权所有(c)2015 Andrej Karpathy
特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制使用软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本,并允许具备软件的人员这样做,但须满足以下条件:
以上版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。
本软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性,特定目的的适用性和非侵权性的担保。无论是由于软件,使用或其他方式产生的,与之有关或与之有关的合同,侵权或其他形式的任何索赔,损害或其他责任,作者或版权所有者概不负责。软件。*
其他连结:
我认为不存在具有优缺点的清单。激活函数高度依赖于应用程序,并且它们还取决于神经网络的体系结构(例如,在这里您看到两个softmax函数的应用,类似于sigmoid函数)。
您可以找到有关这些功能的一般行为的一些研究,但我认为您永远不会有一个已定义且确定的列表(您要问的是...)。
我仍然是学生,所以我指出了到目前为止的知识:
可以在以下位置找到有关最近激活功能的文章:
Chigozie Enyinna Nwankpa,Winifred Ijomah,Anthony Gachagan和Stephen Marshall的“ 激活功能:深度学习实践和研究趋势的比较 ”
迄今为止,深度神经网络已成功应用于各种新兴领域,以解决可能具有更多深度学习(DL)架构的现实世界复杂问题。为了实现这些最新性能,DL体系结构使用激活功能(AF),以在任何给定DL体系结构的隐藏层和输出层之间执行各种计算。本文对深度学习应用中使用的现有AF进行了调查,并重点介绍了将激活功能用于深度学习应用的最新趋势。本文的新颖之处在于,它对DL中使用的大多数AF进行了编译,并针对最新的研究成果概述了在实际深度学习部署中这些功能的应用和使用的当前趋势。该编译将有助于为准备部署的任何给定应用程序选择最合适和最合适的激活功能做出有效的决策。本文之所以适时,是因为大多数关于AF的研究论文都强调了类似的工作和结果,而本文将是第一篇根据迄今为止在深度学习研究中发现的文献研究结果汇编出在实践中应用AF的趋势。