深度學習 神經網路中的activation

2021-08-11 20:57:00 字數 1117 閱讀 8316

神經網路中有個詞叫做 activation——啟用函式

現假設一神經網路n,其中w為權值引數,x為輸入,b為偏置。神經網路中上層的訊號  wx+b 在作為下層的輸入 之前,需要 使用 啟用函式啟用。

why?從兩個角度解釋

a:如果不用啟用函式(其實相當於啟用函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(perceptron)了。引入非線性函式作為啟用函式,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函式)。

b : 在網路n中,並不是所有的上一層訊號都可以啟用下一層,如果所有的上一層訊號都可以啟用下一層,那麼這一層相當於什麼都沒有做。因此需要選擇一些訊號啟用下一層的神經元。如何表示啟用呢?就是當activation function的輸出結果是0,就代表抑制;是1,就代表啟用。

q2:為什麼引入relu呢?

第一,採用sigmoid等函式,算啟用函式時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用relu啟用函式,整個過程的計算量節省很多。

第二,對於深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成資訊丟失,參見

@haofeng li答案的第三點),從而無法完成深層網路的訓練。

第三,relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了引數的相互依存關係,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。

當然現在也有一些對relu的改進,比如prelu,random relu等,在不同的資料集上會有一些訓練速度上或者準確率上的改進,具體的大家可以找相關的*****看。

多加一句,現在主流的做法,會多做一步batch normalization,盡可能保證每一層網路的輸入具有相同的分布[1]。而最新的*****[2],他們在加入bypass connection之後,發現改變batch normalization的位置會有更好的效果。大家有興趣可以看下。

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...

深度學習 深度神經網路

神經網路是由乙個個神經元相互連線並按層次排列構成的,深度神經網路是有任意層的神經網路,這裡的深度是指層次的多,而不是神經元數量的多。有任意層,那麼就要有乙個迴圈來負責遍歷每一層進行計算。所以深度神經網路的計算形式,就必須要適應這個迴圈結構。我們先來說說神經元吧 對於多神經元神經網路,其實也是一樣的。...

神經網路和深度學習 淺層神經網路

乙個淺層神經網路示意圖 如圖所示,表示乙個單隱層的網路結構。這裡主要需要注意的是,層與層之間引數矩陣的規格大小 隱藏層和輸出層之間 由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 n out,nin b引數矩陣大小為 n ...