上一章傳送門:深度學(xué)習(xí)參數(shù)初始化詳細(xì)推導(dǎo):Xavier方法和kaiming方法【一】
2. kaiming初始化上一章說(shuō)到Xavier方法并不適用于ReLU函數(shù),但ReLU函數(shù)早已經(jīng)用得越來(lái)越廣泛,這可怎么辦?時(shí)代在召喚,kaiming大神出手了,2015年的論文[1]完美解決了這個(gè)問(wèn)題,提出的kaiming初始化方法專門針對(duì)ReLU函數(shù)及其變種,達(dá)到了和Xavier一樣的效果,可以說(shuō)是Xavier的升級(jí)版。 這篇論文[1]針對(duì)的是CNN結(jié)構(gòu)的網(wǎng)絡(luò),主要的貢獻(xiàn)一是提出了ReLU的變種PReLU,另一個(gè)就是kaiming初始化方法。PReLU不是今天的重點(diǎn),大概說(shuō)一下,如下圖,很像Leaky ReLU,差別只是參數(shù) 不是常數(shù),而是可訓(xùn)練的。 kaiming方法雖然提出來(lái)是針對(duì)CNN的,但其實(shí)完全可以用到普通的DNN中,下面我們的推導(dǎo)先假定是普通的DNN網(wǎng)絡(luò),后面再專門討論CNN的情況。 2.1 符號(hào)約定依舊入鄉(xiāng)隨俗,數(shù)學(xué)符號(hào)盡量和論文一致。 網(wǎng)絡(luò)層數(shù)為 ,第 層的輸入列向量為 ,狀態(tài)向量為 ,參數(shù)矩陣為 ,偏置向量為 , 為激活函數(shù),則有 2.2 公式推導(dǎo)所有偏置項(xiàng) 依然是初始化為0;假定 的每個(gè)元素在初始化階段獨(dú)立同分布,且采樣分布為對(duì)稱分布,均值為0,方差統(tǒng)一記為 ,這樣就有 ;再假定 的所有元素也是獨(dú)立同分布,且 和 相互獨(dú)立。 前向傳播情況根據(jù) ,有 上式換成方差形式: 由于激活函數(shù)是ReLU, 不可能為0,因此 是對(duì)稱分布且均值為0,根據(jù) 可以得出 也是對(duì)稱分布的。證明如下:
有了 分布的對(duì)稱性,設(shè) 的概率密度函數(shù)為 ,激活函數(shù)為 ,我們就可以直接算一下 : 代入(9)式,就有 然后遞歸一下,看最后一層 的方差: 為了讓各層的 和 相等保持不變,只需要: 嚴(yán)格來(lái)講,對(duì)于第一層,即 ,(12)式要把1/2去掉,因?yàn)樵嫉妮斎?nbsp; 并沒(méi)有經(jīng)過(guò)ReLU函數(shù),我們假定它是符合對(duì)稱分布的。不過(guò)論文也說(shuō)了,為了簡(jiǎn)單,所有層都可以按(12)處理,影響并不大。 后向傳播情況這一部分CNN和DNN有些差異,我這里公式符號(hào)不再嚴(yán)格和論文一致,思路是一致的。 損失函數(shù)用 表示,對(duì)向量 的偏導(dǎo)為 維的行向量: 其中任意一個(gè)元素 可以展開(kāi)如下: 由 ,易知 ,進(jìn)而 然后計(jì)算 , 這里先將 展開(kāi) 這里 是激活函數(shù)ReLU的導(dǎo)函數(shù),根據(jù) 的對(duì)稱分布特性,可知 有50%的概率為1,50%的概率為0。 由 可知 ,因此 代入前面的公式(b)即有 遞歸下去,便有 因此保持梯度方差穩(wěn)定,只需要: 同樣嚴(yán)格來(lái)講,對(duì)于第一層即 來(lái)說(shuō),約束(16')是不必要的,因?yàn)?nbsp; 是原始輸入,不需要計(jì)算 ,但為了簡(jiǎn)單和統(tǒng)一,同樣讓滿足(16'),對(duì)結(jié)果影響可忽略。 兩個(gè)約束條件的關(guān)系通過(guò)前向和后向的分析,我們得到兩個(gè)約束條件(12)和(16'),和Xavier方法對(duì)比一下可以發(fā)現(xiàn)只是差了一個(gè)常數(shù)項(xiàng)1/2。 同樣的問(wèn)題,當(dāng)各層維度不等時(shí),(12)和(16')無(wú)法同時(shí)滿足,當(dāng)然也可以像Xavier方法一樣整個(gè)折衷方案,不過(guò)論文里又做了一番分析,認(rèn)為只要任選一個(gè)約束就行。其實(shí)也很好理解,比如我們選(16')式成立,即讓 ,那么后向傳播方差穩(wěn)定自不必說(shuō),看一下前向的情況,公式(11)中的系數(shù)變成了 因?yàn)檫B乘都約掉了,這個(gè)系數(shù)雖然不是1,但也不會(huì)隨層數(shù)指數(shù)衰減或增大,只要各層維度相差不要太大,這個(gè)系數(shù)都可以接受。反過(guò)來(lái)選(12)成立也是一樣的,所以沒(méi)必要再整折衷方案。這個(gè)分析其實(shí)對(duì)Xavier方法一樣是成立的。 還有跟我們?cè)谏弦徽绿岬降囊粯樱袝r(shí)我們特意需要縮放方差 倍,只需要將(12)和(16')等式右邊的1改成 即可。 2.3 推廣到PReLU2.2的分析都是假設(shè)激活函數(shù)為ReLU,下面將其推廣到PReLU函數(shù)。PReLU的形式為: 不是固定常數(shù)而是可學(xué)習(xí)的參數(shù),帶下標(biāo)表示不是全局唯一的,而是可以每層共享同一個(gè)(稱為channel-shared),或者每個(gè)channel都對(duì)應(yīng)一個(gè)單獨(dú)的(稱為channel-wise)。不過(guò)在初始化階段我們都用同一個(gè)值 初始化所有的 ,所以這時(shí)候是等價(jià)于Leaky ReLU函數(shù),參數(shù)為 。當(dāng) 時(shí)就退化成了ReLU。 前向傳播情況對(duì)應(yīng)2.2,需要修改公式(a): 代入(9)式,就有 所以約束條件(12)變成了 后向傳播情況對(duì)應(yīng)2.2, 變?yōu)榧せ詈瘮?shù)PReLU的導(dǎo)函數(shù),根據(jù) 的對(duì)稱分布特性,可知 有50%的概率為1,50%的概率為 。這樣就有 有50%的概率為1,50%的概率為 ,即其期望為 。公式(c)修改為 代入公式(b)即有 所以約束條件(16')變成了 2.4 具體實(shí)現(xiàn)因?yàn)槌跏蓟A段ReLU可以看作是PReLU在 下的特例,所以我們統(tǒng)一按PReLU處理。 的每個(gè)元素 初始化采用均值為0的分布,且要求方差相同,滿足約束(12-PReLU)或約束(16’-PReLU)。通常采用均勻分布或正態(tài)分布,以(12-PReLU)式為例,具體為: PyTorch中提供了這兩個(gè)初始化函數(shù):
參數(shù)mode可選fan_in和fan_out,fan_in對(duì)應(yīng)前向,fan_out對(duì)應(yīng)后向。 2.5 CNN的情況一圖勝千言,我這里畫了個(gè)示意圖,將CNN的卷積過(guò)程轉(zhuǎn)換為類似于DNN的矩陣相乘運(yùn)算。 原始論文中是針對(duì)CNN網(wǎng)絡(luò),跟我前面推導(dǎo)的主要差異在于 和 的意義不同,論文中對(duì)應(yīng)的符號(hào)是 和 。 對(duì)于普通的DNN網(wǎng)絡(luò), 和 的意義很簡(jiǎn)單,就是第 層的輸入和輸出維度, 同時(shí)也是第 層的輸入維度。 對(duì)于CNN網(wǎng)絡(luò),比較復(fù)雜,論文中給出的 ,其中 來(lái)自于第 層filter的尺寸 , 為輸入channel數(shù)量。 就對(duì)應(yīng)于上圖 矩陣列數(shù),具體為 ,filter尺寸為 ,輸入channel數(shù)量為3。 前向過(guò)程看論文中公式(7) : 為列向量,維度就是 ,對(duì)應(yīng)圖中 矩陣的一行,。我畫圖為了方便,改成了行向量,包括 和 ,可以理解為都是轉(zhuǎn)置的關(guān)系。 維度為 ,即 ,對(duì)應(yīng)圖中 ,轉(zhuǎn)置關(guān)系。 為fitler數(shù)量,對(duì)應(yīng)圖中為2,也就是下一層網(wǎng)絡(luò)的輸入channel數(shù)量,因此有 為列向量,維度是 ,對(duì)應(yīng)圖中 矩陣的列數(shù),為2。 后向過(guò)程看論文中公式(13) : 和 分別表示 和 的列向量形式,按我之前的約定,就是: 維度為 , 維度為 , 維度為 注意,這里的 和前向過(guò)程的完全不是一個(gè)概念。對(duì)照?qǐng)D,我們可以這么理解,對(duì)于這一層的輸入圖像 的一個(gè)非邊緣像素點(diǎn) (上圖為了簡(jiǎn)單,輸入尺寸很小只有 ,導(dǎo)致只有一個(gè)點(diǎn)非邊緣,實(shí)際場(chǎng)景尺寸一般大得多,非邊緣點(diǎn)占大多數(shù)),維度為輸入channel數(shù) ,這個(gè)像素點(diǎn)在前向傳播中被每個(gè)filter做 次卷積, 個(gè)filter就一共做 次卷積,每次卷積都會(huì)參與到一個(gè)不同的 的更新運(yùn)算,一共參與 個(gè) 的運(yùn)算,在此圖中恰好覆蓋了 的所有元素,展開(kāi)成向量就是 對(duì)應(yīng)的矩陣為 ,即維度為 ,圖中沒(méi)有畫出,其實(shí)還是圖中 矩陣?yán)锏哪切┰?,只是需要重新排列一下?/p> 因此有 上式正是論文中的公式(13)。 兩個(gè)約束條件的關(guān)系弄清楚了 和 的含義,其他就和2.2的推導(dǎo)沒(méi)啥太大差別了。 而且因?yàn)?nbsp; 和 ,當(dāng)我們按論文中約束公式(16)初始化時(shí),即 ,公式(11)的系數(shù) 同樣不會(huì)隨層數(shù)指數(shù)衰減或增大,是個(gè)可接受的值,跟2.2結(jié)論一致。 參考文獻(xiàn)[1] He K, Zhang X, Ren S, et al. Delving deep into rectifiers: Surpassing human-level performance on imagenet classification[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1026-1034. 都看到這兒了,何不關(guān)注一下 |
|