常用的激活函数:
1.sigmoid
$f\left( z \right)=1/ \left( 1+e^{-z} \right)$.
将输入的连续实值变换为(0,1),缺点在于深度网络时,梯度反向传递时导致梯度爆炸和梯度消失,梯度消失概率较大,爆炸概率较低。例如,如果初始化的权值是[0,1]之间的值,梯度反向传播时,每传递一次,梯度值都会变为原来的0-1/4倍,如果层数特别多,梯度就会非常接近0,就会梯度消失。当权值初始化为$\left(1,+\infinity \right)$之间,就容易梯度爆炸。 缺点2,不是0均值,那么在反向传播中,w的局部梯度(即x)都为正或负,那么有个捆绑效果,那么收敛会慢。缺点3,有幂运算,耗时。
sigmoid函数也算一个鲁棒估计子。
2.tanh
tanh(x)=[e^x-e^(-x)]/[e^x+e^(-x)]
解决了sigmoid函数不是0均值的问题,但是梯度消失和幂运算仍然存在。
3.Relu (Rectified Linear Unit, 修正线性单元)
f(x)=max(0,x);
有点是解决梯度消失问题,不过是在正区间内。速度快,收敛速度远快于sigmoid和tanh.特点在于强制了稀疏性;缺点在于没有对上界进行限制;同时,如果去掉过多的特征,导致模型的有效性变低,称作神经元“坏死”;在一个,结果只有正数,没有负数。
同时,不是以0为中心的。还有个问题是某些神经元可能永远不会被激活,导致相应的参数永远不会被更新(Dead Relu Problem).
这叫单侧抑制。尤其在CNN里,当模型为N层,Relu神经元的激活率降低2^N倍。
4.Leaky Relu
f(x)=max(ax,x),为了避免当x<0时特征坏死的情况;a一般取作0.01
5. Parametric Relu (PReLu)
上面的a是学习到参数。
2,3的有点在于不会过拟合,计算简单有效,比sigmoid,tanh收敛快。
6.ELU(Exponential Linear Units)
f(x)=x, if x>0; f(x)=a(e^x-1),otherwise.
为了解决Relu的问题而提出,有点在于1.不会有Dead Relu问题;2.均值接近于0.
缺点在于计算量稍大。(理论上是好于Relu,实际上并没有证据优于)
7.maxout函数??
$h_i \left(x\right)=$