2020-5-10 吳恩達-NN&DL-w3 淺層NN(3.11 隨機初始化-否則完全對稱,多個隱藏單元沒有意義)

1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai

3.11 隨機初始化 Random Initialization

訓練NN時,權重隨機初始化是很重要的。
邏輯迴歸,權重初始化爲0是可以的。但是如果把NN的各個參數數組全部初始化爲0,那麼梯度下降算法會無效。

爲什麼會這樣呢?

在這裏插入圖片描述
觀察上面的網絡。

  • 有2個輸入特徵,n[0]=2
  • 有2個隱藏單元,n[1]=2

所以隱藏層參數矩陣 W[1]維度是2 x 2。初始化爲0,那麼W[1]=[0000]W^{[1]}=\begin{bmatrix} 0 & 0 \\ 0 & 0 \\ \end{bmatrix}
同樣,b[1]也初始化爲0,b[1]=[00]b^{[1]}=\begin{bmatrix} 0 \\ 0 \\ \end{bmatrix}

把偏置項b初始化爲0是合理的,但是把W初始化爲0就會產生問題。因爲你給NN輸入任何樣本,結果都是a1[1]=a2[1]a^{[1]}_1=a^{[1]}_2,所以2個激活函數完全一樣,這2個隱藏層都在做完全一樣的計算。

同樣,在做反向傳播時候,出於對稱性,dz1[1]=dz2[1]dz^{[1]}_1=dz^{[1]}_2

如果W[2]=[00]W^{[2]}=\begin{bmatrix} 0 & 0 \\ \end{bmatrix},那麼2個隱藏單元就完全一樣了,我們稱之完全對稱。這意味這節點在計算完全一樣的函數。我們可以通過歸納法證明,無論你計算多久,每次訓練迭代,2個隱藏節點都在計算相同的函數,2個節點對輸出節點的影響完全一樣,永遠是對稱的。在這種情況下,多個隱藏節點沒有任何意義

對於更大的NN,更多的隱藏單元,同樣可以證明,如果你把權重W都初始化爲0,那麼所有的隱藏單元都是對稱的,不管你下降了多久,它們都在計算完全一樣的函數,完全沒有用處。

回到2個隱藏單元NN,我們需要不同的隱藏單元去計算不同的函數。這個問題的計算方案是隨機初始化所有參數

W[1]=np.random.randn((2,2))*0.01 #產生參數爲(2,2)的高斯分佈隨機變量,再乘以0.01可以生成一個很小隨機數
b[1]=np.zero((2,1)) #b沒有完全對稱問題,可以初始化爲0
W[2]=np.random.randn((1,2))*0.01 #產生參數爲(1,2)的高斯分佈隨機變量,再乘以0.01可以生成一個很小隨機
b[2]=0 #b沒有完全對稱問題,可以初始化爲0

爲什麼初始值要用一個比較小的隨機數?

在這裏我們乘了1個0.01,而不是一個很大的數,因爲通常會把權重矩陣W初始化爲非常非常小的隨機值。因爲在隱藏層或者輸出層使用tanh或者sigmoid激活函數,如果權重W太大,那麼z會很大或者很小,那麼a值就會在曲線非常平緩的區域(激活函數飽和),顯然梯度(斜率)會非常小,梯度下降也會非常慢,參數的學習也會非常慢。
在這裏插入圖片描述

當然,如果不使用tanh和sigmoid函數,可能不會這樣的問題。但是二分法類的輸出單元採用的是sigmoid函數,初始權重W一定不能太大。

訓練一個單隱層的雙層NN,這是一個相對較淺的NN,沒有太多的隱藏層,使用 0.01設置權重W應該還可以,但是對於一個很深的NN,就可以需要嘗試其他常數了,不過無論如何初始化參數一般都應該很小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章