激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。引入非线性激活函数,可使深
层神经网络的表达能力更加强大。
优秀的激活函数应满足:
- 非线性: 激活函数非线性时,多层神经网络可逼近所有函数
- 可微性: 优化器大多用梯度下降更新参数
- 单调性: 当激活函数是单调的,能保证单层网络的损失函数是凸函数
- 近似恒等性: . 当参数初始化为随机小值时,神经网络更稳定
激活函数输出值的范围:
- 激活函数输出为有限值时,基于梯度的优化方法更稳定
- 激活函数输出为无限值时,建议调小学习率
常见的激活函数有:sigmoid,tanh,ReLU,Leaky ReLU,PReLU,RReLU,
ELU(Exponential Linear Units),softplus,softsign,softmax等,下面介绍几个典型的激活
函数:
- sigmoid
函数图像
导数图像
优点:
- 输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可用作输出层;
- 求导容易。
缺点:
- 易造成梯度消失;((对于深层网络,需要对多层参数进行链式求导,根据其导数范围(0,0.25),多个参数的导数相乘会趋近为0,梯度消失))
- 输出非0均值,收敛慢;(其数值在(0,1),都是正数)
- 幂运算复杂,训练时间长。
sigmoid函数只能处理两个类(因为其值要么大等于0.5,要么小于0.5,只能判断这两种情况),不适用于多分类问题。而softmax可以有效解决这个问题,并且softmax函数大都运用在神经网路中的最后一层网络中,使得值的区间在(0,1)之间,而不是二分类的。
- tanh
函数图像
导数图像
优点:
- 比sigmoid函数收敛速度更快。
- 相比sigmoid函数,其输出以0为中心。
缺点:
- 易造成梯度消失;
- 幂运算复杂,训练时间长。
- ReLU
函数图像
导数图像
优点:
- 解决了梯度消失问题(在正区间);
- 只需判断输入是否大于0,计算速度快;
- 收敛速度远快于sigmoid和tanh,因为sigmoid和tanh涉及很多expensive的操作;
- 提供了神经网络的稀疏表达能力。
缺点:
- 输出非0均值,收敛慢;
- Dead ReLU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。(参数为负数的时候,梯度为0)
- Leaky ReLU
函数图像
导数图像
理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当
中,并没有完全证明Leaky ReLU总是好于ReLU。
- softmax
对于初学者的建议:
- 首选ReLU激活函数;
- 学习率设置较小值;
- 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;
- 初始化问题:初始参数中心化,即让随机生成的参数满足以0为均值, 为标准差的正态分布。