激活函数(Activation function)
神经网络中使用激活函数来加入非线性因素,提高模型的表达能力。
ReLU(Rectified Linear Unit,修正线性单元)
详细公式 ReLU:
ReLU变种
Leaky ReLU
当x<0时,f(x)=αx,其中α非常小,这样可以避免在x<0时,不能够学习的情况 当x<0时,f(x)=αx,其中α非常小,这样可以避免在x<0时,不能够学习的情况
当 α=0.01 α=0.01时,是Leaky ReLU.
优点:
- 不会过拟合(saturate)
- 计算简单有效
- 比sigmoid/tanh收敛快
指数线性单元ELU
由于需要计算指数,计算量较大
Maxout
函数图像为两条直线的拼接, f(x)=max(wT1x+b1,wT2x+b2) f(x)=max(w1Tx+b1,w2Tx+b2)
那么,前边的两种ReLU便是两种Maxout.
激活层函数选择
-
最好不要用sigmoid,比如AlexNet等都不用sigmoid
-
首先试ReLU,速度快,但要注意训练的状态.
-
如果ReLU失效,试试Leaky ReLU或Maxout
-
试试tanh正切函数
在浅层神经网络中,如不超过4层的,可选择使用多种激励函数,没有太大的影响。特别的,RNN中使用ReLU或tanh(三角函数tan);Hinge用于soft-margin svm算法;log用于LR算法(Logistric Regression);squared loss用于线性回归 (Liner Regression)和Boosting。
sigmoid作激活函数的缺点
存在三个问题:
- 饱和的神经元会"杀死"梯度,指离中心点较远的x处的导数接近于0,停止反向传播的学习过程.
- sigmoid的输出不是以0为中心,而是0.5,这样在求权重w的梯度时,梯度总是正或负的.
- 指数计算耗时
为什么tanh相比sigmoid收敛更快:
tanh′(x)=1−tanh(x)2∈(0,1) tanh′(x)=1−tanh(x)2∈(0,1)
sigmoid: s′(x)=s(x)×(1−s(x))∈(0,1/4) sigmoid: s′(x)=s(x)×(1−s(x))∈(0,1/4)
可以看出tanh(x)的梯度消失问题比sigmoid要轻.梯度如果过早消失,收敛速度较慢.