神經網路中的啟用函式

2021-08-28 18:22:44 字數 2376 閱讀 4925

所謂啟用函式(activation function),就是在人工神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端,也叫激勵函式。

作用:因為線性模型的表達能力不夠,引入啟用函式是為了新增非線性因素。

在神經網路中,每一層輸出的都是上一層輸入的線性函式,所以無論網路結構怎麼搭,輸出都是輸入的線性組合。

在我們面對線性可分的資料集的時候,簡單的用線性分類器即可解決分類問題。但是現實生活中的資料往往不是線性可分的,面對這樣的資料,一般有兩個方法:引入非線性函式、線性變換。

線性變換:就是把當前特徵空間通過一定的線性對映轉換到另乙個空間,讓資料能夠更好的被分類。

引入非線性函式(啟用函式):啟用函式是如何引入非線性因素的呢?在神經網路中,為了避免單純的線性組合,我們在每一層的輸出後面都新增乙個啟用函式(sigmoid、tanh、relu等等)。

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

它能夠把輸入的連續實值「壓縮」到0和1之間。 特別的,如果是非常大的負數,那麼輸出就是0;如果是非常大的正數,輸出就是1. 

缺點:(1)梯度消失。sigmoid 有乙個非常致命的缺點,當輸入非常大或者非常小的時候,這些神經元的梯度是接近於0的。在神經網路反向傳播的過程中,我們都是通過微分的鏈式法則來計算各個權重w的微分的。當反向傳播經過了sigmod函式,這個鏈條上的微分就很小很小了,況且還可能經過很多個sigmod函式,最後會導致權重w對損失函式幾乎沒影響,這樣不利於權重的優化,這個問題叫做梯度飽和。所以,你需要尤其注意引數的初始值來盡量避免saturation的情況。如果你的初始值很大的話,大部分神經元可能都會處在saturation的狀態而把gradient kill掉,這會導致網路變的很難學習。

(2)sigmoid 的 output 不是0均值,這樣會使權重更新效率降低。這是不可取的,因為這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。 產生的乙個結果就是:如果資料進入神經元的時候是正的,那麼 w 計算出的梯度也會始終都是正的。 

(3)sigmod函式要進行指數運算,這個對於計算機來說是比較慢的。

tanh

是sigmoid的變形: 

tanh同樣存在在輸入很大或是很小的時候,輸出都幾乎平滑,梯度很小,不利於權重更新的問題。與 sigmoid 不同的是,tanh 是0均值的。因此,實際應用中,tanh 會比 sigmoid 更好。

一般二分類問題中,隱藏層用tanh函式,輸出層用sigmod函式。不過這些也都不是一成不變的,具體使用什麼啟用函式,還是要根據具體的問題來具體分析,還是要靠除錯的。

relu,rectified linear unit,稱為修正線性單元。

relu(rectified linear unit)函式是目前比較火的乙個啟用函式,相比於sigmoid函式和tanh函式,它有以下幾個優點:

(1)相比於sigmoid和tanh,克服了梯度消失的問題

(2)計算速度要快很多。relu函式只有線性關係,不管是前向傳播還是反向傳播,都比sigmod和tanh要快很多。(sigmoid和tanh要計算指數,計算速度會比較慢)

當然,缺點也是有的:

(1)訓練的時候很」脆弱」,很容易就」die」了. 什麼意思呢?

舉個例子:乙個非常大的梯度流過乙個 relu 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了。 如果這個情況發生了,那麼這個神經元的梯度就永遠都會是0。實際操作中,如果你的learning rate 很大,那麼很有可能你網路中的40%的神經元都」dead」了。 當然,如果你設定了乙個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。

(2)我們發現relu函式的輸出要麼是0,要麼是正數,這也就是說,relu函式也不是以0為中心的函式。

筆記:激勵函式需要可微分;神經層不是很多時,可以對隱藏層使用任意的激勵函式,卷積神經網路的卷積層中推薦使用relu,迴圈神經網路中推薦使用tanh或者relu;神經層比較多時,需要慎重選擇激勵函式。

神經網路中的啟用函式

作者 renu khandelwal 編譯 vk medium 啟用函式有助於決定我們是否需要啟用神經元。如果我們需要發射乙個神經元那麼訊號的強度是多少。啟用函式是神經元通過神經網路處理和傳遞資訊的機制 在神經網路中,z是輸入節點與節點權值加上偏差的乘積。z的方程與線性方程非常相似,取值範圍從 到 ...

神經網路啟用函式

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

啟用函式 神經網路

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