深度学习基础(七)—— Activation Function
1. Sigmoid
函数定义:
对应的图像是:
优点:
- Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
- 求导容易。
缺点:
- sigmoid容易饱和,出现梯度消失的现象。 sigmoid神经元的一个很差的属性就是神经元的活跃度在0和1处饱和,它的梯度在这些地方接近于0。回忆在反向传播中,某处的梯度和其目标输出的梯度相乘,以得到整个目标。因此,如果某处的梯度过小,就会很大程度上出现梯度消失,使得几乎没有信号经过这个神经元以及所有间接经过此处的数据。除此之外,人们必须额外注意sigmoid神经元权值的初始化来避免饱和。例如,当初始权值过大,几乎所有的神经元都会饱和以至于网络几乎不能学习。
- Sigmoid 的输出不是0均值的,会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 但是如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。
2. Tanh
函数定义:
对应图像:
优点:
- 相比Sigmoid函数,其输出以0为中心。
- 比Sigmoid函数收敛速度更快
缺点:
- 还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。
3. ReLU
函数定义:
对应图像:
优点:
- 相比起Sigmoid和tanh,ReLU(e.g. a factor of 6 in Krizhevsky et al.)在SGD中能够快速收敛。
- Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。
- 有效缓解了梯度消失的问题。
- 在无监督预训练的时候也能有较好的表现。
- 提供了神经网络的稀疏表达能力。
缺点:
- 随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。例如,当学习速率设定过快时,60%的网络都“挂了”(神经元在此后的整个训练中都不**)。当学习率设定恰当时,这种事情会更少出现。
4. LReLU、PReLU与RReLU
函数定义:
对应图像:
4.1 LReLU
当比较小而且固定的时候,我们称之为LReLU。LReLU最初的目的是为了避免梯度消失。但在一些实验中,我们发现LReLU对准确率并没有太大的影响。很多时候,当应用LReLU时,必须要选取出合适的,LReLU的表现出的结果才比ReLU好。
4.2 PReLU
PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。
- PReLU 只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同channels使用相同的时,参数就更少了。
- BP更新时,采用的是带动量的更新方式:
注意:上式的两个系数分别是动量和学习率。 - 更新 时不施加权重衰减(L2正则化),因为这会把 很大程度上 push 到 0。事实上,即使不加正则化,试验中 也很少有超过1的。
- 整个论文,被初始化为0.25。
- PReLU具有收敛速度快、错误率低的特点,可以用于反向传播的训练,可以与其他层同时优化。
4.3 RReLU
公式:
其中,是一个保持在给定范围内取样的随机变量,在测试中是固定的。RReLU在一定程度上能起到正则效果。
4.4 ELU
公式:
其中
优点:
- ELU减少了正常梯度与单位自然梯度之间的差距,从而加快了学习。
- 在负的限制条件下能够更有鲁棒性。
5 总结
- 选择的时候,就是根据各个函数的优缺点来配置,例如:
- 如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout。
- 通常来说,很少会把各种**函数串起来在一个网络中使用的。
- 最好不要用 sigmoid,可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.