深度學習中常用的的激活函數包括了: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是一個很小的常數 ,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失)
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)中隨機抽取的一個數值 ,作爲負值的斜率。
(6)softsign
數學表達式:
,導數:
(7)softplus
Softplus函數是Logistic-Sigmoid函數原函數。 ,加了1是爲了保證非負性。Softplus可以看作是強制非負校正函數max(0,x)平滑版本。紅色的即爲ReLU。
(8)Softmax
用於多分類神經網絡輸出
以下兩個是以前使用的:
(9)閾值函數 、階梯函數
相應的輸出 爲
(10)分段線性函數
它類似於一個放大係數爲 1 的非線性放大器,當工作於線性區時它是一個線性組合器, 放大係數趨於無窮大時變成一個閾值單元。
參考文章:
- 激活函數-Sigmoid,Tanh,ReLu,softplus,softmax
- 【Deep Learning 三】神經網絡中的非線性激活函數之間的優缺點:sigmoid、tanh、ReLu、Leaky ReLu...
- 激活函數 sigmoid、tanh、relu
- 激活函數(Sigmoid, tanh, Relu)
- 深度學習激活函數sigmoid,tanh,ReLU,softma詳解
- 激活函數-Sigmoid, Tanh及ReLU
- 激活函數sigmoid,softmax,tanh,relu總結
- tanh,relu,sigmoid激活函數numpy實現
- 常用激活函數sigmoid,Tanh,ReLU
- 深度學習:激活函數的比較和優缺點,sigmoid,tanh,relu