【深度學習】深度學習中常用的激活函數

深度學習中常用的的激活函數包括了:sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus。

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

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

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

   2.其次,它能加快收斂速度

   2.其次,它能加快收斂速度


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

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

技術分享


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

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


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

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

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

與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

#leakyRelu在tennsorflow中的簡單實現
tf.maximum(leak * x, x),
比較高效的寫法爲:
import tensorflow as tfdef 
LeakyReLU(x,leak=0.2,name="LeakyReLU"):
    with tf.variable_scope(name):
        f1 = 0.5*(1 + leak)
        f2 = 0.5*(1 - leak)
    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

  用於多分類神經網絡輸出


以下兩個是以前使用的:

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

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

(10)分段線性函數 

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


參考文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章