激活函数(Activation Function)一般用于神经网络的层与层之间,将上一层的输出转换之后输入到下一层。如果没有激活函数引入的非线性特性,那么神经网络就只相当于原始感知机的矩阵相乘。
一、激活函数的性质
非线性:当激活函数为非线性的时候,可以证明两层的神经网络可以逼近任意复杂的函数。
连续可微:由于神经网络的训练是基于梯度的优化方法,数学基础是连续可微,因此选取的激活函数也要保证连续可微。阶跃激活函数在0点不连续,且在除零点外导数都为0,因此不能使用基于梯度的方法。
范围:当激活函数的取值范围有限时,基于梯度的训练方法往往更加稳定,因为特征的表示受有限权重的影响更显著。当取值范围无限时,训练通常会更有效率,因为特征的表示会显著影响大部分权重,在这种情况下,通常需要更小的学习率。
单调性:当激活函数是单调时,单层网络的误差曲面一定是凸的。
在原点附近恒等():即,且 在0点连续。如果激活函数具有这个属性,则使用小的随机值初始化权值就能高效地训练神经网络。如果不具有这个属性,则在初始化权值的时候就需要特别小心。
一些概念:
(1)饱和
当一个激活函数满足 时称为左饱和,当满足 时称为右饱和,两种条件都满足时称为饱和。
(2)硬饱和与软饱和
对于任意的x,如果存在常数c,当x<c时恒有 称为左硬饱和,当x>c时恒有 则称为右硬饱和,两种条件都满足时称为硬饱和;如果只有在极限状态下偏导数等于0的函数,称之为软饱和。
(3)线性与非线性激活函数区别:非线性激活使ANN能用平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面。
二、激活函数的类型
1、Identity function(恒等激活函数)
2、Binary step function(二值阶跃激活函数)
3、Logistic/Sigmoid function
缺点:
(1)输出不以0为中心,反向传播时后一层将得到上一层输出的非0均值作为输入,会出现偏移现象;Δw将全为正数、或全为负数,使得梯度下降过程中出现z字型下降,导致权值更新效率降低;
(2)Sigmoid的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因之一。一旦落入饱和区梯度就会接近0:Grad=Error*Sigmoid`(x)*x,导致每经过一层Error都是成倍衰减,一般在5层内就会产生梯度消失现象,无法有效地训练网络;
(3)计算机运行指数运算的速度较慢。
4、Hyperbolic tangent(双曲正切函数)
输出以0为中心,其他缺点同sigmoid函数。
Ramp function(斜坡函数)
该函数在负半轴函数值为0,正半轴为形如y=At的正比例函数,A=1时称为单位斜坡函数。
5、Rectified linear unit(线性整流函数/修正线性单元)
ReLU是常用的激活函数,以0为分界线,输入小于0的部分输出均为0,大于等于0的部分输出等于输入值。
与Sigmoid系函数相比区别在于:收敛速度快、单侧抑制、相对宽阔的兴奋边界、稀疏激活性。
由于稀疏的特征并不需要网络具有很强的处理线性不可分的机制,因此在深度学习中使用简单、速度快的线性激活函数更为合适(网络的非线性来自于神经元部分选择性激活)。ReLU的引入使得网络可以自行引入稀疏性,相当于无监督学习训练。ReLU的梯度为1且只有一端饱和,梯度能很好的在反向传播中流动,训练速度有很大的提高,不会产生梯度消失或梯度爆炸的问题。
下图为选择不同激活函数训练一个4层CNN模型达到同样错误率25%时的epoch数量比较,实线表示使用ReLU的模型的训练速度比虚线使用tanh的快6倍。
缺点:
(1)输出不以0为中心;
(2)此函数没有边界,如有需要可以自行设定边界值,例如min(max(0,x), 6);
(3)前向传播时如果输入小于0,则神经元保持非激活状态;
反向传播输入负数时梯度为0,会kill梯度,出现和Sigmoid系函数一样的问题,无法更新权重;
(4)反向传播时如果一个非常大的梯度流过一个ReLU神经元,更新过参数后,这个神经元就再也不会对任何数据有激活现象了,它的梯度就永远都会是0,可以设置一个比较小的学习率来解决这种问题。
6、SoftPlus
SoftPlus函数是logistic/sigmoid函数的原函数,导数是sigmoid函数,按照论文的说法,开始想要用一个指数函数(天然正数)作为激活函数来回归,但到后期梯度过大难以训练,于是加入对数来减缓上升趋势,+1是为了保证非负性。可将该函数看做ReLU的平滑版本,但不具备稀疏激活性;单端饱和,指数+对数运算速度慢于ReLU但仍快于Sigmoid函数。
7、Leaky ReLU函数
为了解决ReLU中容易出现死神经元的问题,对负数部分进行修正,加入一个小的斜率(ɑ∈(0,1),一般取0.1、0.01等)使得负数输入不会全部被稀疏掉,但实际应用中效果好坏并未有统一定论。
8、ELU
Exponential linear unit同样是对ReLU负值部分进行指数修正,减少了正常梯度与单位自然梯度之间的差距,在负值区域稳定性更强。
几种ReLU变种函数曲线对比
9、Maxout
可看做是ReLU的一般情况,相当于在深度学习网络中额外加入一层激活函数层,增加了k个神经元进行激活,然后输出激活值中最大的值。
优点:拟合能力非常强,计算简单,不会出现神经元饱和的情况;
缺点:参数翻倍,计算量增加。
三、激活函数选择建议
(1)首选ReLU函数(只在隐藏层中使用),性能好、速度快;
(2)在ReLU出现很多死神经元的情况下,考虑使用Leaky ReLU函数;
(3)建议只在全连接层使用sigmoid函数;
(4)tanh函数在某些情况下有比较好的效果,但应用场景比较少;
(5)Maxout效果虽好但参数翻倍,因此一般不用。
四、Tensorflow提供的激活函数
在Tensorflow r1.0中提供了以下几种激励函数,其中包括连续非线性的(比如sigmoid, tanh, elu, softplus, softsign),连续但不是处处可微的(relu, relu6, crelu, relu_x)以及随机函数(dropout)。
tf.nn.relu、tf.nn.relu6、tf.nn.crelu、tf.nn.elu
tf.nn.softplus、tf.nn.softsign
tf.nn.dropout
tf.nn.bias_add
tf.sigmoid、tf.tanh
参考资料
https://en.wikipedia.org/wiki/Activation_function
https://blog.csdn.net/dabokele/article/details/58713727
https://www.zhihu.com/question/22334626/answer/103835591
https://blog.csdn.net/cyh_24/article/details/50593400