淺析激活函數之Relu函數


Relu函數

講Relu函數前需要先了解關於激活函數的概念和作用。

什么是激活函數?

首先了解一下神經網絡的基本模型


如上圖所示,神經網絡中的每個神經元節點接受上一層神經元的輸出值作為本神經元的輸入值,並將輸入值傳遞給下一層,輸入層神經元節點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關系,這個函數稱為激活函數。
簡單來說,激活函數,並不是去激活什么,而是指如何把“激活的神經元的特征”通過函數把特征保留並映射出來,即負責將神經元的輸入映射到輸出端。
為什么需要激活函數?

首先明確一點,激活函數是用來加入非線性因素的,因為線性模型的表達力不夠。
假設如果沒有激活函數的出現,你每一層節點的輸入都是上層輸出的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,也就是說沒有激活函數的每層都相當於矩陣相乘。就算你疊加了若干層之后,無非還是個矩陣相乘罷了。那么網絡的逼近能力就相當有限。正因為上面的原因,我們決定引入非線性函數作為激活函數,這樣深層神經網絡表達能力就更加強大(不再是輸入的線性組合,而是幾乎可逼近任意函數)

舉個例子:二分類問題,如果不使用激活函數,例如使用簡單的邏輯回歸,只能作簡單的線性划分,如下圖所示

如果使用激活函數,則可以實現非線性划分,如下圖所示:
可見,激活函數能幫助我們引入非線性因素,使得神經網絡能夠更好地解決更加復雜的問題。
為什么激活函數一般都是非線性的,而不能是線性的呢?
從反面來說,如果所有的激活函數都是線性的,則激活函數 g(z)=z,即 a=z。那么,以兩層神經網絡為例,最終的輸出為:

經過推導我們發現網絡輸出仍是 X 的線性組合。這表明,使用神經網絡與直接使用線性模型的效果並沒有什么兩樣。即便是包含多層隱藏層的神經網絡,如果使用線性函數作為激活函數,最終的輸出仍然是線性模型。這樣的話神經網絡就沒有任何作用了。因此,隱藏層的激活函數必須要是非線性的。

補充一點:因為神經網絡的數學基礎是處處可微的,所以選取的激活函數要能保證數據輸入與輸出也是可微的,運算特征是不斷進行循環計算,所以在每代循環過程中,每個神經元的值也是在不斷變化的。

有了大概的概念后就可進入正題~

Relu函數是什么?

首先,relu函數是常見的激活函數中的一種,表達形式如下。

Relu函數的圖像和求導后的圖像如下:

從表達式和圖像可以明顯地看出: Relu其實就是個取最大值的函數。
ReLU函數其實是分段線性函數,把所有的負值都變為0,而正值不變,這種操作被成為單側抑制。(也就是說: 在輸入是負值的情況下,它會輸出0,那么神經元就不會被激活。這意味着同一時間只有部分神經元會被激活,從而使得網絡很稀疏,進而對計算來說是非常有效率的。)正因為有了這單側抑制,才使得神經網絡中的神經元也具有了稀疏激活性。尤其體現在深度神經網絡模型(如CNN)中,當模型增加N層之后,理論上ReLU神經元的激活率將降低2的N次方倍。

使用Relu函數有什么優勢?

1.沒有飽和區,不存在梯度消失問題。
2.沒有復雜的指數運算,計算簡單、效率提高。
3.實際收斂速度較快,比 Sigmoid/tanh 快很多。
4.比 Sigmoid 更符合生物學神經激活機制。
當然relu也存在不足:就是訓練的時候很”脆弱”,很容易就”die”了. 舉個例子:一個非常大的梯度流過一個 ReLU 神經元,更新過參數之后,這個神經元再也不會對任何數據有激活現象了。如果這個情況發生了,那么這個神經元的梯度就永遠都會是0.實際操作中,如果你的learning rate 很大,那么很有可能你網絡中的40%的神經元都”dead”了。 當然,如果你設置了一個合適的較小的learning rate,這個問題發生的情況其實也不會太頻繁。

Ending~
參考資料(https://blog.csdn.net/u013146742/article/details/51986575
https://www.cnblogs.com/tianqizhi/p/9570975.html
https://blog.csdn.net/tyhj_sf/article/details/79932893
https://www.sohu.com/a/214965417_100008678


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM