CVPR 2020: 8比特數(shù)值也能訓(xùn)練模型?商湯提出訓(xùn)練加速新算法

本文作者來自商湯研究院鏈接與編譯團(tuán)隊、高性能計算團(tuán)隊和北航劉祥龍老師團(tuán)隊,他們合作提出了用于加速卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程的INT8訓(xùn)練技術(shù)——在圖像分類任務(wù)和檢測任務(wù)上都僅僅損失微小的精度,且訓(xùn)練過程相比浮點(diǎn)訓(xùn)練加速了22%。

導(dǎo)讀:

在CVPR 2020上,商湯研究院鏈接與編譯團(tuán)隊、高性能計算團(tuán)隊和北航劉祥龍老師團(tuán)隊合作提出了用于加速卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程的INT8訓(xùn)練技術(shù)。該工作通過將網(wǎng)絡(luò)的輸入、權(quán)重和梯度量化到8比特來加速網(wǎng)絡(luò)的前向傳播和反向傳播過程,縮短卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練時間。

論文觀察到梯度的獨(dú)特分布給量化訓(xùn)練帶來了極大挑戰(zhàn),為了解決梯度量化帶來的精度損失和不穩(wěn)定問題,該論文進(jìn)行了量化訓(xùn)練收斂穩(wěn)定性的理論分析并基于此提出了誤差敏感的學(xué)習(xí)率調(diào)節(jié)和基于方向自適應(yīng)的梯度截斷方法。同時為了保證更高的加速比,該論文還提出使用周期更新、量化卷積融合等技術(shù)來減少量化操作帶來的時間開銷。應(yīng)用了上述方法之后,INT8訓(xùn)練在圖像分類任務(wù)和檢測任務(wù)上都僅僅損失微小的精度,且訓(xùn)練過程相比浮點(diǎn)訓(xùn)練加速了22%。

動機(jī)與背景

卷積神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用在多種計算機(jī)視覺任務(wù)中并且取得了優(yōu)異的精度。由于擁有龐大的參數(shù)量,訓(xùn)練和部署卷積神經(jīng)網(wǎng)絡(luò)需要耗費(fèi)大量計算資源和漫長的訓(xùn)練時間,如何用更少資源訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)一直是一個學(xué)術(shù)研究熱點(diǎn),也是工業(yè)界關(guān)心的話題。

神經(jīng)網(wǎng)絡(luò)量化技術(shù)是一種使用定點(diǎn)計算代替浮點(diǎn)的加速技術(shù),目前被廣泛地應(yīng)用在神經(jīng)網(wǎng)絡(luò)部署中,可以極大地提升部署速度,并降低內(nèi)存資源占用?,F(xiàn)有很多工作均表明將網(wǎng)絡(luò)前向過程的浮點(diǎn)計算替換成INT8計算,不會帶來明顯的精度下降[1][2]。

下圖展示了現(xiàn)代神經(jīng)網(wǎng)絡(luò)加速芯片對于不同精度計算的理論計算峰值對比,可以看到,INT8算力相比于FP32和FP/INT16均能有超過2倍峰值性能提升。

當(dāng)考慮將神經(jīng)網(wǎng)絡(luò)量化技術(shù)應(yīng)用在卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練中時,為了加速卷積的反向梯度傳播過程,不得不對梯度進(jìn)行量化操作。在將浮點(diǎn)的梯度量化到INT8數(shù)值范圍內(nèi)之后,訓(xùn)練過程變得極其不穩(wěn)定,并且收斂到非常差的精度。如何解決量化梯度給訓(xùn)練帶來的收斂穩(wěn)定性問題,是十分重要的問題。與此同時,在提升訓(xùn)練精度的同時,也不應(yīng)當(dāng)進(jìn)入過多額外的計算,否則加速效果將會大打折扣。

一方面是高效的計算峰值保障,一方面是困難重重的算法設(shè)計,這是INT8訓(xùn)練技術(shù)的機(jī)遇與挑戰(zhàn)。

何為INT8訓(xùn)練

