【学习笔记】Sigmoid, Relu, Swish, Gelus, Maxout等常用激活函数的分析学习

Sigmoid, Relu, Swish, Gelus, Maxout等常用激活函数的分析学习

  本文主要针对邱锡鹏老师《NNDL》中3.1节中提及的集中激活函数做了一下对比记录,并不较少激活函数本身,只是从发展和优缺点的角度去评价他们。并尝试在他们当中找出可改进的角度和变化趋势。

  首先给出今天参与对比的激活函数们:Sigmoid系列(Logistic, Tanh, Hard-L&T), ReLU函数系列(ReLU, Leaky ReLU, PReLU, ELU, Softplus), 谷歌的Swish函数, BERT中应用的GELUS函数以及Maxout单元。一个个来说,并且在叙述后者时加入与前者的对比。

  首先,给出激活函数的通用特性:1.连续并且可导;2.函数比较简单;3.函数值域在一个合适的区间,不能偏大也不能偏小。

Sigmoid函数系列

  该系列函数容易饱和,存在梯度消失问题(梯度消失是指Sigmoid函数存在的饱和区导数接近于0,误差经过每一层都会不断地衰减,当网络层数较深时,梯度就会不停的衰减甚至消失)。SIgmoid函数会导致一个非稀疏的神经网络。

Logistic函数

  直接分析其特点:(其余没写在这里的在后面的对比中给出)

  • Logistic函数首先是具备Sigmoid的标准特性,两端饱和(即趋向于无穷时导数为零)。
  • 有‘挤压’特性的函数,可以看做把一个实数域的输入“挤压”到了(0,1)区间上。
  • 与感知机阶跃函数相比,其输出可以直接看成概率分布,使得神经网络可以更好的与机器学习模型结合。
  • 理解上,可以将其看作“软性门”,可以用来控制其他神经元输出信息的数量。

Tanh函数

  对比分析Tanh函数:

  • 与Logistic相比,它是一个零中心化的函数(而Logistic不是,可以参考下文图像直观看出),可以减少带给后一层神经元的偏置偏移,提高梯度下降的效率(收敛得更快)。
  • 同样有着刚才Logistic的特性,也是两端饱和函数,只不过值域扩大了一倍。
  • 与Logistic一样,属于指数运算函数,梯度下降过程计算量较大。
Chart1:Logistic函数图像与Sigmoid函数图像比较图

Hard-L&T函数

  Hard_Logistic和Hard_Tanh是前面两种Sigmoid函数的Hard版,解决了两端饱和性问题但依然没解决指数运算量大的问题。

  • 比前者们更易进行拟合,两端饱和部分被一阶泰勒展开函数进行线性化处理后在进行梯度计算的时候明显的收敛速度加快。
  • 至于函数是否零中心化此二者与其非Hard版本保持一致,并且继承其前者的其他优点。

  但是尽管有如此多的优点,Sigmoid函数仍然位于激活函数鄙视链的最底端,属于早起是用的深度学习激活函数,前几年开始使用的激活函数选择顺序就已经是:Elus > Relu > Sigmoid了,现在更是有了谷歌的Swish函数出现,所以现在已经很少单独使用Sigmoid作为激活函数了。

Chart2:两种函数的Hard版本与原图相比较

ReLU函数系列

  该系列函数存在的问题是缺乏随机因素,参数设置上主观性较强,实际应用时需要对网络模型参数初始化过程不断调整和测试来避免过拟合问题。ReLU函数所带来的稀疏性相比Sigmoid函数好得多。原始的ReLU现在也已经不太被应用了,更多的我们应该关注它的变种函数。但我们先来看的是原始的ReLU,并且用他来对比改进的变种函数。

ReLU函数

  原始的ReLU函数非常简单,所以采用ReLU的神经元只需要进行加、乘和比较的操作,计算上更加高效。

  • 简单,计算高效。
  • 和Logistic一样也是非零中心化的激活函数(给下一层产生偏置偏移,影响梯度下降效果)。
  • 与Sigmoid系列函数相比的时候,能够体现ReLU缓解了梯度消失的问题,加速了梯度下降的收敛速度。
  • 单侧抑制(一侧函数值为0)。
  • 宽兴奋边界(兴奋度可以达到很高)。
  • 致命的缺陷是会发生死亡现象。
  • 和Logistic函数一样无法产生负值,影响梯度下降收敛速度。
  • 具有稀疏表达能力(可以产生0,而Sigmoid饱和只能近似接近0而产生不了0)

Leaky ReLU函数

  在ReLU基础上当x<0是引入一个非常小的γ值来作为梯度,这样就可以避免ReLU的神经元死亡问题了。

  • 能够避免神经元死亡问题。
  • 不会产生过拟合问题。
  • 计算也相对后面几种模型比较简单(比如与ELU和前面的基于指数运算的函数相比)。
  • 由于可以避免死亡,同时补充了梯度,所以其收敛速度甚至比原始ReLU还要快。

PReLU函数

  和刚才的Leaky ReLU相比只是将参数变化为了一个向量的形式,向量内元素个数与该层神经元个数相同,为每个神经元路径配置不同的参数。参数可通过学习得到。

  • 允许不同的神经元拥有不同的参数,灵活性更高,应用于机器学习过程时可以有更好的拟合效果,但和刚才L-ReLU不同,现在过拟合的可能性又重新出现了。
  • 计算量相对来说要多了一些,但不是致命的缺陷(依然比指数运算类要好很多)。
  • 更加适合应用于实际模型学习当中,更符合一般实际问题的性质,但参数学习过程复杂。
  • 向上继承了刚才L-ReLU模型防止神经元死亡的优点。

