神經網路 啟用函式對比

2021-08-07 13:39:50 字數 3316 閱讀 2372

本部落格僅為作者記錄筆記之用,不免有很多細節不對之處。

還望各位看官能夠見諒,歡迎批評指正。

日常 coding 中,我們會很自然的使用一些啟用函式,比如:sigmoid、relu等等。不過好像忘了問自己一(

n)件事:

為什麼需要啟用函式?

啟用函式都有哪些?都長什麼樣?有哪些優缺點?

怎麼選用啟用函式?

(此圖並沒有什麼卵用,純屬為了裝x …)

這些性質,也正是我們使用啟用函式的原因!

sigmoid 是常用的非線性的啟用函式,它的數學形式如下: f(

x)=1

1+e−

x正如前一節提到的,它能夠把輸入的連續實值「壓縮」到0和1之間。

特別的,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1.

sigmoid 函式曾經被使用的很多,不過近年來,用它的人越來越少了。主要是因為它的一些缺點

tanh 是上圖中的右圖,可以看出,tanh 跟sigmoid還是很像的,實際上,tanh 是sigmoid的變形: ta

nh(x

)=2s

igmo

id(2

x)−1

與 sigmoid 不同的是,tanh 是0均值的。因此,實際應用中,tanh 會比 sigmoid 更好(畢竟去粗取精了嘛)。

x)=m

ax(0

,x)很顯然,從圖左可以看出,輸入訊號

<

0 是二維的情況下,使用relu之後的效果如下:

relu 的優點:

relu 的缺點:當然 relu 也有缺點,就是訓練的時候很」脆弱」,很容易就」die」了. 什麼意思呢?

舉個例子:乙個非常大的梯度流過乙個 relu 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了。

如果這個情況發生了,那麼這個神經元的梯度就永遠都會是0.

實際操作中,如果你的learning rate 很大,那麼很有可能你網路中的40%的神經元都」dead」了。

當然,如果你設定了乙個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。

leaky relus:就是用來解決這個「dying relu」的問題的。與 relu 不同的是: f(

x)=α

x,(x

<0)

f(x)

=x,(

x>=0)

這裡的

α 是乙個很小的常數。這樣,即修正了資料分布,又保留了一些負軸的值,使得負軸資訊不會全部丟失。

關於leaky relu 的效果,眾說紛紜,沒有清晰的定論。有些人做了實驗發現 leaky relu 表現的很好;有些實驗則證明並不是這樣。

parametric relu:對於 leaky relu 中的

α,通常都是通過先驗知識人工賦值的。

然而可以觀察到,損失函式對

α的導數我們是可以求得的,可不可以將它作為乙個引數進行訓練呢?

kaiming he的**《delving deep into rectifiers: surpassing human-level performance on imagenet classification》指出,不僅可以訓練,而且效果更好。

公式非常簡單,反向傳播至未啟用前的神經元的公式就不寫了,很容易就能得到。對

α的導數如下: δy

iδα=

0,(i

fyi>0)

,els

e=yi

原文說使用了parametric relu後,最終效果比不用提高了1.03%.

randomized relu:

randomized leaky relu 是 leaky relu 的random 版本 (

α 是random的).

它首次試在 kaggle 的ndsb 比賽中被提出的。

核心思想就是,在訓練過程中,

α 中 隨機出來的,然後再測試過程中進行修正(有點像dropout的用法)。

數學表示如下:

在測試階段,把訓練過程中所有的 αi

j 中隨機出來的。那麼,在測試階段,啟用函式就是就是: yi

j=xi

jl+u

2看看 cifar-100 中的實驗結果:

maxout出現在icml2013上,作者goodfellow將maxout和dropout結合後,號稱在mnist, cifar-10, cifar-100, svhn這4個資料上都取得了start-of-art的識別率。

maxout 公式如下: fi

(x)=

maxj

∈[1,

k]zi

j假設

w 是2維,那麼有: f(

x)=m

ax(w

t1x+

b1,w

t2x+

b2)可以注意到,relu 和 leaky relu 都是它的乙個變形(比如,w1

,b1=

0 的時候,就是 relu).

maxout的擬合能力是非常強的,它可以擬合任意的的凸函式。作者從數學的角度上也證明了這個結論,即只需2個maxout節點就可以擬合任意的凸函式了(相減),前提是」隱隱含層」節點的個數可以任意多.

所以,maxout 具有 relu 的優點(如:計算簡單,不會 saturation),同時又沒有 relu 的一些缺點 (如:容易 go die)。不過呢,還是有一些缺點的嘛:就是把引數double了。

還有其他一些啟用函式,請看下表:

怎麼選擇啟用函式呢?

我覺得這種問題不可能有定論的吧,只能說是個人建議。

如果你使用 relu,那麼一定要小心設定 learning rate,而且要注意不要讓你的網路出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 leaky relu、prelu 或者 maxout.

還有,通常來說,很少會把各種啟用函式串起來在乙個網路中使用的。

[1].

[2].

[3].

[4].

神經網路啟用函式

2018,jul 23 學了深度學習也快近一年了,在學deep learning的時候什麼教程都去看,起初學起來也特別的雜亂,前面的基礎沒弄懂還一直往下學,自然導致我學到後面的時候有點崩潰什麼都看不懂,並且因為自己還是一名在校生,平常課程也非常多,沒有乙個連續的學習時間也導致我的學習是斷斷續續,在學...

啟用函式 神經網路

andrew的 neural networks and deep learning 課程學習筆記 如圖所示,是乙個簡單的三層神經網路,如果只使用線性啟用函式或者恒等啟用函式 不使用啟用函式 那麼神經網路的輸出就只是輸入函式的線性變化,因為線性啟用函式的組合依然是線性啟用函式。這種情況下,不管使用多少...

神經網路啟用函式

1.sigmoid sigmoid散活函式是將 乙個實數輸入轉化至 0 1 之間的輸出,具體來說也就是將越大的負數轉化到越靠近 0 越大的正數轉化到越靠近1。多用於二分類。缺點 1 sigmoid 函式會造成梯度消失。乙個非常不好的特點就是 sigmoid 函式在靠近 1和0 的兩端時,梯度會幾乎變...