乐趣区

关于人工智能:神经网络激活函数

目标

神经元引入非线性因素,从而使神经网络可能解决线性不可分的问题,比方最简略的异或。

Hornik 证实,只需一个蕴含足够多的神经元的隐层,多层前馈网络就能以任意精度迫近任意复杂度的连续函数。因而使得神经网络能够任意迫近任何非线性函数,这样神经网络就能够利用到泛滥的非线性模型中。

如果不必激励函数,每一层输入都是下层输出的线性函数,无论神经网络有多少层,输入都是输出的线性组合。则多层网络进化为单层网络。

罕用激活函数

比拟经典的函数包含:Sigmoid 函数tanh 函数ReLU 函数

一个好的激活函数,通常要满足以下性质:

  • 非线性:即导数不是常数
  • 可微性:保障了在优化中梯度的可计算性。尽管 ReLU 存在无限个点处不可微,但处处 subgradient,能够代替梯度。
  • 计算简略:激活函数简单就会升高计算速度,因而 RELU 要比 sigmoid 等带有 Exp 操作的激活函数更受欢迎。
  • 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度隐没),使得参数无奈持续更新的问题。最经典的例子是 Sigmoid,它的导数在 x 为比拟大的正值和比拟小的负值时都会靠近于 0。RELU 对于 x<0,其梯度恒为 0,这时候它也会呈现饱和的景象。Leaky ReLU 和 PReLU 的提出正是为了解决这一问题。
  • 枯燥性(monotonic):即导数符号不变。当激活函数是枯燥的时候,单层网络可能保障是凸函数。然而激活函数如 mish 等并不满足枯燥的条件,因而枯燥性并不是硬性条件,因为神经网络原本就是非凸的。
  • 参数少:大部分激活函数都是没有参数的。像 PReLU 带单个参数会稍微减少网络的大小。还有一个例外是 Maxout,只管自身没有参数,但在同样输入通道数下 k 路 Maxout 须要的输出通道数是其它函数的 k 倍,这意味着神经元数目也须要变为 k 倍。

激活函数优缺点

Sigmoid 激活函数

长处:

  • 梯度平滑,求导容易
  • 输入值在 0-1 之间

毛病:

  • 激活函数计算量大(在正向流传和反向流传中都蕴含幂运算和除法);
  • 梯度隐没:输出值较大或较小(图像两侧)时,sigmoid 函数值接近于零。sigmoid 导数则接近于零,导致最终的梯度接近于零,无奈实现更新参数的目标;
  • Sigmoid 的输入不是 0 为核心(zero-centered)。这个个性会导致前面网络层的输出也不是零核心的,进而影响梯度降落的运作。

sigmoid 为何会呈现梯度隐没

反向流传算法中,要对激活函数求导,sigmoid 的导数表达式为:

sigmoid 原函数及导数图形如下:


由图可知,导数从 0 开始很快就又趋近于 0 了,易造成“梯度隐没”景象

梯度隐没的解决之道:一般来说,sigmoid 网络在 5 层之内就会产生梯度隐没景象。梯度隐没问题至今依然存在,但被新的优化办法无效缓解了,例如 DBN 中的分层预训练,Batch Normalization 的逐层归一化,Xavier 和 MSRA 权重初始化等代表性技术。

为什么谋求 0 为核心(zero-centered):越靠近 0 为核心,SGD 会越靠近 natural gradient(一种二次优化技术),从而升高所需的迭代次数。

tanh 函数


双曲正切函数取值范畴为[-1,1]。
tanh 在特色相差显著时的成果会很好,在循环过程中会不断扩大特色成果。

长处:

  • 比 Sigmoid 函数收敛速度更快。
  • 相比 Sigmoid 函数,其输入以 0 为核心。

毛病:
没有扭转 Sigmoid 函数的最大问题——因为饱和性产生的梯度隐没。

ReLU 函数

长处:
因为不须要做指数运算,应用 ReLU 失去的 SGD 的收敛速度会比 sigmoid、tanh 快很多

毛病:

  • 训练的时候很“软弱”,随着训练的进行,可能会呈现 神经元死亡,权重无奈更新 的状况。例如,一个十分大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活景象了,那么这个神经元的梯度就永远都会是 0,也就是说,ReLU 神经元在训练中不可逆地死亡了。如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。
  • ReLU 的 输入具备偏移景象,即输入均值恒大于零。偏移景象和神经元死亡会独特影响网络的收敛性。

针对 RELU 的缺点,后续有多种改良函数(Leaky ReLU、PReLU 或者 Maxout),这里不具体开展。

拓展:饱和性

Bengio 传授等将只有在极限状态下偏导数等于 0 的函数定义为 软饱和激活函数 ;绝对应的,对任意的 x,如果存在常数 c,当 x >c 或 x <c 时恒有 h′(x)= 0 则称其为 右 / 左硬饱和 ,当 x 比 c 小时恒 有 h′(x)= 0 则称其为 左硬饱和 。若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为 硬饱和

参考

1. 神经网络中的激活函数
2. 神经网络中的罕用激活函数总结
3. 神经网络中的各种激活函数
4. 罕用激活函数比拟

退出移动版