深度學習的激活函數 :sigmoid、tanh、ReLU 、Leaky Relu、RReLU、softsign 、softplus、GELU
【 tensorflow中文文檔:tensorflow 的激活函數有哪些】
激活函數可以分為兩大類 :
- 飽和激活函數: sigmoid、 tanh
- 非飽和激活函數: ReLU 、Leaky Relu 、ELU【指數線性單元】、PReLU【參數化的ReLU 】、RReLU【隨機ReLU】
相對於飽和激活函數,使用“非飽和激活函數”的優勢在於兩點:
1.首先,“非飽和激活函數”能解決深度神經網絡【層數非常多!!】的“梯度消失”問題,淺層網絡【三五層那種】才用sigmoid 作為激活函數。
2.其次,它能加快收斂速度。
目錄
(2)tanh (雙曲正切函數 ;Hyperbolic tangent function)
(3) relu (Rectified linear unit; 修正線性單元 )
(4)Leaky Relu (帶泄漏單元的relu ) (5) RReLU(隨機ReLU)
(6)softsign (7)softplus (8)Softmax
(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是一個很小的常數 ,這樣保留了一些負軸的值,使得負軸的信息不會全部丟失)

-
#leakyRelu在tennsorflow中的簡單實現
-
tf.maximum(leak * x, x),
比較高效的寫法為:
-
import tensorflow as tf
-
def 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
用於多分類神經網絡輸出
(11)GELU :高斯誤差線性單元
在這篇論文中,作者展示了幾個使用GELU的神經網絡優於使用ReLU作為激活的神經網絡的實例。GELU也被用於BERT。
GELU、ReLU和LeakyReLU的函數
-
def gelu(x):
-
return 0.5 * x * (1 + math.tanh(math.sqrt(2 / math.pi) * (x + 0.044715 * math.pow(x, 3))))
-
def relu(x):
-
return max(x, 0)
-
def lrelu(x):
-
return max(0.01*x, x)
以下兩個是以前使用的:
(9)閾值函數 、階梯函數
相應的輸出 為
(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