激活函数

1.激活函数的理解

解决线形模型 y = wx + b 的弊端,线形分类模型的分界地方都是平面或者超平面,无法解决具有非线形模型特征的数据。如果没有激励函数,在这种情况下你每一层节点的输入都是上层输出的线性函数,无论你神经网络有多少层,输出都是输入的线性组合,相当于没有隐藏层,网络的学习能力有限。

非线型数据

形象的解释神经网络激活函数的作用是什么?

常见激活函数,及其优缺点 - 面试篇

2. Sigmoid

  • 数学形式sigmoid
  • 导数形式sigmoid导数
  • 特点
    • Sigmoid 函数的取值范围在 (0,1) 之间,单调连续,求导容易,一般用于二分类神经网络的输出层。特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。
  • 缺点
    • 如果我们初始化神经网络的权值为 $[0,1]$ 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 $(1,+∞)$ 区间内的值,则会出现梯度爆炸情况。梯度消失更容易产生。
    • 其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。
    • Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,这个特性会导致为在后面神经网络的高层处理中收到不是零中心的数据。这将导致梯度下降时的晃动,因为如果数据到了神经元永远时正数时,反向传播时权值w就会全为正数或者负数。

3. tanh

  • 数学形式tanh
  • 导数形式tanh导数
  • 特点
    • 解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

4. Relu

  • 数学形式Relu
  • 导数形式
  • 优点
    • 解决了梯度消失问题
    • 计算速度非常快,只需要判断输入是否大于0
    • 收敛速度远快于sigmoid
  • 缺点
    • 输出不是zero-centered
    • 原点不可导
    • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见。例如w初始化全部为一些负数。 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
    • leaky relu函数,$f(x)=max(αx,x)$ , 比如取α=0.01\alpha=0.01α=0.01,可以改善relu中x<0部分的dead问题。

5. 如何选择合适的激活函数

  • 首选 ReLU,速度快,但是要注意学习速率的调整,
  • 如果 ReLU 效果欠佳,尝试使用 Leaky ReLU 变种。
  • 可以尝试使用 tanh。
  • Sigmoid 和 tanh 在 RNN(LSTM、注意力机制等)结构中有所应用,作为门控或者概率值。其它情况下,减少 Sigmoid 的使用。
  • 在浅层神经网络中,选择使用哪种激励函数影响不大。
Donate comment here