深度學習的激活函數 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU


深度學習的激活函數  :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/qq_29831163/article/details/89887655

  【 tensorflow中文文檔:tensorflow 的激活函數有哪些

激活函數可以分為兩大類 :

  • 飽和激活函數: sigmoid、 tanh
  • 非飽和激活函數: ReLU 、Leaky Relu   、ELU【指數線性單元】、PReLU【參數化的ReLU 】、RReLU【隨機ReLU】

相對於飽和激活函數,使用“非飽和激活函數”的優勢在於兩點:
    1.首先,“非飽和激活函數”能解決深度神經網絡【層數非常多!!】的“梯度消失”問題,淺層網絡【三五層那種】才用sigmoid 作為激活函數。
    2.其次,它能加快收斂速度。


目錄

(1)sigmoid 函數 (以前最常用) 

(2)tanh  (雙曲正切函數 ;Hyperbolic tangent function) 

  (3)  relu (Rectified linear unit; 修正線性單元 )

(4)Leaky Relu  (帶泄漏單元的relu )                     (5)  RReLU(隨機ReLU)

(6)softsign                    (7)softplus                (8)Softmax   

(9)閾值函數 、階梯函數                                    (10)分段線性函數 


 

(1)sigmoid 函數 (以前最常用) 

參數  α  > 0 可控制其斜率。 sigmoid 將一個實值輸入壓縮至[0,1]的范圍,也可用於二分類的輸出層。

技術分享


(2)tanh  (雙曲正切函數 ;Hyperbolic tangent function) 

 將 一個實值輸入壓縮至 [-1, 1]的范圍,這類函數具有平滑和漸近性,並保持單調性.


(3)  relu (Rectified linear unit; 修正線性單元 )

 深度學習目前最常用的激活函數

  1.  
    # Relu在tensorflow中的實現: 直接調用函數
  2.  
    tf.nn.relu( features, name= None )
  3.  
         

與Sigmoid/tanh函數相比,ReLu激活函數的優點是:

  •  使用梯度下降(GD)法時,收斂速度更快  
  • 相比Relu只需要一個門限值,即可以得到激活值,計算速度更快  

 缺點是:  Relu的輸入值為負的時候,輸出始終為0,其一階導數也始終為0,這樣會導致神經元不能更新參數,也就是神經元不學習了,這種現象叫做“Dead Neuron”。

 為了解決Relu函數這個缺點,在Relu函數的負半區間引入一個泄露(Leaky)值,所以稱為Leaky Relu函數。


 (4)Leaky Relu  (帶泄漏單元的relu )

              數學表達式: y = max(0, x) + leak*min(0,x) 

與 ReLu 相比 ,leak 給所有負值賦予一個非零斜率,  leak是一個很小的常數 \large a_{i} ,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失) 

leaky ReLU

 

  1.  
    #leakyRelu在tennsorflow中的簡單實現
  2.  
    tf.maximum(leak * x, x),

       比較高效的寫法為:

  1.  
    import tensorflow as tf
  2.  
    def LeakyReLU(x,leak=0.2,name="LeakyReLU"):
  3.  
    with tf.variable_scope(name):
  4.  
    f1 = 0.5*(1 + leak)
  5.  
    f2 = 0.5*(1 - leak)
  6.  
    return f1*x+f2*tf.abs(x)

(5)  RReLU(隨機ReLU)

在訓練時使用RReLU作為激活函數,則需要從均勻分布U(I,u)中隨機抽取的一個數值\large a_{ji}  ,作為負值的斜率。

(6)softsign

數學表達式:

 \large f\left ( x \right )= \frac{x}{1+\left | x \right |}     ,導數:\large f{}'\left ( x \right )= \frac{1}{\left ( 1+\left | x \right | \right )^{2}}


(7)softplus

          Softplus函數是Logistic-Sigmoid函數原函數。\large Softplus(x)=log(1+e^x)  ,加了1是為了保證非負性。Softplus可以看作是強制非負校正函數max(0,x)平滑版本。紅色的即為ReLU。

技術分享


 

 (8)Softmax

  用於多分類神經網絡輸出


(11)GELU :高斯誤差線性單元

這篇論文中,作者展示了幾個使用GELU的神經網絡優於使用ReLU作為激活的神經網絡的實例。GELU也被用於BERT。

GELU、ReLU和LeakyReLU的函數

  1.  
    def gelu(x):
  2.  
    return 0.5 * x * (1 + math.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * math.pow(x, 3))))
  3.  
    def relu(x):
  4.  
    return max(x, 0)
  5.  
    def lrelu(x):
  6.  
    return max(0.01*x, x)


以下兩個是以前使用的:

(9)閾值函數 、階梯函數

相應的輸出 \large y_{k}  為 

(10)分段線性函數 

它類似於一個放大系數為 1 的非線性放大器,當工作於線性區時它是一個線性組合器, 放大系數趨於無窮大時變成一個閾值單元。 

 

3.Swish函數
Swish函數是一種自控門的激活函數,其定義:
Swish(x)=xσ(βx) Swish(x) = x\sigma(\beta x)
Swish(x)=xσ(βx)

其中,σ(⋅) \sigma(·)σ(⋅)函數是logistic函數,其值域在(−1,1) (-1,1)(−1,1),β \betaβ是一個參數。也就是說當σ(⋅) \sigma(·)σ(⋅)趨近於1的時候,其輸出和x xx本身近似;當σ(⋅) \sigma(·)σ(⋅)趨近於0的時候,其輸出趨近於0。

3、基於Gate mechanism的GLU、GTU 單元

    介紹一下基於gate mechanism實現的,兩個比較新穎的激活函數GTU和GLU。

    GTU(Gated Tanh Unit)的表達式為:

    f(X) = tanh(X*W+b) * O(X*V+c)

    GLU(Gated Liner Unit)的表達式為:

    f(X) = (X * W + b) * O(X * V + c)

    分析GTU和GLU的組成結構可以發現:

  Tanh激活單元:tanh(X*W+b),加上一個Sigmoid激活單元:O(X*V+c)構成的gate unit,就構成了GTU單元。

   Relu激活單元:(X * W + b),加上一個Sigmoid激活單元:O(X * V + c)構成的gate unit,就構成了GLU單元。

原文鏈接:https://blog.csdn.net/lqfarmer/article/details/72676715




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM