zoukankan      html  css  js  c++  java
  • 关于激活函数

    什么~为什么~哪些(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

     非常感谢!

  • 相关阅读:
    直线DDA,直线和圆的Bresenham算法
    Matlab 多项式及其函数
    Matlab M文件变量检测与传递
    Matlab图形绘制
    C# vb .NET读取识别条形码线性条码ean-8
    C# vb .NET读取识别条形码线性条码code39
    C# vb .NET读取识别条形码线性条码EAN-13
    C# vb .NET读取识别条形码线性条码code128
    C# VB .net读取识别条形码线性条码codabar
    一张图看懂SharpBarcode
  • 原文地址:https://www.cnblogs.com/always-fight/p/10369665.html
Copyright © 2011-2022 走看看