深度學習 深度學習權重初始化

2021-08-04 12:09:00 字數 1680 閱讀 9890

本文對cs231中的training neural networks的權重更新部分進行記錄

權重的初始化在深度神經網路中起著比較大的重要,算是乙個trick,但在實際應用上確是個大殺器。

1. 如果一開始把網路中的權重初始化為0,會發生什麼?

因為權重初始為0, 由於網路中的神經元的更新機制完全相同,由於網路的對稱性,會產生各個layer中產生相同的梯度更新,導致所有的權重最後值相同,收斂會出現問題。

所以在初始化引數的時候,乙個重要的設定原則就是破壞不同單元的對稱性質。

2. 乙個簡單的方法,初始化乙個比較小的值

高斯初始化,給權重較小的值。這種更新方式在小網路中很常見,然而當網路deep的時候,會出現梯度瀰散的情況

從圖上可以發現,第一層的output分布正常,之後的layer中逐漸趨於0。這很好理解(0.9^30 = 0.04), 在前向網路中,w*x,會導致神經元不被啟用。

但是如果把權重初始成乙個比較大的值,如

則會造成前向傳播時,神經元要麼被抑制,要麼被飽和

梯度更新時,也會出現梯度瀰散

3. xaiver更新方法

這個方法在以tanh為啟用函式中,很work

每一層的輸出基本滿足高斯分布,梯度更新時,收斂速度較好

然而這種方法沒有考慮以relu為啟用函式的情況

4. he更新方法

由於relu啟用函式的特性,他在x的負半軸中是不啟用的,所以應該在方差中考慮僅取一半,he et.al 2015指出以下初始方式:

僅僅在分母增加了 1/2。

此時,在每個layer中還是能看清楚輸出分布的:

事實上,如果權值初始化有問題的話,可以在啟用函式前加入batch normalization layer。

由於我也是初學,有錯誤歡迎各位指正

以上

深度學習筆記 2 1 11 權重初始化

經過1.10節的分析,我們知道過大或過小的權重設定可能會帶來梯度 或消失的問題,嚴重影響我們計算神經網路的速度,加大神經網路的訓練難度。那麼應該如何初始化權重呢?如下圖所示 我們用單個神經元舉例,這裡同樣不考慮b的情況 b 0 這時z w1x1 w2x2 wnxn,當n很大時,我們希望能夠存在較小的...

解析深度學習神經網路權重初始化

以全連線模型為例 輸入資料為a 784 的陣列,模型共2層神經元,第一層100個,第二層即輸出層為10個神經元,則第一層的權重有 784,100 個,截距有 100 個,第二層有 100,10 個權重,截距 10 個,用w1表示第一層權重矩陣,b1表示截距行向量,w2表示第二層權重矩陣,b2表示截距...

深度學習 變數初始化

權重一定不能全零初始化。因為這會導致神經元在前向傳播中計算出同樣的輸出,然後在反向傳播中計算出同樣的梯度,從而進行同樣的權重更新。這就產生了大量對稱性神經元。通常採用小隨機數初始化,通過這樣來打破對稱性。至於使用高斯分布還是均勻分布,對結果影響很小。之所以用小的隨機數,是因為 如果網路中存在tanh...