Neural Network Quantization & Low-Bit Fixed Point Training For Hardware-Friendly Algorithm Design
从自己的出发点对看到的一些定点相关工作的方法与思想的纯主观归纳(可能存在偏差甚至错误)
该种划分方式没有什么道理,只是我强行区分的罢了)
该类方法最大的特点就是利用已经训练好的模型进行压缩,与Quantized-Aware Training相对比有几分 2-Stage的意味,优势在于可以利用已经基本确定的参数分布去分析,采取量化策略,对大模型比较有效,但是小模型会崩
1802-Model compression via distillation and quantization
1810-Post training 4-bit quantization of convolutional networks for rapid-deployment(NIPS 2019)
1907-And the Bit Goes Down: Revisiting the Quantization of Neural Networks
Other Methods (More Of a Digest Not Important)
相比于第一类,该类方法的主要优势在于1-Stage,简化了训练过程
早期的一些Binary/XNORNet均属于此类,大部分基于StraightThroughActivation的思想,即认为定点过程的导数为1
1712-Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference
1802-Mixed Precision Training Of ConvNets Using Integer Operations-ICLR2018
1805-Accurate & Efficient 2-bit QNN
1808-Learning to Quantize Deep Networks by Optimizing Quantization Intervals with Task Loss
1905-hawq: hessian aware quantization of neuralnetworks with mixed-precision
1901-Improving Neural Network Quantization with Retraining Outlier Channel Splitting
Other Works
纯定点的训练,大部分都是对一些经典的部分做一些简化。以及对梯度量化也会归入此类(目的是训练的加速,而不仅仅是为了部署)
早期的一些Binary/XNORNet类似于Quantize-aware Training,但是大多依赖于Pretrained Model
各种Binary follow-up
Other Methods
定点数化之后相比于浮点最大的问题就是动态范围,也是主要的优化目的
一般只有有加速训练的需求的时候才需要量化梯度,但是由于梯度的特殊性(动态范围大,且大值小值都很重要)采用一般的量化方式不足,一般需要额外的设计;但是👆部分的很多方法的目的是为了更好的量化,印次对该部分也有指导价值
这一部分列举了很多文章,但是很多并没有阅读过
从一开始的BNN延申开来的一系列work,基本都是利用了二值之后乘法变bitwise,对硬件部署采用非传统运算单元。
使用相对较为传统的比特数(4,6,8),在具体量化方式,以及训练方式入手
看一下大公司主流的压缩工具都提供了什么功能
tf.contrib.quantize & Tensorflow Lite
If you want Higher Performance, Use Quantize-aware Training
torch.nn.qat torch.nn.intrinsic.qat