導讀
如何去掉batch normalization層來加速神經(jīng)網(wǎng)絡。
介紹
Batch Normalization是將各層的輸入進行歸一化,使訓練過程更快、更穩(wěn)定的一種技術。在實踐中,它是一個額外的層,我們通常添加在計算層之后,在非線性之前。它包括兩個步驟:
首先減去其平均值,然后除以其標準差
進一步通過γ縮放,通過β偏移,這些是batch normalization層的參數(shù),當網(wǎng)絡不需要數(shù)據(jù)的時候,均值為0、標準差為1。

Batch normalization在神經(jīng)網(wǎng)絡的訓練中具有較高的效率,因此得到了廣泛的應用。但它在推理的時候有多少用處呢?
一旦訓練結束,每個Batch normalization層都擁有一組特定的γ和β,還有μ和σ,后者在訓練過程中使用指數(shù)加權平均值進行計算。這意味著在推理過程中,Batch normalization就像是對上一層(通常是卷積)的結果進行簡單的線性轉換。
由于卷積也是一個線性變換,這也意味著這兩個操作可以合并成一個單一的線性變換!這將刪除一些不必要的參數(shù),但也會減少推理時要執(zhí)行的操作數(shù)量。
在實踐中怎么做?
用一點數(shù)學知識,我們可以很容易地重新對卷積進行排列來處理batch normalization。提醒一下,對一個輸入x進行卷積之后再進行batch normalization的運算可以表示為:

那么,如果我們重新排列卷積的W和b,考慮batch normalization的參數(shù),如下:

我們可以去掉batch normalization層,仍然得到相同的結果!
注意:通常,在batch normalization層之前的層中是沒有bias的,因為這是無用的,也是對參數(shù)的浪費,因為任何常數(shù)都會被batch normalization抵消掉。
這樣做的效果怎樣?
我們將嘗試兩種常見的架構:
使用batch norm的VGG16
ResNet50
為了演示,我們使用ImageNet dataset和PyTorch。兩個網(wǎng)絡都將訓練5個epoch,看看參數(shù)數(shù)量和推理時間的變化。
1. VGG16
我們從訓練VGG16 5個epoch開始(最終的準確性并不重要):

參數(shù)的數(shù)量:

單個圖像的初始推理時間為:

如果使用了batch normalization折疊,我們有:

以及:

8448個參數(shù)被去掉了,更好的是,幾乎快了0.4毫秒!最重要的是,這是完全無損的,在性能方面絕對沒有變化:

讓我們看看它在Resnet50的情況下是怎么樣的!
2. Resnet50
同樣的,我們開始訓練它5個epochs:

初始參數(shù)量為:
推理時間為:

使用batch normalization折疊后,有:

和:

現(xiàn)在,我們有26,560的參數(shù)被移除,更驚訝的hi,推理時間減少了1.5ms,性能一點也沒降。

責任編輯:lq!
-
神經(jīng)網(wǎng)絡
+關注
關注
42文章
4844瀏覽量
108206 -
參數(shù)
+關注
關注
11文章
1870瀏覽量
34044 -
線性
+關注
關注
0文章
220瀏覽量
26374
原文標題:使用Batch Normalization折疊來加速模型推理
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
為什么 VisionFive V1 板上的 JH7100 中并存 NVDLA 引擎和神經(jīng)網(wǎng)絡引擎?
神經(jīng)網(wǎng)絡的初步認識
CNN卷積神經(jīng)網(wǎng)絡設計原理及在MCU200T上仿真測試
NMSIS神經(jīng)網(wǎng)絡庫使用介紹
構建CNN網(wǎng)絡模型并優(yōu)化的一般化建議
SNN加速器內(nèi)部神經(jīng)元數(shù)據(jù)連接方式
在Ubuntu20.04系統(tǒng)中訓練神經(jīng)網(wǎng)絡模型的一些經(jīng)驗
CICC2033神經(jīng)網(wǎng)絡部署相關操作
液態(tài)神經(jīng)網(wǎng)絡(LNN):時間連續(xù)性與動態(tài)適應性的神經(jīng)網(wǎng)絡
神經(jīng)網(wǎng)絡的并行計算與加速技術
基于神經(jīng)網(wǎng)絡的數(shù)字預失真模型解決方案
無刷電機小波神經(jīng)網(wǎng)絡轉子位置檢測方法的研究
神經(jīng)網(wǎng)絡專家系統(tǒng)在電機故障診斷中的應用
神經(jīng)網(wǎng)絡RAS在異步電機轉速估計中的仿真研究
基于FPGA搭建神經(jīng)網(wǎng)絡的步驟解析
如何去掉batch normalization層來加速神經(jīng)網(wǎng)絡
評論