14 數(shù)值穩(wěn)定性 + 模型初始化和激活函數(shù)【動手學深度學習v2】

14數(shù)值穩(wěn)定性、模型初始化和激活函數(shù)

網(wǎng)絡層數(shù)較多時,向量每次進行求導計算都會產(chǎn)生新的矩陣,根據(jù)鏈式法則,網(wǎng)絡中將會產(chǎn)生大量的矩陣相乘計算,導致梯度爆炸和梯度消失

當梯度比1大時,會產(chǎn)生巨大的梯度,造成梯度爆炸,反之相則會造成梯度消失
注:diag是指取矩陣對角元素。MLP(Multi-Layer?Perceptron,MLP):多層感知機。

使用ReLU作為激活函數(shù)會導致梯度爆炸,sigmod激活函數(shù)會導致梯度消失


優(yōu)化訓練方法,防止產(chǎn)生梯度爆炸或消失。例如在疊加梯度時使用加法而不是乘法。

此外, 可以通過類似生成隨機變量使每一層的元素值都相似,主要用均值和方差這兩個特點控制相似度,同時,對反向傳播的梯度值也進行相似的歸一化。
注:圖中t是指層數(shù),i是指元素變量,Var是方差,E是期望。


詳述權(quán)重初始化方法:
注:h為該層輸出值,即下一層的輸入值。w為該層權(quán)重。二者為獨立分布

正向方差約束條件:

反向均值即方差約束條件:

知識補充:期望和方差計算


總結(jié)正反向傳播數(shù)據(jù)約束條件,發(fā)現(xiàn)兩條件難以同時滿足(不同層數(shù)的維度往往不一樣),所以提出較為折中的的Xavier初始:

由式可知,Xavier初始可以控制數(shù)據(jù)方差根據(jù)輸入及輸出數(shù)據(jù)的維度進行調(diào)整。
在以上條件的約束下,可以想見,若在層間插入線性激活函數(shù),而不改變數(shù)據(jù)方差和期望的話,線性激活函數(shù)必須是y=x。(或者說,從控制數(shù)據(jù)穩(wěn)定性方面看,最為理想的激活函數(shù)就是y=x)

推廣到常用的激活函數(shù),使用泰勒展開來輔助分析各函數(shù)對數(shù)據(jù)分布性質(zhì)的影響。

可以看出,在x=0附近(在實際網(wǎng)絡中,各層權(quán)重數(shù)值也往往集中在x=0附近),tanh(x)與relu(x)比較接近y=x的理想激活函數(shù),表現(xiàn)較好。
sigmoid(x)函數(shù)則需要一定的調(diào)整,來達到較好的數(shù)值穩(wěn)定性。
以上分析也從數(shù)值穩(wěn)定性的角度出發(fā),解釋了為什么在實際應用中tanh(x)與relu(x)激活函數(shù)的表現(xiàn)更好。
總結(jié):
合理的權(quán)重初始值和激活函數(shù)的選取可以提升數(shù)值穩(wěn)定性。
補充知識:
nan,inf錯誤是由梯度爆炸導致的常見錯誤。
除了正態(tài)分布、均值分布外,參數(shù)符合其他什么分布對結(jié)果不會有太大的影響(前提是均值、方差等要有約束)