1.11 神经网络的权重初始化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
| 1.10 梯度消失與梯度爆炸 | 回到目錄 | 1.12 梯度的數值逼近 |
神經網絡的權重初始化 (Weight Initialization for Deep Networks)
上節課,我們學習了深度神經網絡如何產生梯度消失和梯度爆炸問題,最終針對該問題,我們想出了一個不完整的解決方案,雖然不能徹底解決問題,卻很有用,有助于我們為神經網絡更謹慎地選擇隨機初始化參數,為了更好地理解它,我們先舉一個神經單元初始化地例子,然后再演變到整個深度網絡。
我們來看看只有一個神經元的情況,然后才是深度網絡。
單個神經元可能有4個輸入特征,從 x1x_1x1? 到 x4x_4x4? ,經過 a=g(z)a=g(z)a=g(z) 處理,最終得到 y^\hat{y}y^? ,稍后講深度網絡時,這些輸入表示為 a[l]a^{[l]}a[l] ,暫時我們用 xxx 表示。
z=w1x1+w2x2+?+wnxnz=w_1x_1+w_2x_2+\cdots+w_nx_nz=w1?x1?+w2?x2?+?+wn?xn? , b=0b=0b=0 ,暫時忽略 bbb ,為了預防 zzz 值過大或過小,你可以看到 nnn 越大,你希望 wiw_iwi? 越小,因為 zzz 是 wixiw_ix_iwi?xi? 的和,如果你把很多此類項相加,希望每項值更小,最合理的方法就是設置 wi=1nw_i=\frac1nwi?=n1? , nnn 表示神經元的輸入特征數量,實際上,你要做的就是設置某層權重矩陣 w[l]=np.random.rand(shape)?np.sqrt(1n[l?1])w^{[l]}=np.random.rand(shape)*np.sqrt(\frac1{n^{[l-1]}})w[l]=np.random.rand(shape)?np.sqrt(n[l?1]1?) , n[l?1]n^{[l-1]}n[l?1] 就是我喂給第 lll 層神經單元的數量(即第 l?1l-1l?1 層神經元數量)。
結果,如果你是用的是Relu激活函數,而不是 1n\frac1nn1? ,方差設置為 2n\frac2nn2? ,效果會更好。你常常發現,初始化時,尤其是使用Relu激活函數時, g[l](z)=Relu(z)g^{[l]}(z)=Relu(z)g[l](z)=Relu(z) ,它取決于你對隨機變量的熟悉程度,這是高斯隨機變量,然后乘以它的平方根,也就是引用這個方差 2n\frac2nn2? 。這里,我用的是 n[l?1]n^{[l-1]}n[l?1] ,因為本例中,邏輯回歸的特征是不變的。但一般情況下 lll 層上的每個神經元都有 n[l?1]n^{[l-1]}n[l?1] 個輸入。如果激活函數的輸入特征被零均值和標準方差化,方差是1, zzz 也會調整到相似范圍,這就沒解決問題(梯度消失和爆炸問題)。但它確實降低了梯度消失和爆炸問題,因為它給權重矩陣 www 設置了合理值,你也知道,它不能比1大很多,也不能比1小很多,所以梯度沒有爆炸或消失過快。
我提到了其它變體函數,剛剛提到的函數是Relu激活函數,一篇由Herd等人撰寫的論文曾介紹過。對于幾個其它變體函數,如tanh激活函數,有篇論文提到,常量1比常量2的效率更高,對于tanh函數來說,它是 1n[l?1]\sqrt{\frac1{n^{[l-1]}}}n[l?1]1?? ,這里平方根的作用與這個公式作用相同( np.sqrt(1n[l?1])np.sqrt(\frac1{n^{[l-1]}})np.sqrt(n[l?1]1?) ),它適用于tanh激活函數,被稱為Xavier初始化。Yoshua Bengio和他的同事還提出另一種方法,你可能在一些論文中看到過,它們使用的是公式 2n[l?1]+n[l]\sqrt{\frac2{n^{[l-1]}+n^{[l]}}}n[l?1]+n[l]2?? 。其它理論已對此證明,但如果你想用Relu激活函數,也就是最常用的激活函數,我會用這個公式 np.sqrt(2n[l?1])np.sqrt(\frac2{n^{[l-1]}})np.sqrt(n[l?1]2?) ,如果使用tanh函數,可以用公式 1n[l?1]\sqrt{\frac1{n^{[l-1]}}}n[l?1]1?? ,有些作者也會使用這個函數。
實際上,我認為所有這些公式只是給你一個起點,它們給出初始化權重矩陣的方差的默認值,如果你想添加方差,方差參數則是另一個你需要調整的超級參數,可以給公式 np.sqrt(2n[l?1])np.sqrt(\frac2{n^{[l-1]}})np.sqrt(n[l?1]2?) 添加一個乘數參數,調優作為超級參數激增一份子的乘子參數。有時調優該超級參數效果一般,這并不是我想調優的首要超級參數,但我發現調優過程中產生的問題,雖然調優該參數能起到一定作用,但考慮到相比調優,其它超級參數的重要性,我通常把它的優先級放得比較低。
希望你現在對梯度消失或爆炸問題以及如何為權重初始化合理值已經有了一個直觀認識,希望你設置的權重矩陣既不會增長過快,也不會太快下降到0,從而訓練出一個權重或梯度不會增長或消失過快的深度網絡。我們在訓練深度網絡時,這也是一個加快訓練速度的技巧。
課程PPT
| 1.10 梯度消失與梯度爆炸 | 回到目錄 | 1.12 梯度的數值逼近 |
總結
以上是生活随笔為你收集整理的1.11 神经网络的权重初始化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.10 梯度消失与梯度爆炸-深度学习第
- 下一篇: 1.12 梯度的数值逼近-深度学习第二课