激活函数学习

常用的激活函数:

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)=$

上一篇:深度学习——前馈神经网络


下一篇:如何发现「将死」的ReLu?可视化工具TensorBoard助你一臂之力