0
本文作者: 大牛講堂 | 2016-11-16 15:41 |
雷鋒網(wǎng)按:作者羅恒,地平線機(jī)器人技術(shù)資深算法研究員。2011年博士畢業(yè)于上海交通大學(xué),后隨Yoshua Bengio從事博士后研究,2014年加入百度深度學(xué)習(xí)實(shí)驗(yàn)室,參與深度學(xué)習(xí)在搜索中應(yīng)用、PaddlePaddle研發(fā)等工作。2016年加入地平線機(jī)器人公司,負(fù)責(zé)深度學(xué)習(xí)模型壓縮與加速。
訓(xùn)練更深的神經(jīng)網(wǎng)絡(luò)近年來(lái)一直是深度學(xué)習(xí)領(lǐng)域的重要趨勢(shì)之一,2015年初Google提出的Batch Normalization 算法使得深層神經(jīng)網(wǎng)絡(luò)訓(xùn)練更加穩(wěn)定,加快了收斂的速度,甚至同時(shí)起到了正則化的作用。本期羅老師將為大家分析Batch Normalization背后的動(dòng)機(jī)和原理,以及后續(xù)的發(fā)展。
1.引言
現(xiàn)在正是神經(jīng)網(wǎng)絡(luò)的第三次研究的熱潮,與之前兩次不同,這次神經(jīng)網(wǎng)絡(luò)(深度學(xué)習(xí))在很多實(shí)際問(wèn)題上取得了巨大的成功,吸引了越來(lái)越多的人投身其中。剛開(kāi)始接觸神經(jīng)網(wǎng)絡(luò)的同學(xué)們,往往發(fā)現(xiàn)無(wú)從下手,有很多理論的文章,但是似乎對(duì)實(shí)際用處不大。談?wù)撟疃嗟耐歉鞣N各樣的tricks。
Batch Normalization [1] 是近年來(lái)最火爆的tricks之一,幾乎成了前向神經(jīng)網(wǎng)絡(luò)的標(biāo)配。在我看來(lái),BN主要做的比較好的是在恰當(dāng)?shù)牡胤阶鰳?biāo)準(zhǔn)化(Normalization),在矩陣乘之后,在激活之前;BN的參數(shù)和
使得輸出仍舊保持一定的靈活性;為什么這兩方面比較重要下面我會(huì)做些分析。最后我會(huì)簡(jiǎn)單討論一些把BN應(yīng)用到RNN的工作。
2. 升降桌和中心極限定理
在開(kāi)始之前先來(lái)個(gè)廣告,地平線機(jī)器人最近搬家了,我發(fā)現(xiàn)所有的桌子都換成了電動(dòng)升降桌,如下圖
前面的數(shù)字是桌面的高度,精確到毫米,那兩個(gè)三角可以調(diào)節(jié)升還是降,但是經(jīng)常調(diào)完了之后出現(xiàn)“78.3”、“77.9”之類的數(shù)字,而我更喜歡整數(shù)“78”,我最常用的策略就是當(dāng)接近78的時(shí)候,交替地(為了對(duì)符號(hào)均勻采樣)快速地按(力爭(zhēng)每次按擊獨(dú)立)上升、下降,很快數(shù)字就會(huì)停到了78。這是因?yàn)榘凑罩行臉O限定理,我壓了一堆均值接近0的隨機(jī)數(shù)(+0.1, -0.2, +0.3之類的),那么這些隨機(jī)數(shù)的累加和(桌子的最終高度)會(huì)服從正態(tài)分布,我會(huì)很大概率見(jiàn)到0,也就是整數(shù)的高度。這里也就引出了今天介紹Batch Normalization的一個(gè)角度,一些隨機(jī)數(shù)的累加和很可能服從正態(tài)分布(Normal distribution),中心極限定理。
3. 神經(jīng)網(wǎng)絡(luò)訓(xùn)練困難的一個(gè)例子
廣告結(jié)束,言歸正傳。神經(jīng)網(wǎng)絡(luò)很多年了,一個(gè)很大的困難在于比較難訓(xùn)練。比較難訓(xùn)練的一個(gè)可能原因在于,神經(jīng)網(wǎng)絡(luò)高度冗余,同一個(gè)函數(shù)我們可以找到很多很多參數(shù)不同的網(wǎng)絡(luò)來(lái)確切的等價(jià)于這個(gè)函數(shù),而這些不同參數(shù)的網(wǎng)絡(luò)有的優(yōu)化起來(lái)很容易,有的則非常困難。比如這樣一個(gè)函數(shù),
(這是個(gè)線性函數(shù),里面沒(méi)有非線性變換,主要是為了簡(jiǎn)單。不過(guò)當(dāng)我們用ReLU作為激活函數(shù),當(dāng)都是正的,當(dāng)輸入也是正的,下面的分析也都可以保持正確),我們發(fā)現(xiàn),
和
表達(dá)的函數(shù)完全一樣,但是當(dāng)我們做sgd的時(shí)候后者的優(yōu)化會(huì)變得十分困難。假如些X=1,損失函數(shù)傳來(lái)的梯度是
(損失函數(shù)希望網(wǎng)絡(luò)能輸出個(gè)小的y),對(duì)于第二組參數(shù)代表的網(wǎng)絡(luò)求得的梯度為
,如果拿這個(gè)去更新第二組參數(shù),那么數(shù)值小的參數(shù)改變巨大,大的參數(shù)則幾乎不變,訓(xùn)練過(guò)程將會(huì)變得非常不穩(wěn)定。
4. BN的動(dòng)機(jī)和成功的原因
訓(xùn)練神經(jīng)網(wǎng)絡(luò),通常是用反向傳播算法(BP)+隨機(jī)梯度下降(SGD),具體到一個(gè)具體的第L層連接神經(jīng)元i和神經(jīng)元j的參數(shù)的更新就是
,通常我們會(huì)希望這個(gè)更新比較穩(wěn)定。因此,首先有很多的工作在于選擇自適應(yīng)的學(xué)習(xí)率
,對(duì)于上面的例子如果我們能夠找到非常適合的各個(gè)參數(shù)大小不同的學(xué)習(xí)率,訓(xùn)練過(guò)程依舊可以變得很穩(wěn)定;其次,也有些tricks可以看做穩(wěn)定從網(wǎng)絡(luò)上層回傳的錯(cuò)誤
,比如隨機(jī)shuffle訓(xùn)練數(shù)據(jù),當(dāng)樣本不均衡時(shí)做些采樣;第三類工作則是穩(wěn)定
(其中
,
是某個(gè)非線性函數(shù))。之前有過(guò)工作直接對(duì)
來(lái)標(biāo)準(zhǔn)化,效果有限。BN的結(jié)果之所以更好,可能作對(duì)了兩個(gè)地方,第一,正像我們之前講的,一堆隨機(jī)數(shù)的和(
)更接近一個(gè)正態(tài)分布,在這個(gè)和上來(lái)做標(biāo)準(zhǔn)化更加容易使得
通過(guò)非線性
之后依然保持穩(wěn)定,對(duì)于使用sigmoid非線性的時(shí)候,
對(duì)于一個(gè)mini batch而言大概接近68%的值在[0.27 0.73]之間,95%的值在[0.12 0.88]之間,這當(dāng)然很好,基本都在sigmoid函數(shù)的線性部分,不會(huì)出現(xiàn)飽和的情況(這里的梯度不會(huì)接近0),這樣的好處就是訓(xùn)練在一開(kāi)始可以變得很快,如下圖。但是問(wèn)題在于假如
真的始終是接正態(tài)分布,那么這些神經(jīng)元就很難達(dá)到它的飽和區(qū)域。
BN的作者引入的可能是為了解決這個(gè)問(wèn)題,但是我覺(jué)得可能很難,從
的梯度
可以看出,這個(gè)梯度可能會(huì)在一個(gè)mini batch內(nèi)相互抵消,從而變得很?。ㄓ信d趣的同學(xué)可以做實(shí)驗(yàn)看看是不是會(huì)比較?。?。當(dāng)然也可能通過(guò)在開(kāi)始初始化的時(shí)候把直接設(shè)成比較適合的值,不過(guò)這就是另一個(gè)問(wèn)題了。從上圖也可以看出,似乎模型的在MNIST上也是underfitting,是否是上面說(shuō)的原因呢?
不過(guò)BN的設(shè)計(jì)的背景本身就是為了很深的網(wǎng)絡(luò)+ReLU這類激活函數(shù)。換句話說(shuō)是如何使得深層ReLU網(wǎng)絡(luò)在較大學(xué)習(xí)率的情況下訓(xùn)練保持穩(wěn)定。那么我們?cè)赗eLU的情況下繼續(xù)討論,假設(shè)來(lái)自正態(tài)分布,標(biāo)準(zhǔn)化之后(0均值1方差),那么總會(huì)有一半左右的數(shù)據(jù)通過(guò)ReLU之后為0,也就是說(shuō)當(dāng)前這個(gè)神經(jīng)元對(duì)于后續(xù)的計(jì)算不在起作用了(但是還是會(huì)有關(guān)于這些樣本的梯度傳回)。BN的作者引入的
可能是為了解決這個(gè)問(wèn)題,從
的梯度
可以看出,如果有更多的錯(cuò)誤傳來(lái),
則會(huì)變小,從而允許更多的樣本向上傳遞非零的信號(hào)。在訓(xùn)練過(guò)程中把神經(jīng)元的平均的非零可視化出來(lái)可能也會(huì)比較有意思。從這里的分析,也可以看出來(lái),BN網(wǎng)絡(luò)相對(duì)而言更加需要全局的徹底的隨機(jī)shuffle,如果沒(méi)有徹底的shuffle,幾條樣本總是出現(xiàn)在同一個(gè)mini batch中,那么很可能有些樣本對(duì)于在經(jīng)過(guò)標(biāo)準(zhǔn)化之后,在很多神經(jīng)元的輸出總是零,從而難以將信號(hào)傳遞到頂層。這可能就是為什么[1]提到增加了shuffle之后,結(jié)果在驗(yàn)證集上有所變好。同時(shí)這也可能為什么當(dāng)使用了BN+隨機(jī)shuffle之后dropout的作用在下降的一個(gè)原因,因?yàn)閿?shù)據(jù)隨機(jī)的組合,利用mini batch統(tǒng)計(jì)量標(biāo)準(zhǔn)化之后,對(duì)于特定樣本的特定神經(jīng)元可能隨機(jī)地為0,那么和dropout的機(jī)制有類似的地方。但是如果使用很大的mini batch又會(huì)如何呢?
除了上面提到的在適合的地方做標(biāo)準(zhǔn)化、使用和
保持靈活性之外,BN把均值和方差的計(jì)算也看作整個(gè)運(yùn)算的一部分(參與梯度的計(jì)算),從而避免了反向過(guò)程中梯度試圖改變均值和方差,然而前向過(guò)程的BN層又會(huì)取消梯度的這些企圖。
BN取得了很大的成功,同時(shí)也暗示了后來(lái)的研究方向:首先,梯度消失和爆炸在RNN中更為常見(jiàn),如何應(yīng)用BN到RNN;其次,如何克服BN對(duì)mini batch的大小敏感;第三如何統(tǒng)一訓(xùn)練和測(cè)試過(guò)程等等。
5. 應(yīng)用BN到RNN的一些工作
BN之后,很快就開(kāi)始有一些工作嘗試在RNN中加入BN。首先我們來(lái)看RNN,,其中的激活函數(shù)常用的tanh。在[2]中先嘗試了直接加入BN,
,結(jié)果不好,即使是在訓(xùn)練集也會(huì)略差(直接加入BN后模型的優(yōu)化、擬合都出了問(wèn)題)。[2]又改為
,overfitting(訓(xùn)練集好,驗(yàn)證集差)。我的理解在于
和
可能是很不同的正態(tài)分布,他們求和之后再做標(biāo)準(zhǔn)化,可能會(huì)有害處。[3]中進(jìn)一步做了如下調(diào)整,
,這樣將兩個(gè)不同的正態(tài)分布分別標(biāo)準(zhǔn)化再相加就合理多了。同時(shí)[3]中還有兩個(gè)tricks,第一,不再初始化為1而是初始化為比較小的數(shù),如0.1。我估計(jì)這個(gè)可能和LSTM中大量的sigmoid和tanh有關(guān)(有興趣的同學(xué)可以自己分析看看);第二,不同的時(shí)間步t各自統(tǒng)計(jì)自己的mean和std,這個(gè)可能對(duì)于之前overfitting的一個(gè)回應(yīng),就是說(shuō)工作[2]中overfitting的原因在于訓(xùn)練的時(shí)候用來(lái)做標(biāo)準(zhǔn)化的統(tǒng)計(jì)量(每層每個(gè)mini batch計(jì)算得到)和測(cè)試的過(guò)程中使用的統(tǒng)計(jì)量(使用訓(xùn)練中各層共享的、不斷地做moving avearge的統(tǒng)計(jì)量)顯著不同。
另外一個(gè)在RNN中做Normalization比較重要的工作是[4]。Layer Normalization與BN的機(jī)制似乎不太相同,這里不展開(kāi)分析了。LN除了可以作用在RNN之外,也可以用于前向全連接的網(wǎng)絡(luò),論文也也給出了比較試驗(yàn),如下圖,
從右邊的圖可以看出太小的mini batch對(duì)于BN無(wú)論是在訓(xùn)練的過(guò)程和測(cè)試過(guò)程中使用訓(xùn)練過(guò)程統(tǒng)計(jì)的統(tǒng)計(jì)量都造成了危害。從左邊的圖則可以看出,由于LN是對(duì)每條樣本做標(biāo)準(zhǔn)化從而失去了上面討論的BN帶來(lái)的正則化效果。
參考文獻(xiàn)
[1] Sergey Ioffe and Christian Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. ICML, 2015.
[2] Ce ?sar Laurent, Gabriel Pereyra, Phile ?mon Brakel, Ying Zhang, and Yoshua Bengio. Batch normalized recurrent neural networks. arXiv preprint arXiv:1510.01378, 2015.
[3] Tim Cooijmans, Nicolas Ballas, Ce ?sar Laurent, and Aaron Courville. Recurrent batch normalization. arXiv preprint arXiv:1603.09025, 2016.
[4] Ba, J. L., Kiros, J. R., and Hinton, G. E. (2016). Layer normalization. arXiv preprint arXiv:1607.06450.
END
本周四(17日)晚19:00-19:45,羅恒博士即將參與大牛直播間線上活動(dòng),在“大牛部落”微信群中,為大家在線解答技術(shù)問(wèn)題,并與大家一起展望Batch Normalization的未來(lái)。可申請(qǐng)加入“大牛部落”,參加線上直播。
注:本文由大牛講堂發(fā)布雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)聯(lián)系原作者,并注明作者和出處,不得刪減內(nèi)容。有興趣可以關(guān)注公號(hào)【地平線機(jī)器人技術(shù)】,了解最新消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。