ELU函数

  将ReLU函数<0部分平滑化,线性转饱和,图像呈近似零中心化。虽然存在梯度饱和与指数运算的问题,但跟Sigmoid相比依然要好上很多。

  • 事实上ELU的效率比以上三种ReLU还要高,他相当于取了比较折中的方案,首先它避免了无负值的缺陷。
  • 但加上了负值就无可避免的出现平滑曲线,虽然相当于重新引入了饱和曲线,只不过优点的作用更大。
  • 同样也因此避免了死亡的产生。
  • 指数运算也只是相对于其他ReLU族函数复杂,比起Sigmoid还是小巫见大巫,所以现在ELU也是常用的激活函数选择。

SoftPlus函数

  SoftPlus事实上提出来的很早,在2001年就被踢出来了,要远远早于10年提出的ReLU,他可以看做是ReLU的一个平滑版本。相应的特性也很相似。

  • 同样没有负值。
  • 同样非零中心化。
  • 同样的单侧抑制(左侧饱和)
  • 同样的宽兴奋边界。
  • 比ReLU缺少了稀疏性,因为左侧饱和了。
Chart3:ReLU系列函数图像(PReLU可以看做不同的L-ReLU图像集合)

Swish函数

  这是谷歌在2017年提出来的新的激活函数,在ReLU的优势基础上强化了门控机制,超参数β的加入使得函数可以调整门控的开关状态来近似于不同的ReLU函数。之前说Sigmoid函数容易饱和,ReLU函数族缺乏随机因素,神经网络建模中比较重要的就是模型的非线性。同时为了模型泛化能力需要加入随机正则的部分。而先前的函数我们都还讨论不到同时兼备这两者较好的表达。而从Swish开始以及后面的GELU都开始有了这种效果。

  • 继承了ReLU的优势,在X>0时依然不存在梯度消失问题。
  • 同时<0的部分也不会轻易的死亡,门控机制的加入使得灵活性变强,导致Swish能应用于多种机器学习模型的实际环境中。
  • β参数可以唯一也可以该层每个神经元各对应一个。(一对一学习,一对多进行固定)
  • 计算量会很大是唯一缺陷。
Chart4:Swish函数图像

GELU函数

  GELU在非线性激活中应用了随机正则的思想,也是一种通过门控机制来调整输出的激活函数,和Swish函数非常类似。BERT的源码在使用的就是GELU,所以可以看出GELU现在的应用还是很好的。

  • 包含随机正则的思想可以更加方便梯度下降过程以及学习速度。
  • 以标准正态分布作为表达式成分,可以通过Sigmoid函数进行近似,拟合能力更强。
  • 同时具备Swish的上述优点。
  • 它不产生饱和,并且通过自门控进行调整,能够相对于ReLU适应更多的模型环境。
  • 同时相比于ELU不需要为了创造负值和非线性而导致牺牲太多。
  • 代码实现也比较简单。
Chart5:GELU函数与前者比较

Maxout单元

  Maxout提出的时间也比ReLU要晚一些,所以避免了一些前者所存在的问题。它主要的改进是不再使用净输入,而转去关注上一层全部的原始输出。

  • 缺陷非常的明显,由于要参考的输入变成了上层全部原始输出,参数是呈k倍增加的。
  • 参数是可学习的,其中的权重是学习变化的,其本身是一个分段线性函数。
  • Maxout的拟合能力是很强的,它相当于是一个函数逼近器,对于一个标准的MLP来说,如果隐藏神经元层数足够多,理论上可以逼近任何函数。但是同时也要避免过拟合问题。
  • 与Swish和GELU相比的话在非线性和随机正则表达上要缺憾一些,但却也能够避免最前面几种模型的大部分缺点。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学习人工智能,机器学习都离不开数学基础和编程知识。无论你是数据科学的初学者还是已经从事人工智能开发的有经验人员,这门课都适合于你。为什么这么说?首先人工智能和机器学习本质上就是算法,而算法就是数学及统计学以及编程的结合。当前市场上有许多开源的软件包如SKLEARN确实可以帮助没经验的或缺乏数学或算法基础的人实现机器学习模型及预测,但这些工具无法使你真正懂得算法的本质或来源,或者无法使你在不同场合下灵活运用及改进算法。记住,在实际工作中找到适合应用场景的解决方案是最难但是最重要的。但这离不开数学基础和算法理解。比如,线性回归是一类普遍的机器学习算法,所有的机器学习软件都有现成的方法实现模型,但如果在训练数据中加入几条新数据,那么新建立的模型和原来的模型有和联系或不同?再比如,为什么深度神经网络中的Sigmoid函数一般只用到输出层?神经网络的向后传播理论如何与泰勒展开和复合函数的偏导数联系在一起?人工智能中推荐系统和文字向量如何与矩阵的奇异分解以及特征向量联系?模型中对标签进行数据变换如何影响预测值?所有这些问题的答案,你都可以从本课中找到线索。本课系统地讲述了有关人工智能,机器学习背后的数学知识。特别指出,微积分和代数知识是本课的核心。统计学基础被安排在另外的课程中。除此之外,我在每一章节或主要知识点后都安排了各类程序以解释和回顾所学到的东西。最后要提到的是,这不是一门工程项目实践课。但我会另外专门安排有关人工智能,机器学习的实践课程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JinyuZ1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值