Dance with Bit
record in 2019/11/21
Quantization
定長和變長
精度:兩個數字之間最小差別能有多小 32位單精度: 1.2*12^-38
量化:
浮點數->定點數:
壓縮網絡的方法 Quantization
- 矩陣的分解
X= TP X是大矩陣100100 ,一共10000個, T是1002 P是2100 , 一共400 個參數
只是內存優化,矩陣計算時優化較小(現在少用了) - 剪枝
結構化剪枝(直接去掉某個channel)
加速比不成正比 - Auto ML
搜索出小網絡
量化:
不光壓縮,還加速計算,還硬件友好
可能遇到的問題:
- 前向時,連續值變離散了,(每個值可選擇的種類變少了)
量化之後的每個值範圍quantization_range被限制。實際上參數的分佈還是很廣的
使用均勻量化還是非均勻量化(非均勻自由度更高,準確率更高,但是非均勻在硬件上不夠好實現)
- 反向時,激活值變成裏離散變量,求導變麻煩
由於階梯函數導數大部分時候爲0,導數無法傳遞,因而我們只能定義梯度爲1,但是這種情況下階梯函數的這兩個變量在反向傳播時就被無視了。
可以訓練了,但是loss會不穩定。
如何解決這些問題:
主要的三種操作
首先改變參數的分佈
然後Projection,分配新參數(這個步驟較多論文)
然後對新分配的參數進行後處理,比如統一 x 0.15調整
網絡表達的範圍被限制,(比如本來-6 ~ 6 現在 -1~1)
量化和剪枝的關係
剪枝是把那一支置零,量化是減少比特。