—— 原文发布于本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),欢迎关注。算法
咱们知道深度学习的理论基础是神经网络,在单层神经网络中(感知机),输入和输出计算关系以下图所示:
可见,输入与输出是一个线性关系,对于增长了多个神经元以后,计算公式也是相似,以下图:
这样的模型就只能处理一些简单的线性数据,而对于非线性数据则很难有效地处理(也可经过组合多个不一样线性表示,但这样更加复杂和不灵活),以下图所示:
那么,经过在神经网络中加入非线性激励函数后,神经网络就有可能学习到平滑的曲线来实现对非线性数据的处理了。以下图所示:
所以,神经网络中激励函数的做用通俗上讲就是将多个线性输入转换为非线性的关系。若是不使用激励函数的话,神经网络的每层都只是作线性变换,即便是多层输入叠加后也仍是线性变换。经过激励函数引入非线性因素后,使神经网络的表示能力更强了。微信
下面介绍几个经常使用的激励函数
一、sigmoid 函数
这应该是神经网络中使用最频繁的激励函数了,它把一个实数压缩至0到1之间,当输入的数字很是大的时候,结果会接近1,当输入很是大的负数时,则会获得接近0的结果。在早期的神经网络中使用得很是多,由于它很好地解释了神经元受到刺激后是否被激活和向后传递的场景(0:几乎没有被激活,1:彻底被激活),不过近几年在深度学习的应用中比较少见到它的身影,由于使用sigmoid函数容易出现梯度弥散或者梯度饱和。当神经网络的层数不少时,若是每一层的激励函数都采用sigmoid函数的话,就会产生梯度弥散的问题,由于利用反向传播更新参数时,会乘以它的导数,因此会一直减少。若是输入的是比较大或者比较小的数(例如输入100,经Sigmoid函数后结果接近于1,梯度接近于0),会产生饱和效应,致使神经元相似于死亡状态。网络
【小白科普】什么是饱和呢?
分布式
二、tanh 函数
tanh函数将输入值压缩至-1到1之间。该函数与Sigmoid相似,也存在着梯度弥散或梯度饱和的缺点。函数
三、ReLU函数
ReLU是修正线性单元(The Rectified Linear Unit)的简称,近些年来在深度学习中使用得不少,能够解决梯度弥散问题,由于它的导数等于1或者就是0。相对于sigmoid和tanh激励函数,对ReLU求梯度很是简单,计算也很简单,能够很是大程度地提高随机梯度降低的收敛速度。(由于ReLU是线性的,而sigmoid和tanh是非线性的)。
但ReLU的缺点是比较脆弱,随着训练的进行,可能会出现神经元死亡的状况,例若有一个很大的梯度流经ReLU单元后,那权重的更新结果多是,在此以后任何的数据点都没有办法再激活它了。若是发生这种状况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。oop
四、Leaky ReLU 函数
Leaky ReLU主要是为了不梯度消失,当神经元处于非激活状态时,容许一个非0的梯度存在,这样不会出现梯度消失,收敛速度快。它的优缺点跟ReLU相似。学习
五、ELU 函数
ELU在正值区间的值为x自己,这样减轻了梯度弥散问题(x>0区间导数到处为1),这点跟ReLU、Leaky ReLU类似。而在负值区间,ELU在输入取较小值时具备软饱和的特性,提高了对噪声的鲁棒性
下图是ReLU、LReLU、ELU的曲线比较图:大数据
六、Maxout 函数
Maxout也是近些年很是流行的激励函数,简单来讲,它是ReLU和Leaky ReLU的一个泛化版本,当w一、b1设置为0时,便转换为ReLU公式。
所以,Maxout继承了ReLU的优势,同时又没有“一不当心就挂了”的担心。但相比ReLU,由于有2次线性映射运算,所以计算量也会翻倍。人工智能
推荐相关阅读spa
欢迎关注本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),获取更多资讯