Hello大家好,在之前的視頻中我們的講解主要集中在訓練后量化,也就是PTQ,那么這期視頻我們就再來講一下另一種主要的量化類型,量化感知訓練,我們暫且不會涉及到QAT在TPU-MLIR中的應用,只是先停留在理論層面進行一個介紹。
我們在學習PTQ的時候知道了量化其實就是一個尋找合適的量化參數(shù),將高位數(shù)據(jù)流映射為低位數(shù)據(jù)流的過程,實現(xiàn)模型輕量化并且提高推理效率,但在這個過程中模型的精度不可避免地會下降。
造成精度下降的原因有很多,其中主要有:
量化誤差的引入,就像右邊這張信號圖所示,我們在量化時做的取整操作其實就是用有限的離散取值去近似無限的連續(xù)取值,會不可避免的導致量化后的信號與量化前的信號有一定的偏差,當這種偏差越大時量化誤差往往也就越大。
而且Weight 與activation tensor用INT8來表示則不可避免地也會出現(xiàn)一定的信息損失,例如我們之前提到的截斷誤差,并且模型在進行Multiply-Accumulate操作中會采用INT32來接收累加的結(jié)果,然后將累加的結(jié)果再轉(zhuǎn)換回INT8,這個過程可能也會導致一定的截斷誤差。上一期視頻中我們介紹的校準方法只能在截斷誤差與量化誤差之間做一個權(quán)衡,而不能完全消除它們。
還有就是我們量化推導那期視頻中提到過的用Multiplier與rShift代替Scale的表示也會產(chǎn)生些許誤差
QAT就是通過end-to-end training微調(diào)訓練后的模型參數(shù),讓模型對量化的魯棒性更強,從而緩和造成的精度下降問題,而且通過QAT,我們也能夠達成更低位,例如INT4的量化,從而進一步輕量化模型與提高推理效率
實現(xiàn)方式就是在訓練過程中進行模擬量化,或者說是插入FakeQuant偽量化算子,對weight與activation tensor進行量化,然后再做反量化引入量化誤差進行訓練,所以在fine-tune的過程中模型還是以FP32精度進行運算的,并不是像推理過程中的低位運算。之后我們通過反向傳播與梯度下降的方式微調(diào)模型權(quán)重。
對于量化參數(shù)的確定,weight tensor的量化參數(shù)通常采用絕對最大值除以127的方式確定,而activation tensor量化參數(shù)則根據(jù)QAT算法的不同可能也有所不同。早期的QAT算法采用滑動平均的方式在訓練過程中對量化取值范圍進行統(tǒng)計更新,而近些年來主流的QAT算法直接將量化參數(shù)定位可學習參數(shù)在反向傳播過程中通過梯度下降進行更新。
這樣的做法在實際實現(xiàn)過程中我們主要會遇到一個問題,就是偽量化算子中的round函數(shù)梯度要怎么計算,我們既然在原模型插入了偽量化算子,又要對模型進行重新訓練,就不得不考慮反向傳播時怎么計算它的梯度。
首先我們之前有看過量化后的信號波形圖其實是一個離散的階梯函數(shù),這樣的函數(shù)是不可導的,或者說它們的梯度是處處為0的,這就導致權(quán)重無法得到更新。所以我們需要想辦法去對它做近似操作。
一種傳統(tǒng)的方式是用Straight-Through Estimator在反向傳播過程中讓偽量化算子輸入的梯度等于輸出的梯度,或者說使他梯度為1。
由這種方法延伸出了一系列的QAT算法,例如DoReFaNet,這個算法將activation和weight都壓縮在0,1之間進行量化,后面會繼續(xù)講解基于STE的QAT算法,敬請期待。
審核編輯:彭菁
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4371瀏覽量
64220 -
模型
+關(guān)注
關(guān)注
1文章
3488瀏覽量
50010 -
數(shù)據(jù)流
+關(guān)注
關(guān)注
0文章
123瀏覽量
14702
發(fā)布評論請先 登錄
yolov5量化INT8出錯怎么處理?
TPU-MLIR開發(fā)環(huán)境配置時出現(xiàn)的各種問題求解
【算能RADXA微服務(wù)器試用體驗】+ GPT語音與視覺交互:2,圖像識別
YOLOv6中的用Channel-wise Distillation進行的量化感知訓練
在“model_transform.py”添加參數(shù)“--resize_dims 640,640”是否表示tpu會自動resize的?
Pytorch量化感知訓練的詳解
適配PyTorch FX讓量化感知訓練更簡單
TPU-MLIR量化敏感層分析,提升模型推理精度

如何適配新架構(gòu)?TPU-MLIR代碼生成CodeGen全解析!

深入學習和掌握TPU硬件架構(gòu)有困難?TDB助力你快速上手!

如何高效處理LMEM中的數(shù)據(jù)?這篇文章帶你學會!

評論