導(dǎo)讀
如何去掉batch normalization層來(lái)加速神經(jīng)網(wǎng)絡(luò)。
介紹
Batch Normalization是將各層的輸入進(jìn)行歸一化,使訓(xùn)練過(guò)程更快、更穩(wěn)定的一種技術(shù)。在實(shí)踐中,它是一個(gè)額外的層,我們通常添加在計(jì)算層之后,在非線性之前。它包括兩個(gè)步驟:
首先減去其平均值,然后除以其標(biāo)準(zhǔn)差
進(jìn)一步通過(guò)γ縮放,通過(guò)β偏移,這些是batch normalization層的參數(shù),當(dāng)網(wǎng)絡(luò)不需要數(shù)據(jù)的時(shí)候,均值為0、標(biāo)準(zhǔn)差為1。
Batch normalization在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中具有較高的效率,因此得到了廣泛的應(yīng)用。但它在推理的時(shí)候有多少用處呢?
一旦訓(xùn)練結(jié)束,每個(gè)Batch normalization層都擁有一組特定的γ和β,還有μ和σ,后者在訓(xùn)練過(guò)程中使用指數(shù)加權(quán)平均值進(jìn)行計(jì)算。這意味著在推理過(guò)程中,Batch normalization就像是對(duì)上一層(通常是卷積)的結(jié)果進(jìn)行簡(jiǎn)單的線性轉(zhuǎn)換。
由于卷積也是一個(gè)線性變換,這也意味著這兩個(gè)操作可以合并成一個(gè)單一的線性變換!這將刪除一些不必要的參數(shù),但也會(huì)減少推理時(shí)要執(zhí)行的操作數(shù)量。
在實(shí)踐中怎么做?
用一點(diǎn)數(shù)學(xué)知識(shí),我們可以很容易地重新對(duì)卷積進(jìn)行排列來(lái)處理batch normalization。提醒一下,對(duì)一個(gè)輸入x進(jìn)行卷積之后再進(jìn)行batch normalization的運(yùn)算可以表示為:
那么,如果我們重新排列卷積的W和b,考慮batch normalization的參數(shù),如下:
我們可以去掉batch normalization層,仍然得到相同的結(jié)果!
注意:通常,在batch normalization層之前的層中是沒(méi)有bias的,因?yàn)檫@是無(wú)用的,也是對(duì)參數(shù)的浪費(fèi),因?yàn)槿魏纬?shù)都會(huì)被batch normalization抵消掉。
這樣做的效果怎樣?
我們將嘗試兩種常見(jiàn)的架構(gòu):
使用batch norm的VGG16
ResNet50
為了演示,我們使用ImageNet dataset和PyTorch。兩個(gè)網(wǎng)絡(luò)都將訓(xùn)練5個(gè)epoch,看看參數(shù)數(shù)量和推理時(shí)間的變化。
1. VGG16
我們從訓(xùn)練VGG16 5個(gè)epoch開(kāi)始(最終的準(zhǔn)確性并不重要):
參數(shù)的數(shù)量:
單個(gè)圖像的初始推理時(shí)間為:
如果使用了batch normalization折疊,我們有:
以及:
8448個(gè)參數(shù)被去掉了,更好的是,幾乎快了0.4毫秒!最重要的是,這是完全無(wú)損的,在性能方面絕對(duì)沒(méi)有變化:
讓我們看看它在Resnet50的情況下是怎么樣的!
2. Resnet50
同樣的,我們開(kāi)始訓(xùn)練它5個(gè)epochs:
初始參數(shù)量為:
推理時(shí)間為:
使用batch normalization折疊后,有:
和:
現(xiàn)在,我們有26,560的參數(shù)被移除,更驚訝的hi,推理時(shí)間減少了1.5ms,性能一點(diǎn)也沒(méi)降。
責(zé)任編輯:lq!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4812瀏覽量
103117 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1867瀏覽量
32933 -
線性
+關(guān)注
關(guān)注
0文章
200瀏覽量
25564
原文標(biāo)題:使用Batch Normalization折疊來(lái)加速模型推理
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論