[深度学习] 神经网络中的激活函数(Activation function)

20180930 在研究调整FCN模型的时候,对激活函数做更深入地选择,记录学习内容

激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。

[深度学习] 神经网络中的激活函数(Activation function)_第1张图片

  • 线性激活函数:最简单的linear function就是f(x) = x,不对输入进行修改就直接输出
  • 非线性激活函数:这些函数用于对不可线性分离的数据进行分离,是最常用的激活函数。非线性方程控制从输入到输出的映射。常用的非线性激活函数的例子是Sigmoid,tanH,ReLU,LReLU,PReLU,Swish等。

使用激活函数的原因

参考 https://www.zhihu.com/question/22334626

  • 单层感知机 Perceptron

这是一个单层的感知机,也是我们最常用的神经网络组成单元,用它可以在平面中划出一条线,把平面分割开,进行二分类。

[深度学习] 神经网络中的激活函数(Activation function)_第2张图片

  • 多感知机组合 Perceptron

多个感知机组合,能够在平面中进行更复杂的分割,获得更强的分类能力。

[深度学习] 神经网络中的激活函数(Activation function)_第3张图片

由感知机的结构来看,如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,无法直接进行非线性分类

[深度学习] 神经网络中的激活函数(Activation function)_第4张图片

所以,我们要加入一种方式来完成非线性分类,这个方法就是激活函数。

  • 单层感知机
    [深度学习] 神经网络中的激活函数(Activation function)_第5张图片
  • 多层感知机
    [深度学习] 神经网络中的激活函数(Activation function)_第6张图片

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

  • 使用step激活函数的线性模型(step下面有介绍)
    [深度学习] 神经网络中的激活函数(Activation function)_第7张图片
  • 使用其他激活函数的非线性模型,可能学习出更多的平滑分类
    [深度学习] 神经网络中的激活函数(Activation function)_第8张图片

总结,使用激活函数可以在神经网络中引入非线性分类方式,从而完成线性模型所不能完成的分类,解决真正的实际问题。

常用的激活函数

  • step

    • 图形
      [深度学习] 神经网络中的激活函数(Activation function)_第9张图片
      在这里插入图片描述
  • Sigmoid

    • 图形
      [深度学习] 神经网络中的激活函数(Activation function)_第10张图片
      在这里插入图片描述
    • 导数
      [深度学习] 神经网络中的激活函数(Activation function)_第11张图片
    • Tensorflow中tf.sigmoid
    • 缺点
      • Sigmoid有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的。如果你的初始值很大的话,神经元可能会停止梯度下降过程,这会导致网络变的无法学习。
      • Sigmoid的曲线均值不为0,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的。如果是进行批训练,训练过程中会得到不同的信号,这样会缓解非0均值带来的影响。
  • TanH

    • 图形
      [深度学习] 神经网络中的激活函数(Activation function)_第12张图片
      在这里插入图片描述
    • 导数
      [深度学习] 神经网络中的激活函数(Activation function)_第13张图片
    • Tensorflow使用tf.tanh
    • 缺点:实际上从根本上是sigmoid函数的变形体,解决了非0均值的问题,但不能解决过大或者过小时候导数接近于0的问题
  • Rectified linear unit (ReLU)

    • 图形
      [深度学习] 神经网络中的激活函数(Activation function)_第14张图片
      在这里插入图片描述
    • 导数
      [深度学习] 神经网络中的激活函数(Activation function)_第15张图片
    • Tensorflow使用tf.nn.relu(features, name = None)
    • 缺点:不幸的是,使用ReLU的神经元在训练期间可能很脆弱并且可能“死亡”。 例如,经过ReLU神经元的梯度过大的下降可能导致权重可能不在更新(因为x<0时,y的值和导数都为0),即神经元将永远不再在任何数据点上激活。如果发生这种情况,那么经过该神经元的梯度将从该点开始永远为0。 也就是说,ReLU神经元可以在训练期间不可逆转地死亡。 例如,如果学习率设置得太高,您可能会发现多达40%的网络可能“死”(即永远不会在整个训练数据集中激活的神经元)。 通过适当设置学习率,这也不是一个问题。
  • Leaky ReLU

    • 图形
      [深度学习] 神经网络中的激活函数(Activation function)_第16张图片
      在这里插入图片描述
    • Tensorflow使用 tf.nn.leaky_relu(features, alpha=0.2, name=None),其中alpha为x<0时的斜率
    • 解决了ReLU的“死”神经元问题
  • 更多激活函数详细内容

[深度学习] 神经网络中的激活函数(Activation function)_第17张图片

ReLU应该是现阶段使用最多的激活函数。

参考 https://en.wikipedia.org/wiki/Activation_function
参考 https://www.zhihu.com/question/22334626
参考 http://cs231n.github.io/neural-networks-1/#actfun

你可能感兴趣的:(Deep,Learning)