激活函数
使用激活函数的目的
- 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
- 激活函数的主要作用是提供网络的非线性建模能力,可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
sigmoid
定义
sigmoid函数能够把输入的连续实数值转化为0和1之间的实数,如果负数过大则输出0,如果正数过大则输出1
公式
:导数
:图像
:sigmoid
优缺点
优点
:
- sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定
- 连续函数,便于求导
缺点
:
- 幂运算,计算开销大
- 随着网络层数的增加,反向传播容易出现梯度消失
- 不是以0为中心,收敛速度慢
tanh
定义
Tanh函数也称为双曲正切函数,取值范围为[-1,1]。
公式
:导数
:图像
:Tanh
优缺点
优点
:
- 相较于sigmoid函数,tanh函数输出均值为0,收敛速度快
缺点
:
- 幂运算,计算开销大
- 随着网络层数的增加,反向传播容易出现梯度消失
ReLU
定义
整流线性单元(Rectified linear unit,ReLU)是现代神经网络中最常用的激活函数,大多数前馈神经网络默认使用的激活函数。
公式
:图像
:ReLU
优缺点
优点
:
- 使用ReLU的SGD算法的收敛速度比sigmoid和tanh快
- 在x>0区域上,不会出现梯度爆炸、梯度消失问题
- 计算复杂度低
- ReLU函数会使得一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的互相依存关系,缓解了过拟合问题的发生
缺点
:
- 对参数初始化和学习率非常敏感
- 在x<0时,梯度为0。之后与该神经元相连的神经元,梯度永远为0,参数永远不会被更新
- ReLU函数的输出均值大于0,偏移现象和神经元死亡会共同影响网络的收敛性
解决方法
:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法
Leaky ReLU
定义
渗漏整流线性单元(Leaky ReLU),为了解决dead ReLU现象。用一个类似0.01的小值来初始化神经元,从而使得ReLU在负数区域更偏向于激活而不是死掉。
公式
:
PReLU
定义
参数整流线性单元(Parametric Rectified linear unit,PReLU),用来解决ReLU带来的神经元坏死的问题。
公式
: 不是固定的,是通过反向传播学习出来的
ELU
定义
指数线性单元(ELU):具有relu的优势,没有Dead ReLU问题,输出均值接近0,实际上PReLU和Leaky ReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于ReLU和Leaky ReLU之间的一个函数。当然,这个函数也需要计算exp,从而计算量上更大一些。
公式
:
Maxout
Maxout是通过分段线性函数来拟合所有可能的凸函数来作为激活函数的,但是由于线性函数是可学习,所以实际上是可以学出来的激活函数。具体操作是对所有线性取最大,也就是把若干直线的交点作为分段的边界,然后每一段取最大。
优点
:
- Maxout的拟合能力非常强,可以拟合任意的凸函数。
- Maxout具有ReLU的所有优点,线性、不饱和性。
- 不会出现神经元坏死的现象。
缺点
:
- 增加了参数量。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AloneSoul's Blog!
评论