INT8量化訓(xùn)練
【GiantPandaCV導(dǎo)讀】本文聊了兩篇做INT8量化訓(xùn)練的文章,量化訓(xùn)練說的與quantization-aware Training有區(qū)別,量化訓(xùn)練指的是在模型訓(xùn)練的前向傳播和后向傳播都有INT8量化。兩篇文章都是基于對(duì)梯度構(gòu)建分析方程求解得到解決量化訓(xùn)練會(huì)引起的訓(xùn)練崩潰和精度損失嚴(yán)重的情況。
論文:《Distribution Adaptive INT8 Quantization for Training CNNs》 會(huì)議:AAAI 2021
論文:《Towards Unified INT8 Training for Convolutional Neural Network》 會(huì)議:CVPR 2020
引言:什么是量化訓(xùn)練
谷歌在2018年《Quantization and Training of Neural Networks for Ef?cient Integer-Arithmetic-Only Inference》文章中,提出了量化感知訓(xùn)練(Quantization-aware Training,QAT),QAT只在前向傳播中,加入模擬量化,這個(gè)模型量化指的是把模型參數(shù)進(jìn)行線性量化,然后在做矩陣運(yùn)算之前,把之前量化的模型參數(shù)反量化回去浮點(diǎn)數(shù)。而量化訓(xùn)練則是在前向傳播和后向傳播都加入量化,而且做完矩陣運(yùn)算再把運(yùn)算的結(jié)果反量化回去浮點(diǎn)數(shù)?!禥uantization and Training of Neural Networks for Ef?cient Integer-Arithmetic-Only Inference》詳細(xì)的內(nèi)容在鏈接中:
MXNet實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練量化
Pytorch實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練量化(QAT)
一、Distribution Adaptive INT8
文章的核心idea是:Unified INT8發(fā)現(xiàn)梯度的分布不遵從一個(gè)分布即不能像權(quán)重一樣歸于高斯分布,Distribution Adaptive INT8認(rèn)為梯度可以channel-wise看,分成兩種分布,一個(gè)高斯分布,一個(gè)是倒T形分布,這樣去minimize量化后梯度與原來梯度的量化誤差Error,就可以了。Unified INT8也是類似minimize量化后梯度與原來梯度的量化誤差Error的思想,與Distribution Adaptive INT8不同的是通過收斂性分析方程,發(fā)現(xiàn)可以通過降低學(xué)習(xí)率和減少梯度量化誤差。總結(jié):Distribution Adaptive INT8比Unified INT8多了一個(gè)先驗(yàn),來構(gòu)建分析方程。方法上,都是對(duì)梯度下手,修正梯度的值,都有對(duì)梯度進(jìn)行截?cái)唷?/p>
Distribution Adaptive INT8采用了兩個(gè)方法:Gradient Vectorized Quantization和Magnitude-aware Clipping Strategy。
對(duì)稱量化:
這里, 是閾值范圍,就是range
反量化:
公式(1)與之前常見的對(duì)稱量化長的有一點(diǎn)不一樣:
(2)
反量化: ,這里的s指的是scale,c是clipping閾值
其實(shí)公式(1)和(2)是等價(jià)變化,把公式(2)的s計(jì)算出來,就是 ,代入公式(2)
也就是等于公式(1)
Gradient Vectorized Quantization:這就是channel-wise的篩選哪些梯度的分布屬于高斯分布還是倒T分布(a sharp with long-tailed shape distribution(Inverted-T distribution))。所以這兩種分布:
通過實(shí)驗(yàn)設(shè)置為0.3
Magnitude-aware Clipping Strategy:
這個(gè)cliiping是在尋找最優(yōu)截?cái)嚅撝祍
量化誤差分析:(3)
是梯度的分布。
通過兩個(gè)假設(shè):
,誤差分析方差變換為:
只要求導(dǎo) 就可以找出找出最優(yōu)值 。然后分不同的梯度的分布進(jìn)行討論。
對(duì)于高斯分布:
對(duì)于倒T分布:倒T分布用分段均勻分布來表示
經(jīng)過一頓公式推導(dǎo)得出: ,引進(jìn)了 和 這兩個(gè)超參數(shù)。
所以 和
整個(gè)Distribution Adaptive INT8的pipeline:
SpeedUp:
實(shí)驗(yàn):


二、Unified INT8 Training
前面已經(jīng)講了Unified INT8的整體思路了。Unified INT8也是類似minimize量化后梯度與原來梯度的量化誤差Error的思想,Unified INT8是通過收斂性分析方程,發(fā)現(xiàn)了可以通過降低學(xué)習(xí)率和減少梯度量化誤差。另外,Unified INT8對(duì)梯度誤差分析是layer-wise的,即不是上述Distribution Adaptive INT8那種channel-wise的方式。
通過收斂性證明: (4)
基于這兩個(gè)假設(shè):
公式(4)變換為:
因?yàn)門是迭代次數(shù),T會(huì)不斷增大,導(dǎo)致Term(1)趨向于0;
是誤差,Term(2)說明,要最小化量化誤差;
是量化-反量化后的梯度, 是學(xué)習(xí)率,Term(3)說明要降低學(xué)習(xí)率。
所以Unified INT8提出兩個(gè)方法:Direction Sensitive Gradient Clipping和Direction Sensitive Gradient Clipping。
Direction Sensitive Gradient Clipping:
用余弦距離來度量量化前后梯度的偏差。
Deviation Counteractive Learning Rate Scaling:
這兩個(gè)策略最終的用在了調(diào)整學(xué)習(xí)率,實(shí)驗(yàn)得出, 取0.1,取20。
整個(gè)pipeline:

SpeedUp:
這里有個(gè)重要的cuda層的優(yōu)化:
實(shí)驗(yàn):

知乎鏈接:
(量化 | INT8量化訓(xùn)練)https://zhuanlan.zhihu.com/p/364782854
為了感謝讀者的長期支持,今天我們將送出三本由 北京大學(xué)出版社 提供的:《機(jī)器學(xué)習(xí)入門 基于數(shù)學(xué)原理的Python實(shí)戰(zhàn)》 。點(diǎn)擊下方抽獎(jiǎng)助手參與抽獎(jiǎng)。沒抽到并且對(duì)本書有興趣的也可以使用下方鏈接進(jìn)行購買。
《機(jī)器學(xué)習(xí)入門》抽獎(jiǎng)鏈接

書籍封面
歡迎關(guān)注GiantPandaCV, 在這里你將看到獨(dú)家的深度學(xué)習(xí)分享,堅(jiān)持原創(chuàng),每天分享我們學(xué)習(xí)到的新鮮知識(shí)。( ? ?ω?? )?
有對(duì)文章相關(guān)的問題,或者想要加入交流群,歡迎添加BBuf微信:
