梯度消失,常常發生在用基於梯度的方法訓練神經網路的過程中。
當我們在做反向傳播,計算損失函式對權重的梯度時,隨著越向後傳播,梯度變得越來越小,這就意味著在網路的前面一些層的神經元,會比後面的訓練的要慢很多,甚至不會變化。
網路的前面的一些層是很重要的,它們負責學習和識別簡單的模式,也是整個網路的基礎,如果他們的結果不準確的話,那麼後面層結果也會不準確。
而且用基於梯度的方法訓練出引數,主要是通過學習引數的很小的變化對網路的輸出值的影響有多大。如果引數的改變,網路的輸出值貢獻很小,那麼就會很難學習引數,花費時間會非常長。
在訓練神經網路時,為了讓損失函式越來越小,其中一種優化的方法是梯度下降。梯度下降法簡單的來說就是在權重的負梯度方向更新權重,如下面這個公式所示,一直到梯度收斂為零。(當然在實際過程中,會通過設定乙個超引數叫做最大跌代數來控制,如果迭代次數太小,結果就會不準確,如果迭代次數太大,那麼訓練過程會非常長。)
這裡就需要計算引數的梯度,方法是用反向傳播。
為了推導一下梯度消失的原因,我們來看乙個最簡單的神經網路的反向傳播過程。
每個神經元有兩個過程,乙個是權重與上一層輸出的線性組合,乙個是作用啟用函式。
來看一下最後的損失對第一層權重的梯度是怎樣的:
其中各部分推導:
上面用到的啟用函式為 sigmoid 函式,黃色曲線為 sigmoid 的導數,它的值域在 0 到 1/4 之間:
同時一般情況下神經網路在權重初始化時,會按照高斯分布,平均值為0標準差為1這樣進行初始化,所以權重矩陣也是小於1的。
於是可以知道:
由上面的例子可以看出,對第一層的權重求的偏導,就有五個小於1的數相乘,那麼當層數越多,這就會以指數級迅速減小。
越靠前的層數,由於離損失越遠,梯度計算式中包含的啟用函式的導數就越多,那麼訓練也就越慢。
(那麼梯度**,也就是同樣的道理,當啟用函式的導數大於1的時候,它會呈指數級的增長。)
由上面的推導我們可以知道,梯度消失的主要原因,主要是和啟用函式的導數有關。
所以如果啟用函式選擇的不合適,就會出現梯度消失問題
當然,除了啟用函式,還有其他幾種方法:
梯度消失:
梯度**:
今天先來重點看一下啟用函式的選擇
由前面的推導可以知道梯度消失的主要原因,是啟用函式的導數小於 1,那麼在選擇啟用函式時,就考慮這一點。
有哪些啟用函式可以選擇呢?
rectified linear unit,x 大於 0 時,函式值為 x,導數恒為 1,這樣在深層網路中使用 relu 啟用函式就不會導致梯度消失和**的問題,並且計算速度快。
但是因為 x 小於 0 時函式值恒為0,會導致一些神經元無法啟用。
是 relu 啟用函式的變體,為了解決 relu 函式為 0 部分的問題,當 x 小於 0 時,函式值為 kx,有很小的坡度 k,一般為 0.01,0.02,或者可以作為引數學習而得。
優點leaky relu有relu的所有優點:計算高效、快速收斂、在正區域內不會飽和
導數總是不為零,這能減少靜默神經元的出現,允許基於梯度的學習
一定程度上緩解了 dead relu 問題
指數線性單元(exponential linear unit,elu)也屬於 relu 的變體。x 小於 0 時為 alpha*(e^x -1)和其它修正類啟用函式不同的是,它包括乙個負指數項,從而防止靜默神經元出現,導數收斂為零,從而提高學習效率。
優點不會有dead relu問題
輸出的均值接近0,zero-centered
缺點計算量稍大
現在最常用的是 relu,已經成了預設選擇,
sigmoid 不要在隱藏層使用了,如果是二分類問題,可以在最後的輸出層使用一下,
隱藏層也可以用 tanh,會比 sigmoid 表現好很多。
此外,下面思維導圖總結了其他幾種 relu,sigmoid, tanh 的變體函式,它們的導數,以及優缺點:
relu 及其變體.jpg
tanh 及其變體.jpg
sigmoid 及其變體.jpg
學習資料:
梯度消失問題與如何選擇啟用函式
梯度消失,常常發生在用基於梯度的方法訓練神經網路的過程中。當我們在做反向傳播,計算損失函式對權重的梯度時,隨著越向後傳播,梯度變得越來越小,這就意味著在網路的前面一些層的神經元,會比後面的訓練的要慢很多,甚至不會變化。網路的前面的一些層是很重要的,它們負責學習和識別簡單的模式,也是整個網路的基礎,如...
LSTM與梯度消失
1.標準rnn中處理序列資料的方法是將上乙個state的資訊傳到下乙個state中,表示成數學公式為st f w st 1,xt b 其中f為啟用函式。在反向傳播中,根據求導的鏈式法則,這種形式求得的梯度為乙個矩陣w與啟用函式導數的乘積。如果進行n次反向傳播,梯度變化將會變為 w f 的n次方累乘。...
神經網路與深度學習筆記 梯度消失問題
神經網路與深度學習筆記系列一共有五個專題,分別是 第一章使用神經網路識別手寫數字 梯度下降演算法是什麼。主要介紹了神經網路的基礎例如感知器啟用函式等概念,最主要介紹了梯度下降演算法。第二章反向傳播演算法如何工作 反向傳播演算法原理。主要介紹了反向傳播演算法的工作原理。第三章改變神經網路的學習方法 代...