標(biāo)準(zhǔn)的線性量化操作指的是,將一個浮點(diǎn)張量(tensor)進(jìn)行線性映射,變換到整數(shù)空間中[3]。這個整數(shù)空間的大小由于量化比特數(shù)來決定,比如常見的8bit量化數(shù),就有256個取值,本文中使用的是對稱量化,因此量化數(shù)的取值是從-128到127。具體公式如下,其中x是被量化的數(shù)據(jù),q是量化后的數(shù)據(jù),s是量化系數(shù),clip是截斷函數(shù):

在8bit的場景里,截斷函數(shù)和量化系數(shù)的計算公式如下:

為了降低量化帶來的誤差,一個常見做法是對取整過程進(jìn)行隨機(jī)化,使得取整函數(shù)從期望上更接近原始的數(shù),具體隨機(jī)取整的公式如下:

相反的,將8bit量化數(shù)變換回浮點(diǎn)的過程稱之為反量化。反量化公式如下所示,其中q為量化計算結(jié)果,s為量化系數(shù),

為反量化后的結(jié)果。

上圖的上半部分展示了標(biāo)準(zhǔn)的卷積神經(jīng)網(wǎng)絡(luò)量化計算前向過程,該過程被廣泛應(yīng)用在INT8部署加速中。在卷積計算之前,量化器會對輸入和權(quán)重進(jìn)行量化操作,將浮點(diǎn)數(shù)量化到8bit數(shù)值上,通過INT8卷積計算核心,即可完成一次INT8前向計算,最終將求和得到的32bit數(shù)進(jìn)行反量化操作回算到浮點(diǎn)數(shù)域中,以供給下一層計算使用。

INT8訓(xùn)練的一個核心的加速點(diǎn)在于卷積計算的反向過程,上圖展示了INT8訓(xùn)練中卷積計算在反向傳播過程中的計算細(xì)節(jié)。在卷積的反向梯度傳播過程,同樣的將梯度進(jìn)行浮點(diǎn)量化操作,不過為了降低量化的誤差,針對梯度的量化采用了隨機(jī)取整操作。通過INT8的反向卷積計算核心,可以得到下一層所需的回傳梯度,以及當(dāng)前層的權(quán)重所需的梯度。由于INT8反向卷積輸出的是32bit數(shù),與前傳類似,需要引入一次反量化操作,將32bit數(shù)反算回到浮點(diǎn)數(shù)域中。

梯度為何難以量化

為什么對梯度進(jìn)行量化會給網(wǎng)絡(luò)訓(xùn)練帶來如此大的影響?我們可以觀察訓(xùn)練過程中的梯度分布情況來進(jìn)一步的分析。

通過圖(a)中對比梯度和輸入、權(quán)重的分布,可以發(fā)現(xiàn):梯度分布相比輸入和權(quán)重分布更加尖銳,同時范圍更大。相比于輸入和權(quán)重,梯度有更多的值集中在0附近,但同時梯度還有許多較大值,讓梯度的分布范圍變得相當(dāng)廣,這些特征都會導(dǎo)致梯度量化的量化誤差比輸入和權(quán)重更大。

圖(b)展示的是layers16隨著訓(xùn)練,其梯度從epoch 0到epoch 300的變化情況。從中可以看出,隨著訓(xùn)練的進(jìn)行,梯度分布越變得更加尖銳,同時仍然保持著較廣的分布范圍,這意味著梯度量化的誤差會隨著訓(xùn)練的進(jìn)行變得越來越大。

梯度的分布隨網(wǎng)絡(luò)深度變化情況從圖(c)中可以看出。很容易發(fā)現(xiàn),卷積層的深度越淺,梯度分布越尖銳,這也會導(dǎo)致梯度量化的誤差更大。

從圖(d)中可以看出卷積的結(jié)構(gòu)也會影響梯度分布,對于MobileNetV2來說,conv2為depthwise卷積其相比conv1和conv3具有更加尖銳的分布。

123下一頁>

(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )

贊助商
2020-04-30
CVPR 2020: 8比特數(shù)值也能訓(xùn)練模型?商湯提出訓(xùn)練加速新算法
本文作者來自商湯研究院鏈接與編譯團(tuán)隊、高性能計算團(tuán)隊和北航劉祥龍老師團(tuán)隊,他們合作提出了用于加速卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程的INT8訓(xùn)練技術(shù)——在圖像分類任務(wù)和檢測任務(wù)上都僅僅損失微小的精度,且訓(xùn)練過程相比

長按掃碼 閱讀全文