激活函数的作用
激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。我们知道神经网络的神经元输入的是x的线性组合wx+b,是线性的,当数据是线性可分的时,例如:
线性可分
不使用激活函数毫无问题,但是在下面这种情况,也就是线性不可分时,我们就需要使用激活函数来假如非线性因素。
线性不可分
激活函数的饱和
所谓饱和就是激活函数导数为0,具体定义是:
当一个激活函数h(x)满足:
时称为右饱和,同样的,当激活函数满足下面的式子称为左饱和。
当一个激活函数,既满足左饱和又满足又饱和时,我们称之为饱和。
根据在何处饱和,饱和又分为硬饱和和软饱和。对任意的x如果存在常数c,使得x>c时恒有 h′(x)=0则称其为右硬饱和,当x<c时恒有h′(x)=0则称其为左硬饱和。若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为硬饱和。但如果只有在极限状态下偏导数等于0的函数,称之为软饱和。
常见的激活函数与优缺点
sigmoid function
第一个接触到的激活函数也就是S形曲线,他的函数表达式如下:
函数图像是S形曲线:
现在用的不多了,主要是由于他的缺点比优点更为明显。
优缺点
优点
1.Sigmoid函数的输出映射在(0,1)之间单调连续,输出范围有限,优化稳定,可以用作输出层。
2.求导容易。
缺点:
1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。
2.其输出并不是以0为中心的。
tanh
表达式如下:
图像:
优缺点:
优点:
1.比Sigmoid函数收敛速度更快。
2.相比Sigmoid函数,其输出以0为中心。
缺点:
还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。
ReLU
现在最常用的激活函数有效解决梯度消失。表达式:
图像:
优缺点:
优点:
1.相较于Sigmoid和tanh在SGD下收敛更快,可能是由于线性非饱和的特性。
2.Sigmoid和tanh涉及了很多开销很大的操作(比如指数),ReLU可以更加简单的实现。
3.有效缓解了梯度消失的问题。
4.在没有无监督预训练的时候也能有较好的表现。
5.提供了神经网络的稀疏表达能力。
缺点:
随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。
Leaky-ReLU
ReLU 中当 x<0 时,函数值为 0。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01,是为了解决神经元死亡的尝试。
LReLU最初的目的是为了避免梯度消失。但在一些实验中,发现LReLU对准确率并没有太大的影响。很多时候,当想要应用LReLU时,必须要非常小心谨慎地重复训练,选取出合适的a,LReLU的表现出的结果才比ReLU好。因此有人提出了一种自适应地从数据中学习参数的PReLU。
PReLU
主要是几点说明:
(1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同channels使用相同的ai时,参数就更少了。
(2) BP更新ai时,采用的是带动量的更新方式,如下图:
上式的两个系数分别是动量和学习率。
需要特别注意的是:更新ai时不施加权重衰减(L2正则化),因为这会把ai很大程度上push到0。事实上,即使不加正则化,试验中ai也很少有超过1的。
Maxout
其实就是取线性组合的最大值。
Maxout 具有 ReLU 的优点(如:计算简单,不会饱和),同时又没有 ReLU 的一些缺点 (如:容易死掉)。不过呢,还是有一些缺点的嘛:就是把参数double了。
怎么选激活函数
一般不用Sigmoid,tanh比Sigmoid好一些,大多数用ReLU,尤其深度学习,收敛快。但要注意选择合适的学习速率。maxout和PReLU可以尝试。
网友评论