本發(fā)明涉及深度學(xué)習(xí),具體涉及一種卷積神經(jīng)網(wǎng)絡(luò)的變區(qū)間分段量化方法及裝置。
背景技術(shù):
1、近年來,神經(jīng)網(wǎng)絡(luò)取得了顯著發(fā)展,在機(jī)器學(xué)習(xí)的各個(gè)領(lǐng)域都取得了豐碩的成果,如圖像處理、自然語言處理和語音識(shí)別等,其中基于圖像的應(yīng)用最為廣泛。在圖像處理領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)是最主要的工具,并取得了顯著的成果。然而性能優(yōu)越的卷積神經(jīng)網(wǎng)絡(luò)模型具有較大的參數(shù)量和計(jì)算量,這對(duì)資源有限的硬件設(shè)備提出了更高的要求。卷積神經(jīng)網(wǎng)絡(luò)中主要的計(jì)算操作是卷積層和全連接層中的乘法累加。以resnet-18為例,處理一張圖像大小為224*224的rgb圖像需要11.69m的參數(shù)和1.82g的乘法累加計(jì)算量。盡管卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)量和計(jì)算量巨大,但研究表明,可以在性能無明顯下降的情況下,實(shí)現(xiàn)35倍以上的壓縮率。因此,網(wǎng)絡(luò)具有巨大的冗余,這為網(wǎng)絡(luò)的壓縮提供了可能性。
2、目前常用的模型壓縮技術(shù)主要包括量化、剪枝、低秩近似和知識(shí)蒸餾。在這些方法中,量化是一種很有前途的方法,因?yàn)榕c其他方法相比,量化能夠在精度降低較少的情況下實(shí)現(xiàn)高壓縮率。且量化不依賴于網(wǎng)絡(luò)架構(gòu),可以應(yīng)用于各種類型的網(wǎng)絡(luò),非常靈活。量化將全精度值以低位寬精度存儲(chǔ),這使得高成本的浮點(diǎn)運(yùn)算可以被低成本的低位寬運(yùn)算所取代,降低了硬件加速器設(shè)計(jì)的成本,有利于網(wǎng)絡(luò)在硬件端的部署。
3、根據(jù)量化值間隔的不同,可以將量化分成固定間隔的均勻量化和非固定間隔的非均勻量化。非均勻量化可以通過非均勻地分配量化位寬和離散化參數(shù)范圍,更好地捕獲信號(hào)信息,從而取得比均勻量化更好的性能。然而,非均勻量化方案通常難以在硬件上有效部署。近年來出現(xiàn)了一種新的非均勻量化方式,稱為分段量化。分段量化使用分段點(diǎn)將整個(gè)分布劃分成幾個(gè)子區(qū)間,在每個(gè)子區(qū)間內(nèi)單獨(dú)量化。結(jié)合了均勻量化和非均勻量化,能夠兼顧均勻量化的硬件友好性和非均勻量化的高性能。但是,現(xiàn)有的分段量化算法沒有考慮到經(jīng)過relu激活函數(shù)后的激活值分布,為不同分布分配相同數(shù)量的量化區(qū)間,量化區(qū)間數(shù)量的設(shè)置不合理。并且目前的分段量化算法簡單的使用關(guān)于均值對(duì)稱的分段點(diǎn),不能取得最優(yōu)性能。
4、綜上所述,現(xiàn)有的分段量化算法存在如下缺點(diǎn):
5、1、現(xiàn)有的分段量化算法沒有考慮到經(jīng)過relu激活函數(shù)后的激活值分布,為不同分布分配相同數(shù)量的量化區(qū)間,量化區(qū)間數(shù)量的設(shè)置不合理。
6、2、目前的分段量化算法簡單的使用關(guān)于均值對(duì)稱的分段點(diǎn),不能取得最優(yōu)性能。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)中的缺陷和不足,提出一種卷積神經(jīng)網(wǎng)絡(luò)的變區(qū)間分段量化方法及裝置,通過可變區(qū)間算法和百分位數(shù)初始化算法,解決現(xiàn)有分段量化算法中存在的量化區(qū)間數(shù)量的設(shè)置不合理及分段點(diǎn)設(shè)置不能取得最優(yōu)性能的問題。
2、本發(fā)明的技術(shù)方案如下。
3、一方面,一種卷積神經(jīng)網(wǎng)絡(luò)的變區(qū)間分段量化方法,包括:
4、s101,在卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的第一個(gè)epoch的第一個(gè)batch,使用可變區(qū)間算法為卷積神經(jīng)網(wǎng)絡(luò)的每一層單獨(dú)確定量化區(qū)間數(shù);
5、s102,基于每一層的量化區(qū)間數(shù),在第一個(gè)epoch中使用百分位數(shù)初始化算法為卷積神經(jīng)網(wǎng)絡(luò)的每一層分配最優(yōu)百分位數(shù)訓(xùn)練參數(shù);
6、s103,在其他的epoch中,基于最優(yōu)百分位數(shù)訓(xùn)練參數(shù)進(jìn)行量化感知訓(xùn)練,調(diào)整激活值、卷積權(quán)重值和百分位數(shù)訓(xùn)練參數(shù),并不斷迭代最終獲得用于測試集測試的各層分段點(diǎn)。
7、優(yōu)選的,所述s101,具體包括:
8、讀取卷積神經(jīng)網(wǎng)絡(luò)的第一個(gè)epoch的第一個(gè)batch的訓(xùn)練集數(shù)據(jù);
9、根據(jù)訓(xùn)練集數(shù)據(jù)得到當(dāng)前層激活值;
10、將激活值與可擬合分布進(jìn)行擬合,得到量化誤差最小的分布dbest;
11、判斷dbest是否符合雙邊長尾分布或單邊長尾分布,如符合雙邊長尾分布,將量化區(qū)間數(shù)設(shè)置為3,如果符合單邊長尾分布,則將量化區(qū)間數(shù)設(shè)置為2。
12、優(yōu)選的,所述s102,具體包括:
13、s1021,依次讀取卷積神經(jīng)網(wǎng)絡(luò)第一個(gè)epoch的每一層的訓(xùn)練集數(shù)據(jù)和預(yù)訓(xùn)練權(quán)重;
14、s1022,初始化左分段點(diǎn)和右分段點(diǎn)對(duì)應(yīng)的百分位數(shù),并根據(jù)預(yù)訓(xùn)練權(quán)重量化權(quán)重值;
15、s1023,根據(jù)推理誤差使用網(wǎng)格搜索法搜索右分段點(diǎn)對(duì)應(yīng)的百分位數(shù);
16、s1024,判斷量化區(qū)間數(shù)是否為3,如果是,轉(zhuǎn)s1025,如果不是,轉(zhuǎn)s1026;
17、s1025,根據(jù)推理誤差使用網(wǎng)格搜索法依次搜索左、右、左分段點(diǎn)對(duì)應(yīng)的百分位數(shù);
18、s1026,根據(jù)分段點(diǎn)對(duì)應(yīng)的百分位數(shù)確定每層的最優(yōu)百分位數(shù)訓(xùn)練參數(shù)。
19、優(yōu)選的,所述網(wǎng)格搜索法使用l2范數(shù)作為誤差函數(shù)。
20、優(yōu)選的,所述根據(jù)分段點(diǎn)對(duì)應(yīng)的百分位數(shù)確定每層的最優(yōu)百分位數(shù)訓(xùn)練參數(shù),具體如下:
21、如果量化區(qū)間數(shù)為3,根據(jù)分段點(diǎn)對(duì)應(yīng)的百分位數(shù)確定每層的最優(yōu)百分位數(shù)訓(xùn)練參數(shù),表示如下:
22、
23、其中,表示右分段點(diǎn)對(duì)應(yīng)的最優(yōu)百分位數(shù)訓(xùn)練參數(shù);表示左分段點(diǎn)對(duì)應(yīng)的最優(yōu)百分位數(shù)訓(xùn)練參數(shù);torch表示torch庫函數(shù);表示右分段點(diǎn)對(duì)應(yīng)的最優(yōu)百分位數(shù);表示左分段點(diǎn)對(duì)應(yīng)的最優(yōu)百分位;
24、如果量化區(qū)間數(shù)為2,根據(jù)分段點(diǎn)對(duì)應(yīng)的百分位數(shù)確定每層的最優(yōu)百分位數(shù)訓(xùn)練參數(shù),表示如下:
25、
26、優(yōu)選的,和的計(jì)算方法相同,表示如下:
27、
28、其中,表示初始化的最優(yōu)百分位數(shù);p0表示預(yù)設(shè)的最優(yōu)百分位數(shù)值;i表示當(dāng)前batch的序號(hào);表示當(dāng)前最優(yōu)百分位數(shù);表示上一個(gè)batch得到的最優(yōu)百分位數(shù);α表示衰減系數(shù),α∈(0,1);pi表示當(dāng)前batch計(jì)算得到的最優(yōu)百分位數(shù)。
29、優(yōu)選的,所述s103中,基于最優(yōu)百分位數(shù)訓(xùn)練參數(shù)進(jìn)行量化感知訓(xùn)練,調(diào)整激活值、卷積權(quán)重值和百分位數(shù)訓(xùn)練參數(shù),并不斷迭代最終獲得用于測試集測試的各層分段點(diǎn),具體包括:
30、s1031,在一epoch的當(dāng)前batch中基于最優(yōu)百分位數(shù)訓(xùn)練參數(shù),使用sigmoid作為限幅函數(shù)計(jì)算百分位數(shù);
31、s1032,基于百分位數(shù),使用quantile函數(shù)計(jì)算出當(dāng)前batch的初始分段點(diǎn);
32、s1033,使用激活值量化位寬和初始分段點(diǎn)對(duì)激活值進(jìn)行分段量化;
33、s1034,使用權(quán)重值量化位寬量化權(quán)重值;
34、s1035,進(jìn)行量化感知訓(xùn)練,訓(xùn)練權(quán)重值和百分位數(shù)訓(xùn)練參數(shù);
35、s1036,重復(fù)s1031~s1035,直至完成該epoch中所有batch的訓(xùn)練;
36、s1037,基于量化區(qū)間與量化區(qū)間對(duì)應(yīng)數(shù)量的量化器,統(tǒng)計(jì)得到激活值范圍,基于激活值范圍,計(jì)算出當(dāng)前層的最終分段點(diǎn)。
37、另一方面,一種卷積神經(jīng)網(wǎng)絡(luò)的變區(qū)間分段量化裝置,包括:
38、量化區(qū)間數(shù)確定模塊,用于在卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的第一個(gè)epoch的第一個(gè)batch,使用可變區(qū)間算法為卷積神經(jīng)網(wǎng)絡(luò)的每一層單獨(dú)確定量化區(qū)間數(shù);
39、百分位數(shù)初始化模塊,用于基于每一層的量化區(qū)間數(shù),在第一個(gè)epoch中使用百分位數(shù)初始化算法為卷積神經(jīng)網(wǎng)絡(luò)的每一層分配最優(yōu)百分位數(shù)訓(xùn)練參數(shù);
40、分段量化模塊,用于在其他的epoch中,基于最優(yōu)百分位數(shù)訓(xùn)練參數(shù),通過量化感知訓(xùn)練調(diào)整卷積層權(quán)重值和百分位數(shù)訓(xùn)練參數(shù),使用百分位數(shù)訓(xùn)練參數(shù)計(jì)算百分位數(shù)和分段點(diǎn),并使用分段點(diǎn)對(duì)激活值進(jìn)行分段量化。
41、相比于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
42、(1)本發(fā)明考慮了經(jīng)過relu激活函數(shù)后的激活值分布,對(duì)量化區(qū)間數(shù)進(jìn)行合理設(shè)置,使量化誤差最小化;
43、(2)本發(fā)明不是簡單的使用關(guān)于均值對(duì)稱的分段點(diǎn),而是采用變區(qū)間分段方法,使量化取得最優(yōu)性能。