激活函数
激活函数总结
什么是激活函数
在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
激活函数的用途
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数。很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当。这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。
常见激活函数总结
1. Sigmoid
- 函数公式
- 函数导数
- 函数图像
- 导数图像
- 函数特性
- 当变量值远离中心轴时,梯度几乎为0,在神经网络的反向传播过程中,链式求导导致经过sigmoid函数之后的梯度很小,容易发生梯度消失(梯度弥散),导致权重值更新较慢甚至不更新
- Sigmoid的output不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如x>0,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。
- 计算机执行指数运算会比较慢,对于规模比较大的深度网络,这会较大地增加训练时间
2. Tanh(双曲正切函数)
- 函数公式
- 函数导数
- 函数及导数图像
- 函数特性
- 解决了Sigmoid函数的输出非0均值问题,SGD 会更接近 natural gradient(一种二次优化技术),从而降低所需的迭代次数,收敛速度加快
- 和Sigmoid一样具有软饱和性,容易发生梯度消失
3. ReLU(线性整流函数-Rectified Linear Unit,又称修正线性单元)
- 函数公式
- 函数及导数图像
- 特性
- 解决了梯度消失(gradient vanishing)问题 (在正区间)
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于sigmoid和tanh
- ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生
- ReLU的输出不是zero-centered
- Dead ReLU Problem,由于负区间值始终为0,某些神经元可能永远不会被激活,导致相应的参数永远不能被更新,产生原因: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态 解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!
4. Leaky ReLU(带泄露线性整流-Parameter ReLU-P ReLU)
- 函数公式
- 函数及导数图像
- 特性
- 人们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为αx而非0,通常α=0.01。
- 理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLu问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
5. ELU(Exponential Linear Units)
- 函数公式
- 函数及导数图像
- 特性
- ELU也是为解决ReLU存在的问题而提出,显然,ELU有ReLU的基本所有优点
- 不会有Dead ReLU问题
- 输出的均值接近0,zero-centered
- 它的一个小问题在于计算量稍大。类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。
6. SeLU(缩放指数线性单元-Scaled Exponential Linear Units)
- 函数公式 其中α和λ的值是通过证明得到而不是训练得到的 α = 1.6732632423543772848170429916717 λ = 1.0507009873554804934193349852946
- 函数图像
- 特性
- 经过该激活函数后使得样本分布自动归一化到0均值和单位方差
7. MaxOut
- 函数公式
参考: 常用激活函数(激励函数)理解与总结 Self-Normalizing Neural Networks Maxout Networks