前言
深度学习在移动端的应用是越来越广泛,由于移动端的运算力与服务器相比还是有差距,
所以在移动端部署深度学习模型的难点就在于如何保证模型效果的同时,运行效率也有保证。
在实验阶段对于模型结构可以选择大模型,因为该阶段主要是为了验证方法的有效性。在验证
完了之后,开始着手部署到移动端,这时候就要精简模型的结构了,一般是对训好的大模型
进行剪枝,或者参考现有的比如MobileNetV2和ShuffleNetV2等轻量级的网络重新设计自己的
网络模块。而算法层面的优化除了剪枝还有量化,量化就是把浮点数(高精度)表示的权值和
激活值用更低精度的整数来近似表示。低精度的优点有,相比于高精度算术运算,其在单位
时间内能处理更多的数据,而且权值量化之后模型的存储空间能进一步的减少等等[1]。
对训练好的网络做量化,在实践中尝试过TensorRT[5][8]的后训练量化算法,效果还不错。
但是如果能在训练过程中去模拟量化的过程,让网络学习去修正量化带来的误差,
那么得到的量化参数应该是更准确的,而且在实际量化推断中模型的性能损失应该能更小。
而本文的内容就是介绍论文[3][4]和复现其过程中的一些细节。
按照惯例,先给出本文实验的代码:TrainQuantization
训练模拟量化
方法介绍
首先来看下量化的具体定义,对于量化激活值到有符号8bit整数,论文中给出的定义如下: