神经网络 激励函数

激励函数:作用是提供规模化的非线性化能力,使得神经网络可以任意逼近任何非线性函数,模拟神经元被激发的状态变化。如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。目前主要有三种常用的激励函数:

1. Sigmoid激励函数 也叫 Logistic 函数,用于隐层神经元输出,取值范围为(0,1),可以用来做二分类。

而Sigmoid函数的缺点有:

  •       反向传播时,很容易就会出现梯度消失的情况(导数重0开始又消失于0),从而无法完成深层网络的训练。
  •       函数输出并不是0均值(zero-centered),输出值恒大于0.
  •       幂运算相对来讲比较耗时

2. Thah激励函数 读作Hyperbolic Tangent,也称为双切正切函数,取值范围为[-1,1]。

                                                                                  thah(x)=2sigmoid(2x)-1

Tanh是Sigmoid的变形,与 sigmoid 不同的是,tanh 是0均值的。但是,梯度消失和幂运算的问题仍然存在。实际应用中,tanh 会比 sigmoid 更好。

3.  ReLU激励函数(Rectified Linear Unit)输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入。

优点:

ReLU 使得SGD的收敛速度会比 sigmoid/tanh 快很多。相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值。

ReLU解决了梯度消失的问题。

缺点:

ReLU的输出不是0均值。

learning rate太高导致在训练过程中参数更新太大,训练的时候很容易就”die”了。某些神经元可能永远不会被激活,导致相应的参数永远不能被更新,那么这个神经元的梯度就永远都会是0了。

如何选择合适的激活函数?

1. 一般情况下,使用ReLU会比较好。采用Relu激活函数,整个过程的计算量节省很多。使用 ReLU,就要注意设置 learning rate,不要让网络训练过程中出现很多 “dead” 神经元;如果“dead”无法解决,可以尝试 Leaky ReLU、PReLU 、RReLU等Relu变体来替代ReLU。

2、不建议使用 sigmoid,如果一定要使用,也可以用 tanh来替代,因为后者解决了0均值的输出问题。

猜你喜欢

转载自blog.csdn.net/Liang_xj/article/details/82939276