关于激活函数

什么~为什么~哪些(RSST)

一、什么是激活函数

 如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function:

二、为什么要用激活函数

 如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合

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

 

三、常用的有哪些激活函数

 1)Sigmoid函数:

  公式:

  曲线:

  导数:

  sigmoid函数取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类

 

  缺点:

   1)容易出现梯度消失(gradient  vanishing)的现象:当激活函数接近饱和区时,导数接近0,后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练

   2)幂运算相对耗时

  为何会出现梯度消失:

   反向传播算法中,要对激活函数求导,sigmoid 原函数及导数图形如下:

    

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

 

   Sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个f‘(x) 因子(sigmoid关于输入的导数)

   因此一旦输入落入饱和区,f‘(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失

   一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象[Understanding the difficulty of training deep feedforward neural networks]

   梯度消失问题至今仍然存在,但被新的优化方法有效缓解了

 

   Sigmoid 的饱和性虽然会导致梯度消失,但也有其有利的一面。例如它在物理意义上最为接近生物神经元。(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数

 

 2)Tanh函数

   公式:

  曲线:

  

  也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果

  与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好

 3)ReLU

  Rectified Linear Unit(ReLU) - 用于隐层神经元输出

 公式:

 曲线:

 

 RELU特点:输入信号 0 的情况下,输出等于输入

 ReLU 的优点:

  Krizhevsky et al. 发现使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多

 ReLU 的缺点:

  训练的时候很”脆弱”,很容易就”die”了

  例如,一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0

  如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了

 4) softmax函数

  Softmax - 用于多分类神经网络输出

  公式:

  举个例子来看公式的意思:

  

  为什么要取指数,第一个原因是要模拟max 的行为,所以要让大的更大,第二个原因是需要一个可导的函数 

 

四、致谢

 本文参考:https://baijiahao.baidu.com/s?id=1609895552884544265

 非常感谢!

原文地址:https://www.cnblogs.com/always-fight/p/10369665.html