量化帶來的好處有很多,首先,由于神經網路對資料精度的不敏感,通過量化將 引數從4byte float轉換位1byte,減少了資料量,可以使用容量更小的存盤設備,節省了成本;其次,量化帶來計算效率的提升,單位時間,單位能效內的計算成果多了,或者說,同樣的算力需求的模型,所消費的時間和能量少了,結果就是又快又省電,現在的移動終端都是用電池供電的,也就意味著更久的續航和更好的體驗,量化的好處很多很多,但是在那時只能想到這么多,后面有時間再補充,
量化雖好,也有一個問題,就是比較難以理解,尤其是結合復雜的網路拓撲結構之后,更是千頭萬緒難以把握,經過多日的冥思苦想,自感小有識訓,暫且記錄在此,至于對錯,我一直認為只要是自己下功夫思考得出的,錯誤的結論反而更能加深你對問題多角度的思考,很多時候,我們都是從錯誤中學習不是么?
一個典型的神經網路拓撲結構如下:

我們將他抽象一下,摘取和量化相關的主要部分,在NPU中運行時的模型為:

:第l-1層輸出量化值,Scale和Zero Point.
:第l層輸入量化值,Scale和Zero Point.并且:
: 第l層權重量化值,Scale和Zero Point.
: 第l層偏置量化值,Scale和Zero Point.
:第l層輸出量化值,Scale和Zero Point.
:第l+1層輸入量化值,Scale和Zero Point.并且:
注意圖中的沒有畫出,通過這種輸入和輸出直接對接,不同層之間無縫連接再一起,
下面推導量化公式,看再NPU中,執行的運算是什么樣子:
所以:
所以:
繼續化簡:
得到:
最終,得到公式:
右邊整理后,得到一個所有變數都有確定值的有理分式,并且大結構是兩個子分式相乘,適合交給硬體運算,針對每一層,有理分式的每個元是都可以計算出來的,所以左邊的Q output的值是明確的,這樣的話,我們就知道了本層輸出的量化值,零點和Scale,可以i繼續傳遞給下一層做推理,如果想得到本層的浮點輸出,可以直接用本層的量化值,zero point以及 scale通過以下公式得到:
所以,一切完美解決,
反思:
下圖是我之前的理解,這篇博客有記錄
關于量化原理的思考_tugouxp的專欄-CSDN博客模型部署程序中遇到問題最多的是量化環節,最復雜的,也是量化,我接觸神經網路的時間不算長,接觸量化就更短了,但是從第一次了解量化這個模型起,就有一個問題深深的困擾著我,簡單描述如下,首先描述一下我對量化的認知:量化是個訪射變換,將x變換為 px+q, y量化為mx+n,在n,q不為0的情況下,量化后的資料如何反量化回去呢?看公式,根據量化得到的二次式反推xy是很困難的,總會有一次項存在已經同時請教了四位演算法專家,等候答復中,,,,,結束!...https://blog.csdn.net/tugouxp/article/details/121982281

我再總結之間一直未理解的點如下,之前我的認知是:
1.量化是個訪射變換,將x變換為 px+q, y量化為mx+n,
2.在n,q不為0的情況下,量化后的資料如何反量化回去呢?看公式,根據量化得到的二次式反推xy是很困難的,總會有一次項存在,
之前理解的主要問題是,我把輸出的當成了未知量,這樣,就必須先求出當前層的浮點輸出,再得到
,而如果要得到當前層的浮點輸出,必須通過方程關系將量化輸出反量化,而反量化又會涉及到上圖中各個引數的耦合,按照上圖中的方程,如果要求解量化后的浮點輸出,必然設計到忽略某些項,導致精度誤差,
但是,如果事先就規定了輸出層的scale和 zero point,就只剩下Q output為未知量了,根據上面的推導,根據浮點量守恒列出方程,可以解出Q output.
這樣,問題迎刃而解,而且中間根本不用真正求出浮點量,沒有精度損失,沒有 tradeoff.
聯想&總結:
acuity tools 匯入模型的時候,在量化階段,生成quanlize檔案的時候,不是已經生成了各層的量化引數了嘛?zero point,scale都是已知量了,這么明顯的線索我竟然一直忽略了. 據此,我也更加理解為何量化階段需要輸入幾張影像進行量化處理了,很可能是為了解決這個雞和蛋的問題,在事先不確定輸出層scale和zero point的情況下,只能先用圖片執行浮點推理,根據各層的實際浮點輸出,大概定義一個zero 和 scale,之后在進行部署推理的時候,用的就是在這個階段確定好的scale和zero point.所以為了避免精度損失,量化選用的圖片一定要覆寫實際的模型應用場景,否則,如果你的演算法覆寫場景是夜晚抓拍,而你卻用白天的風景照片做量化,這樣得到的各層scale和zeropoint一定不是最理想的結果,
給這段時間的思考結個尾吧,先不管有沒有問題,至少,邏輯上想通了,后面會繼續結合應用,思考這個問題,所以即便現在理解有偏差,也總會被我發現的一天吧,
結束!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404046.html
標籤:AI
上一篇:python做的游戲有哪些
