神经网络中各种激活函数比较
Posted 合唱团abc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络中各种激活函数比较相关的知识,希望对你有一定的参考价值。
ReLU 激活函数:
ReLu使得网络可以自行引入稀疏性,在没做预训练情况下,以ReLu为激活的网络性能优于其它激活函数。
数学表达式: $y = max(0,x)$
ReLU 的缺点是,它在训练时比较脆弱并且可能“死掉”。
神经元死亡:如果梯度太大,而学习率又不小心设置得太大,就会导致权重一下子更新过多,就有可能出现这种情况:对于任意训练样本 ,网络的输出都是小于0的。对于relu函数来说,则所有流过这个神经元的梯度将都变成 0,该神经元不会被更新。
解决方案:
1、把relu换成leaky relu,保证让激活函数在输入小于零的情况下也有非零的梯度。
2、采用较小的学习率
3、采用 momentum based 优化算法,动态调整学习率
Leaky ReLU 是为解决“ ReLU 死亡”问题的尝试。
ReLU 中当 x<0 时,函数值为 0。而 Leaky ReLU 则是给出一个很小的梯度值,比如 0.01。
maxout:Sigmoid 激活函数:
sigmoid 激活函数在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。
数学表达式: $y = (1 + exp(-x))^{-1}$
$ y\' = y (1-y) $
缺点:
激活函数计算量大,反向传播求梯度时,求导涉及除法
反向传播时,很容易就会出现梯度消失或梯度爆炸的情况,从而无法完成深层网络的训练
梯度消失或梯度爆炸的原因:
以下图的反向传播为例(假设每一层只有一个神经元且对于每一层,其中为sigmoid函数)
可以推导出
的最大值为,而我们初始化的网络权值通常都小于1,因此,因此对于上面的链式求导,层数越多,求导结果越小,因而导致梯度消失的情况出现。
这样,梯度爆炸问题的出现原因就显而易见了,即,也就是比较大的情况。但对于使用sigmoid激活函数来说,这种情况比较少。因为的大小也与有关(),除非该层的输入值在一直一个比较小的范围内。
Tanh 激活函数:
Tanh 激活函数使得输出与输入的关系能保持非线性单调上升和下降关系,比sigmoid 函数延迟了饱和期(即导数接近0),对神经网路的容错性好。
数学表达式:
$y\' = \\frac{4}{(e^x + e^{-x})^2}$
以上是关于神经网络中各种激活函数比较的主要内容,如果未能解决你的问题,请参考以下文章