文章目录

  • 1. sigmoid
  • 2. softmax
  • 3. tanh
  • 4. Relu
  • 5. Leaky ReLU函数(PReLU)
  • 6. ELU


1. sigmoid

sigmoid是很常用的非线性激活函数,其取值范围为[0,1],连续可导函数,因此,实际应用中可以把sigmoid的结果当成概率值。典型例子如逻辑回归

sigmoid函数matlab Sigmoid函数的范围_取值范围


sigmoid的导数为:

sigmoid函数matlab Sigmoid函数的范围_取值范围_02


图像如下:

sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_03

  • 当 z 值非常大或者非常小时,sigmoid函数的导数 g′(z) 将接近 0 。这会导致权重 W 的梯度接近 0 ,使得梯度更新十分缓慢,即梯度消失(sigmoid后值都在0-1之间,此时的导数值在0.2-0.25之间,一层层传递下去缩小的程度越来越大)。梯度消失的原因可见博客:
  • 函数的输出不是以0为均值(均值0.5),将不便于下层的计算。sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不在隐藏层
  • sigmoid也会导致梯度爆炸,但概率较小。
    sigmoid的输出为一概率值,对于二分类问题很常见;多分类问题中softmax更为普遍

2. softmax

假设一数组Z,sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_04表示Z中第i个元素,元素个数为n,则输出:

sigmoid函数matlab Sigmoid函数的范围_深度学习_05,其中j=1,2,…,n

sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_06


softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!

下面我们将sigmoid函数matlab Sigmoid函数的范围_结点_07简写成sigmoid函数matlab Sigmoid函数的范围_激活函数_08对softmax的损失函数进行求导:

sigmoid函数matlab Sigmoid函数的范围_取值范围_09


sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_10

3. tanh

sigmoid函数matlab Sigmoid函数的范围_结点_11


tanh函数在 0 附近很短一段区域内可看做线性的。由于tanh函数均值为 0 ,因此弥补了sigmoid函数均值为 0.5 的缺点。取值范围为负无穷到正无穷。

sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_12


tanh函数的缺点同sigmoid函数的第一个缺点一样,当 z 很大或很小时,g′(z) 接近于 0 ,会导致梯度很小,权重更新非常缓慢,即梯度消失问题,但它解决了Sigmoid函数的不是zero-centered输出问题。

4. Relu

sigmoid函数matlab Sigmoid函数的范围_取值范围_13

sigmoid函数matlab Sigmoid函数的范围_深度学习_14

sigmoid函数matlab Sigmoid函数的范围_激活函数_15


ReLU函数其实就是一个取最大值函数,在0处不可导,但是我们可以取sub-gradient

  • ReLU函数的优点:
    - 在输入为正数的时候(对于大多数输入 z 空间来说),不存在梯度消失问题。
    - 计算速度要快很多。ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)
    - 收敛速度远快于sigmoid和tanh
  • ReLU函数的缺点:
    - 当输入为负时,梯度为0,会产生梯度消失问题。
    - Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

实际使用过程中,可以优先尝试Relu

5. Leaky ReLU函数(PReLU)

sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_16

sigmoid函数matlab Sigmoid函数的范围_sigmoid函数matlab_17

6. ELU

sigmoid函数matlab Sigmoid函数的范围_取值范围_18


ELU和PRelu类似,都是为解决relu梯度消失的问题,理论上好于ReLU,但在实际使用中并没有证据证明ELU总是优于ReLU。且实际使用中还是以ReLU为主。

参考链接: