在神经网络中,激活函数决定节点从给定输入集的输出,其中非线性激活函数允许网络复制复杂的非线性行为。由于大多数神经网络都使用某种形式的梯度下降进行了优化,因此激活函数需要是可微的(或至少几乎是完全可微的)。此外,复杂的激活函数可能会导致一些梯度消失或爆炸。因此,神经网络倾向于部署几个特定的??激活函数(identity、sigmoid、ReLU及其变体)。下图是26个激活函数及其一阶导数的示意图,图右侧是神经网络相关的一些属性。1.Step激活函数Step更偏向于理论而不是现实。它模仿生物神经元的全有或全无属性。它不能应用于神经网络,因为它的导数为0(零点导数除外,它是未定义的),这意味着基于梯度的优化方法是不可行的。2.Identity通过激活函数Identity,节点的输入等于输出。它非常适合底层行为是线性的(类似于线性回归)的任务。当存在非线性时,单独使用这个激活函数是不够的,但它仍然可以作为回归任务最终输出节点上的激活函数。3.ReLU整流线性单元(ReLU)是神经网络中最常用的激活函数。它保留了步进函数的生物启发式(神经元仅在输入超过阈值时才会触发),但当输入为正时,导数不为零,从而允许基于梯度的学习(尽管在x=0时,导数未定义)。使用此函数可使计算速度非常快,因为该函数及其导数均不涉及复杂的数学运算。但是,当输入为负时,ReLU的学习速度可能会变得很慢,甚至让神经元直接失效,因为此时输入小于零,梯度为零,所以它的权值无法更新,并且在剩下的整个训练过程中都会保持沉默。4.SigmoidSigmoid众所周知,它在逻辑回归中的重要作用,其取值范围在0到1之间。LogisticSigmoid(或通常所说的Sigmoid)激活函数将概率的概念引入神经网络。它的导数是非零的并且易于计算(作为其初始输出的函数)。但在分类任务中,sigmoid正逐渐被Tanh函数取代成为标准激活函数,因为后者是奇函数(关于原点对称)。5.Tanh在分类任务中,双曲正切函数(Tanh)逐渐取代Sigmoid函数成为标准的激活函数,具有很多神经网络喜爱的特性。它是完全可微的,反对称的,对称中心在原点。为了解决学习缓慢和/或梯度消失的问题,可以使用此函数的更多渐变变体(log-log、softsign、对称sigmoid等)6.LeakyReLU经典(并广泛使用)ReLU激活函数的变体,即LeakyReLU的输出对负输入有一个小的斜率。由于导数总是非零的,这减少了沉默神经元的出现,允许基于梯度的学习(尽管很慢)。7.PReLU参数化整流线性单元(ParametericRectifiedLinearUnit,PReLU)是ReLU校正类激活函数的一员。它与RReLU和LeakyReLU有一些共同点,那就是它为负输入添加了一个线性项。而最关键的区别在于,这个线性项的斜率实际上是在模型训练期间学习到的。8.RReLURandomizedLeakyRectifiedLinearUnit(RReLU)也是ReLU修正类激活函数的一员。与LeakyReLU和PReLU非常相似,为负输入添加了一个线性项。最关键的区别是这个线性项的斜率是在每个节点随机分配的(通常服从均匀分布)。9.ELU指数线性单元(ExponentialLinearUnit,ELU)也是ReLU校正类激活函数的一员。与PReLU和RReLU一样,为负输入添加了一个非零输出。与其他修改后的激活函数不同,它包含一个负指数项以防止沉默神经元出现,导数收敛于零,从而提高学习效率。10.SELU扩展指数线性单元(ScaledExponentialLinearUnit,SELU)是激活函数指数线性单元(ELU)的变体。其中λ和α是固定值(分别为1.0507和1.6726)。这些值(零均值/单位方差)背后的推论构成了自归一化神经网络(SNN)的基础。11.S形整流线性激活单元(SReLU)属于以ReLU为代表的整流激活函数家族。它由三个分段线性函数组成。这两个函数的斜率以及函数相交的位置是在模型训练期间学习的。12.HardSigmoidHardSigmoid是LogisticSigmoid激活函数的分段线性逼近。它在计算上更易于处理,这使得学习计算速度更快,尽管第一个导出的值为零可能会导致神经元沉默/学习率太慢(有关详细信息,请参见ReLU)。13.HardTanhHardTanh是Tanh激活函数的线性分段逼近。它相对更容易计算,这使得学习计算速度更快,尽管第一个导出的零值可能导致神经元沉默/学习率太慢(详见ReLU)。14.LeCunTanhLeCunTanh(也称为ScaledTanh)是Tanh激活函数的扩展版本。它具有以下可以改进学习的特性:f(±1)=±1;二阶导数在x=1处最大化;并且有效增益接近1。15.ArcTan在视觉上类似于双曲正切(Tanh)函数,ArcTan激活函数更平坦,这使得它比其他双曲线更清晰。默认情况下,其输出范围在-π/2和π/2之间。它的导数更慢地趋于零,这意味着更有效的学习。但这也意味着导数的计算比Tanh更昂贵。16.SoftsignSoftsign是Tanh激活函数的另一种替代方法。和Tanh一样,Softsign是反对称的、去中心化的、可微的,返回值介于-1和1之间。它更平坦的曲线和更慢的下降导数表明它可以更有效地学习。另一方面,导数的计算比Tanh更麻烦。17.SoftPlus作为ReLU的一个很好的替代品,SoftPlus可以返回任何大于0的值。与ReLU不同,SoftPlus的导数是连续的、非零的、无处不在的,防止沉默神经元。然而,SoftPlus和ReLU的另一个区别是它的不对称性,它不以零为中心,这可能会阻碍学习。另外,由于导数往往小于1,也可能会出现梯度消失的问题。18、Signum激活函数Signum(或简称Sign)是二元步激活函数的扩展版本。它的取值范围是[-1,1],原值是0。尽管阶跃函数缺乏生物学动机,但Signum仍然是反对称的,这是激活函数的一个有利特征。19.BentIdentity激活函数BentIdentity是Identity和ReLU之间的折衷。它允许非线性行为,尽管它的非零导数有效地改进了学习并克服了与ReLU相关的沉默神经元问题。由于它的导数可以返回1任一侧的值,因此它容易受到梯度爆炸和梯度消失的影响。20.SymmetricalSigmoidSymmetricalSigmoid是Tanh激活函数的另一种变体(实际上相当于输入减半的Tanh)。和Tanh一样,它是反对称的、零中心的、可微的,范围在-1和1之间。它更平坦的形状和更慢的下降推导表明它可以更有效地学习。21、LogLogLogLog激活函数(从上面的f(x)我们可以看出该函数是以e为底的嵌套指数函数)取值范围为[0,1],ComplementaryLogLog激活函数函数有可能取代经典的Sigmoid激活函数。函数饱和更快,零点值高于0.5。22.Gaussian高斯激活函数(Gaussian)不是径向基函数网络(RBFN)中常用的高斯核函数,高斯激活函数在多层感知器类模型中不是很流行。该函数处处可微且为偶数,但一阶导数很快收敛于零。23.Absolute顾名思义,Absolute激活函数返回输入的绝对值。此函数的导数在除零处以外的任何地方都定义,并且导数的大小在任何地方都为1。这个激活函数一定不能经历梯度爆炸或消失。24.Sinusoid与余弦函数一样,Sinusoid(或简单的正弦函数)激活函数将周期性引入神经网络。这个函数的取值范围是[-1,1],导数处处连续。此外,Sinusoid激活函数是一个零对称性的奇函数。25.Cos就像一个正弦函数,余弦激活函数(Cos/Cosine)给神经网络引入了周期性。它的取值范围是[-1,1],导数处处连续。与正弦函数不同,余弦函数是一个不关于零对称的偶函数。26、SincSinc函数(全称CardinalSine)在信号处理中尤为重要,因为它代表了矩形函数的傅里叶变换。作为激活函数,其优势在于可微性和对称性,但更容易出现梯度消失的问题。原文:https://dashee87.github.io/data%20science/deep%20learning/visualising-activation-functions-in-neural-networks/【本文为机器之心专栏原文翻译,微信公众号《机器之心(id:almosthuman2014)》】点此阅读作者更多好文
