【论文阅读笔记】Learning Accurate Low-Bit Deep Neural Networks with Stochastic Quantization

全文概要

  SQ 是一种增量量化的方法,其大概思路和 INQ 一样,选择部分参数进行量化,其他保持全精度。即该方法只针对权重进行。

  SQ 通过给定的一系列量化比例 r,选择一层中的 r 比例卷积核进行量化。衡量每个卷积核的量化误差,依据量化误差得到该卷积核被选为量化卷积核的概率(虽然最后发现均匀概率函数效果最好)。通过逐渐增加 r 的大小(从 50 % → 75 % → 87.5 % → 100 % 50\%\rightarrow75\%\rightarrow87.5\%\rightarrow100\% 50%75%87.5%100%),达到增量量化的效果。

  作者认为,量化误差大的卷积核和量化误差小的,其理想的优化梯度方向不同。因此分开来量化可能会带来好结果。


简介

  作者认为,之前的量化方法存在两个问题:

  1. 量化只针对分类任务,对检测任务、分割任务缺少灵活性;
  2. 在 low-bit 空间,难以实现 full-precision 空间的局部最小值无损迁移到 low-bit 空间的局部最小值;

  本文还讨论了 SQ 方法影响量化的四个问题:

  1. 粒度:是以权重卷积核为单位,还是以权重元素为单位;以卷积核的粒度进行分组量化比较合适,因为作者认为一个卷积核是由卷积元素相互影响的结构组成;
  2. 选择算法:是确定性算法(按概率排序),还是随机性算法;随机性算法能更好地“探索”,采用轮盘赌算法;
  3. 量化概率:基于量化误差,如何选择量化概率函数;实验结果表明,线性函数能达到更好的结果; p i = f i ∑ j ( f j ) p_i=\frac{f_i}{\sum_j(f_j)} pi=j(fj)fi
  4. SQ更新方案:选择适当的方案来更新 SQ 比率;作者尝试了 20 % → 40 % → 60 % → 80 % → 100 % 20\%\rightarrow40\%\rightarrow60\%\rightarrow80\%\rightarrow100\% 20%40%60%80%100%的SQ组合以及 50 % → 75 % → 87.5 % → 100 % 50\%\rightarrow75\%\rightarrow87.5\%\rightarrow100\% 50%75%87.5%100%的组合,发现后者表现更好,作者给后者取名为指数更新方案;

SQ方法介绍

  量化误差衡量: e i = ∥ W i − Q i ∥ 1 ∥ W i ∥ 1 e_i=\frac{\|W_i-Q_i\|_1}{\|W_i\|_1} ei=Wi1WiQi1
  中间变量,反应量化误差和被选择概率的反比例关系: f i = 1 e i + ϵ f_i=\frac1{e_i+\epsilon} fi=ei+ϵ1  其中 ϵ \epsilon ϵ是个很小的数,比如 1 0 − 7 10^{-7} 107

  概率函数有四种考虑:

  1. 常数函数: p i = 1 m p_i=\frac1m pi=m1
  2. 线性函数: p i = f i ∑ j f j p_i=\frac{f_i}{\sum_jf_j} pi=jfjfi
  3. Softmax函数: p i = e x p ( f i ) ∑ j e x p ( f i ) p_i=\frac{exp(f_i)}{\sum_jexp(f_i)} pi=jexp(fi)exp(fi)
  4. Sigmoid函数: p i = 1 1 + e x p ( − f i ) p_i=\frac1{1+exp(-f_i)} pi=1+exp(fi)1

  在训练时,混合使用量化权重和全精度权重,反向传播正常进行;


实验细节

  数据集 CIFAR-10CIFAR-100。对于前面一个数据集使用两个网络 VGG-9ResNet-56。对于 VGG-9,solver 参数设置如下:SGD,动量设为 0.9 0.9 0.9;权重衰减设为 0.0001 0.0001 0.0001;batch size设为 100 100 100;初始学习率设为 0.1 0.1 0.1,每 15 k 15k 15k个迭代除以 10 10 10;一共训练 100 k 100k 100k次迭代。对于ResNet-56,参数设置和残差网络出来的那篇论文一样;

  数据集 ImageNet,使用两个网络: AlexNet-BNResNet-18。对于 AlexNet-BN,参数设置为:SGD,动量设为 0.9 0.9 0.9,权重衰减设为 5 ∗ 1 0 − 5 5*10^{-5} 5105,batch size 设为 256 256 256;初始学习率设为 0.01 0.01 0.01,分别在 100 k 、 150 k 、 180 k 100k、150k、180k 100k150k180k次迭代除以 10 10 10;一共训练 200 k 200k 200k次迭代。对于 ResNet-18,参数设置为:SGD,batch size 设为 100 100 100,权重衰减 5 ∗ 1 0 − 5 5*10^{-5} 5105,动量设为 0.9 0.9 0.9;初始学习率设为 0.05 0.05 0.05,当出现误差平原(error plateaus)就除以 10 10 10;一共训练 300 k 300k 300k次迭代。

  SQ 方法默认设置为:channel-wise的粒度;划分方式为随机划分(轮盘赌算法);量化概率函数为线性函数;SQ更新方案为50% → \rightarrow 75% → \rightarrow 87.5% → \rightarrow 100%

【论文阅读笔记】Learning Accurate Low-Bit Deep Neural Networks with Stochastic Quantization_第1张图片

【论文阅读笔记】Learning Accurate Low-Bit Deep Neural Networks with Stochastic Quantization_第2张图片

你可能感兴趣的:(深度学习,模型量化)