量化白皮书翻译

量化白皮书翻译 原论文链接 摘要
神经网络现在使用的领域很广泛 , 但是如果要进行端测使用的话 , 神经网络的参数量非常庞大 , 无法在计算资源有限的端侧芯片上发挥其性能(简而言之就是说 , 网络参数太大了 , 在嵌入式板子上跑不起来) 。接而引出量化 , 表明量化是用精度换速度 , 是目前较为常用的模型压缩方法之一(剪枝、量化、蒸馏) 。
介绍了一些sota的量化方法 , 大体上分为两类PTQ(post--)、QAT(-aware-) 。
1. 介绍
在服务器上训练的神经网络的和都是fp32精度(fp16) , 这里的代表类似于卷积核的参数 , 即网络训练完成后写死在里面的参数 , 表示的是输入的 , 比如输入一张224*224大小的3通道的图片 , 那这里的[1, 3, 224, 224]就是 。
当模型精度由32浮点型量化到int8型后 , 存储的内存变为原来的1/4 , 矩阵乘法运算的计算成本变为原来的1/16 。
重新介绍量化分为PTQ和QAT , 前者需要付出的成本比较小(需要很小的校准数据集 , 且数据集无需label) , 后者需要重新训练 , 但一般后者的效果较好 。
2.量化基本原理 2.1 硬件背景
两个基本单元:1.2.  , 第一个我不知道咋翻译 , 就暂时叫做处理单元吧 , 第二个暂时叫做累加器 , 卷积的公式为
A n = b n + ∑ m C n , m A_n = b_n + \{n,m} An?=bn?+m∑?Cn,m?
这一次操作也叫做MAC( ) , 算完之后 , 会把数据从移动到(内存)中 。MAC操作和数据传输是神经网络计算速度最大的瓶颈 。从FP32->int8的过程可以表示为下列公式:
【量化白皮书翻译】

量化白皮书翻译

文章插图
x ^ = s x ? X i n t ≈ x \hat{x} = s_x\cdot X_{int}\ x x^=sx??Xint?≈x
其中x ^ \hat{x} x^ 是量化后的数据 , x x x 是量化前的数据 ,  X i n t X_{int} Xint? 是整形向量 ,  s x s_x sx? 是一个浮点类型的缩放因子 。
上图是引入量化后的卷积的计算步骤 , 这里注意累加器中的存储数据格式为int32类型 , 卷积的权重W()和输入张量()都是int8类型 。那经过累加器后 , 需要再次把int32类型的数据量化到int8类型 。
2.2 均匀量化
这是一种最常见的量化方式 , 并且中使用的应该也是均匀量化的方式 。均匀量化有三个参数分别是scales s s, zero-pointz z z 和 bit-widthb b b。