深度學(xué)習(xí)中的參數(shù)初始化方法:Xavier詳細(xì)推導(dǎo)+pytorch實(shí)現(xiàn)

緩解梯度消失和梯度爆炸的參數(shù)初始化方式:Xavier
Xavier 初始化,也稱為Glorot初始化,是一種在訓(xùn)練深度學(xué)習(xí)模型時(shí)用于初始化網(wǎng)絡(luò)權(quán)重的策略。其核心思想是保持每一層輸出的方差與輸入的方差一致,以防止信號(hào)在深層網(wǎng)絡(luò)中的爆炸或消失。如果方差過大,那么網(wǎng)絡(luò)的層將會(huì)更難以學(xué)習(xí);如果方差過小,那么該層的權(quán)重將會(huì)難以更新。
總體來說,如果初始化權(quán)重過大或過小,可能會(huì)導(dǎo)致在訓(xùn)練過程中出現(xiàn)梯度消失或梯度爆炸的問題。如果權(quán)重初始化過大,激活函數(shù)(如sigmoid或tanh)可能會(huì)飽和,導(dǎo)致梯度接近于零,這將減慢學(xué)習(xí)速度。另一方面,如果權(quán)重初始化過小,那么權(quán)重更新可能會(huì)非常慢或完全停止,導(dǎo)致網(wǎng)絡(luò)無法學(xué)習(xí)。
例如下圖,在對(duì)sigmoid反向傳播時(shí),輸入很小或很大的參數(shù)值都會(huì)導(dǎo)致對(duì)參數(shù)的偏導(dǎo)幾乎為0,在進(jìn)行梯度下降時(shí),參數(shù)更新非常慢,幾乎無法進(jìn)行學(xué)習(xí)(甚至可能在某一層導(dǎo)致梯度消失,切斷了與后續(xù)的聯(lián)系)

假設(shè)與符號(hào)說明
權(quán)重
(這里表示 第
層從
層的第
個(gè)神經(jīng)單元連接到
層的第
個(gè)神經(jīng)單元的權(quán)重)是從均值為0,方差為
的分布中抽取的,并且符合獨(dú)立同分布,權(quán)重矩陣為
,可以認(rèn)為是
批次大小,每行是一個(gè)樣本,這些樣本有
個(gè)特征
層第
個(gè)神經(jīng)單元的輸入
(表示第
層的輸入,即是
層的輸出)服從均值為0的分布
沒有非線性(即沒有激活函數(shù))的全連接層,輸入維度為
,輸出維度為
,滿足
?,即
層的輸出是來自
層輸出的加權(quán)和,注意這里權(quán)重矩陣被轉(zhuǎn)置了,滿足
的維度關(guān)系
正向均值
正向均值,就是對(duì)層的輸出求數(shù)學(xué)期望,對(duì)于
層的任意一個(gè)神經(jīng)單元
,其期望滿足
這里意思是,第層的任意一個(gè)神經(jīng)單元
的輸出
,是來自
層的所有輸出與其對(duì)應(yīng)權(quán)重(從
連接到
對(duì)應(yīng)權(quán)重)積的和。由于我們假定了權(quán)重和輸入都是零均值,所以第
層輸出的數(shù)學(xué)期望依然是0。
并且注意這里的輸入和權(quán)重的獨(dú)立假設(shè)允許我們進(jìn)行
由于層每個(gè)神經(jīng)單元的輸出均值都是0,因此
層的輸出均值就是一個(gè)零向量
正向方差
注意這里由于上面證明了輸出的正向均值為0,因此這里的均值的平方項(xiàng)為0,將層的第
個(gè)神經(jīng)單元的輸出展開有
注意到,如果將這個(gè)和式的平方展開后,會(huì)產(chǎn)生很多交叉項(xiàng),它們的最高次數(shù)都是1,根據(jù)前面我們知道,對(duì)一次項(xiàng)求期望會(huì)因?yàn)榱憔档募僭O(shè)導(dǎo)致整項(xiàng)為0,因此我們只需要保留自身與自身相乘的項(xiàng)(二次項(xiàng))
再根據(jù)期望性質(zhì),并且注意到,由于是零均值,對(duì)二次項(xiàng)求期望相當(dāng)于求其方差
從而有
由于我們希望輸入與輸出的方差相同,只需要讓輸入維度乘以權(quán)重來自分布的方差為1
反向均值
根據(jù)反向傳播的原理,先由損失函數(shù)對(duì)求導(dǎo),再由
對(duì)
求導(dǎo),得到
而同理正向傳播,反向傳播的均值和方差結(jié)果也是類似的,這里權(quán)重表示的是從層的神經(jīng)單元
連向
層的神經(jīng)單元
的權(quán)重
根據(jù)權(quán)重的獨(dú)立同分布且零均值的特性,反向均值依然為0,即損失函數(shù)對(duì)層任意神經(jīng)單元的輸出求導(dǎo)的值為0
反向方差
這里需要注意到,由于交叉項(xiàng)會(huì)出現(xiàn)一次項(xiàng),而我們知道一次項(xiàng)的權(quán)重均值為0,因此我們只保留二次項(xiàng)(自己與自己相乘)
注意我們權(quán)重方差是假定好的,并且從連接到
和從
連接到
的權(quán)重是一樣的,有
我們同樣希望反向傳播的輸入與輸出的方差相同,因此需要
權(quán)衡
由于難以成立,因?yàn)槲覀儾豢赡苊看屋斎胼敵鼍S度都相同,因此Xavier采用
(即對(duì)兩個(gè)結(jié)果進(jìn)行算術(shù)平均)
并將參數(shù)從正態(tài)分布中隨機(jī)生成
也可以采用均勻分布
相比于原來我們指定方差例如用初始化參數(shù),Xavier通過計(jì)算得出其方差而不是我們?nèi)藶橹付?/p>
pytorch實(shí)現(xiàn)
只需要初始化時(shí)指定xavier_normal_即可
通過正態(tài)分布方差的最大似然估計(jì),我們發(fā)現(xiàn)推導(dǎo)和結(jié)果是相符合的