大家好,我是Peter~最近在reddit上发现了一张很形象的móxìng图。该图表示深度学习中常用的激活函数。那么我们来梳理一下深度学习中不可或缺的激活函数吧!激活函数激活函数是添加到人工神经网络的函数,可帮助网络学习数据中的复杂模式。与人脑中基于神经元的模型类似,激活函数最终决定什么被激发到下一个神经元。在人工神经网络中,节点的激活函数定义节点在给定一个输入或一组输入时的输出。一个标准的计算机芯片电路可以被认为是一个数字电路激活函数,它根据输入产生一个打开(1)或关闭(0)的输出。因此,激活函数是决定神经网络输出的数学方程。本文概述了深度学习中十种常见的激活函数及其优缺点。首先我们来了解一下人工神经元的工作原理,大致如下:上述过程的数学可视化过程如下图所示:Sigmoid激活函数Sigmoid函数的图像看起来像一个S形曲线.函数表达式如下:什么情况下适合使用Sigmoid激活函数?Sigmoid函数的输出范围是0到1。它对每个神经元的输出进行归一化,因为输出值在0到1之间有界;对于将预测概率作为输出的模型。由于概率范围是0到1,所以Sigmoid函数非常适合;梯度平滑以避免“跳跃”输出值;函数是可微分的。这意味着可以找到任意两点的S形曲线的斜率;一个明确的预测,即非常接近1或0。S形激活函数的缺点是什么?它往往具有消失的梯度;函数输出不以0为中心,降低了权重更新的效率;sigmoid函数执行指数运算,计算机运行速度较慢。tanh/双曲正切激活函数tanh激活函数的形象也是S形的,表达式如下:tanh是一个双曲正切函数。tanh函数和sigmoid函数的曲线比较相似。但它比sigmoid函数有一些优势。首先,当输入较大或较小时,输出几乎平滑,梯度较小,不利于权值更新。两者的区别在于输出区间,tanh的输出区间为1,整个函数以0为中心,优于sigmoid函数;在tanh图中,负输入将强烈映射到负,零输入将映射到接近零。注意:在一般的二元分类问题中,隐藏层使用tanh函数,输出层使用sigmoid函数,但这并不是固定的,需要根据具体问题进行调整。ReLU激活函数ReLU激活函数图像如上图所示,函数表达式如下:ReLU函数是深度学习中流行的激活函数。与sigmoid函数和tanh函数相比,它有以下优点:当输入为正时,不存在梯度饱和问题。计算要快得多。ReLU函数中只有线性关系,因此可以比sigmoid和tanh更快地计算。当然它也有缺点:DeadReLU问题。当输入为负时,ReLU完全失效,这在前向传播期间不是问题。有些地区是敏感的,有些则不是。但是在反向传播的过程中,如果输入为负,梯度会完全为零,sigmoid函数和tanh函数也有同样的问题;我们发现ReLU函数的输出是0或者正数,这说明ReLU函数不是从0中心函数开始的。LeakyReLU是专门用来解决DeadReLU问题的激活函数:ReLUvsLeakyReLU为什么LeakyReLU比ReLU好?ImageLeakyReLU是通过给负输入(0.01x)一个非常小的x线性分量来调整负值的零梯度问题;leak有助于扩大ReLU函数的范围,通常a的取值在0.01左右;LeakyReLU的函数范围是(负无穷大到正无穷大)。注:理论上LeakyReLU具有ReLU的所有优点,DeadReLU不会有任何问题,但在实践中,还没有完全证明LeakyReLU总是优于ReLU。ELUELUvsLeakyReLUvsReLUELU的提出也解决了ReLU的问题。与ReLU相比,ELU具有负值,这使得激活的均值接近于零。接近于零的平均激活可以使学习更快,因为它们使梯度更接近自然梯度。显然,ELU具有ReLU的所有优点,并且:不存在DeadReLU问题,输出的平均值接近于0,且以0为中心;ELU通过减少biasoffset的影响,使法线梯度更接近单位自然梯度,从而使均值加速学习趋向于零;ELU对于小输入饱和为负值,减少前向传播的变化和信息。一个小问题是它的计算量更大。类似于LeakyReLU,虽然理论上优于ReLU,但目前在实践中并没有很好的证据表明ELU总是优于ReLU。PReLU(ParametricReLU)PReLU也是ReLU的改进版:看PReLU的公式:参数α通常是0到1之间的一个数,通常比较小。如果a_i=0,则f变为ReLU如果a_i>0,则f变为leakyReLU如果a_i是可学习参数,则f变为PReLUPReLUReLU的优点如下:在负范围内,PReLU的斜率更小,这也可以避免DeadReLU问题。与ELU相比,PReLU是负域中的线性运算。虽然斜率很小,但不会趋于0。SoftmaxSoftmax是多类分类问题的激活函数,其中两个以上的类标签需要类成员资格。对于任意一个长度为K的实数向量,Softmax可以将其压缩成一个长度为K的实数向量,取值范围为(0,1),向量中元素之和为1。Softmax不同于普通的max函数:max函数只输出最大值,但是Softmax保证较小的值概率较小,不直接丢弃。我们可以将其视为argmax函数的概率或“软”版本。Softmax函数的分母结合了原始输出值的所有因素,也就是说Softmax函数得到的各种概率是相互关联的。Softmax激活函数的主要缺点是:它在零处不可微;负输入的梯度为零,这意味着对于该区域的激活,权重在反向传播期间不会更新,因此会产生永远不会激活的死神经元。Swish函数表达:Swish的设计灵感来自于LSTM中sigmoid函数的使用和高速网络中的门控。我们使用相同的门控值来简化门控机制,称为自门控。自门控的优点是只需要一个简单的标量输入,而普通门控需要多个标量输入。这使得自门控激活函数(例如Swish)能够轻松替换采用单个标量输入(例如ReLU)的激活函数,而无需更改隐藏容量或参数数量。Swish激活函数的主要优点如下:“无界”有助于防止梯度在缓慢训练时逐渐趋近于0而导致饱和;(同时有界性也有优势,因为有界激活函数可以有很强的Regularization,也可以解决大的负输入问题);微分常数>0;平滑度在优化和泛化中起着重要作用。Maxout在Maxout层,激活函数是输入的最大值,所以一个只有2个maxout节点的多层感知器可以拟合任何凸函数。单个Maxout节点可以解释为对实值函数的分段线性逼近(PWL),其中函数图上任意两点之间的线段位于图(凸函数)上方。对于d维向量(V)也可以实现Maxout:假设两个凸函数h_1(x)和h_2(x),由两个Maxout节点逼近,函数g(x)是一个连续的PWL函数。因此,由两个Maxout节点组成的Maxout层可以很好地逼近任何连续函数。SoftplusSoftplus函数:Softplus的导数是:又名logistic/sigmoid函数。Softplus函数和ReLU函数类似,但是比较平滑,和ReLU一样,是单边压制。它接受的范围很广:(0,+inf)。
