INQ(incremental network quantization:towards lossless CNNs with low-precision weights
2017-10-01 23:35
295 查看
incremental network quantization:towards lossless CNNs with low-precision weights
实验前提:a.一个预训练的模型,模型已收敛
b.训练这个模型训练集,验证集,测试集
大体三个步骤:weights partition、group-wise quantization 、re-training 。
(1)先将每个kernel的数据分为2个组,一组量化编码另一组保持不变,
(2)再使用训练集去训练这个模型直到收敛。
(3)再把之前已量化编码的数据固定住,把之前没有量化编码的数据分为两组,一组量化编码,一组保持不变,
(4)继续使用训练集来训练,直至模型收敛。
(5)重复上述操作,把kernel中的所有的权重都编码量化了,则认为模型已压缩。
下面介绍具体每个步骤是怎么实施的:
1.kernel的权重每次按照什么样的比例来分组,文章给出对各个模型的分组方案:(大括弧中的比例代表每次训练前有多少的权重已被量化编码)
Alexnet:{0.3, 0.6, 0.8, 1} ,batch_size:256 weights_decay:0.0005 动量系数:0.9
VGG-16:{0.5, 0.75, 0.875, 1},batch_size:32 weights_decay:0.0005 动量系数:0.9
GoogleNet:{0.2, 0.4, 0.6, 0.8, 1},batch_size:80 weights_decay:0.0005 动量系数:0.9
ResNet-18:{0.5, 0.75, 0.875,1},batch_size:80 weights_decay:0.0005 动量系数:0.9
ResNet-50: {0.5,0.75, 0.875, 1},batch_size:80 weights_decay:0.0005 动量系数:0.9
每次把权重大的分为一组,权重小的分为一组,后面量化的主要为权重大的那个组。
2.量化编码:(很多trick,这些trick的理解我可能理解有错)
首先看下最终编的
不在一个范围内线性取值,如在0到1间取值{0.1,0.2,0.3,0.4,...1},而是在在一个范围内以对数的方式取值,在n1到n2间取2的指数,这样处理的原因就是为了在FPGA等平台上使用。
现在就是确定n1和n2了,假设n1>n2,那么可以首先确定的就是n1了
(我的理解:由于降取值,也就是小数只取整数部分,必然会带来误差,所以s前的系数应为一个大于1的数去补偿,为什么是4/3,后面解释)
其中s为每个kernel值得绝对值的最大值:
现在怎么确定n2了,如果确定了几位2进制的数来保存,那么就可以确定n2了。模型中的权重保存的形式是float32位的形式保存的,希望使用b位数据来保存我们的数据,则 n2=n1+1 −2^(b−1)/2. 式子中b-1是为了单独用1位数据来保存0(有点奢侈),除以2是由于存在正负数。
量化的过程也很简单,在Pl中相邻的两个数α,β,则权重量化为:
作者写了这个公式,也没说为什么这样量化。这个量化规则是非常常规的,就是到这个数距离Pl最近的那个数为量化值,比如2.8到整数3的距离比到整数2的距离小,则量化为3.
根据公式,现在一个权重w量化为β,即这个数到Pl中β的前一个数和后一个数的距离都比β大,怎么度量就是
而α+β=3β/4,所以上述条件可以写成3β/4
这个条件乘以4/3,得到的区间就是β和2β之间,这就说明了4/3是怎么来的了。
3.重训练re-train
训练的目标函数:
改进后的塔索模型的损失函数:
训练的规则:
实验前提:a.一个预训练的模型,模型已收敛
b.训练这个模型训练集,验证集,测试集
大体三个步骤:weights partition、group-wise quantization 、re-training 。
(1)先将每个kernel的数据分为2个组,一组量化编码另一组保持不变,
(2)再使用训练集去训练这个模型直到收敛。
(3)再把之前已量化编码的数据固定住,把之前没有量化编码的数据分为两组,一组量化编码,一组保持不变,
(4)继续使用训练集来训练,直至模型收敛。
(5)重复上述操作,把kernel中的所有的权重都编码量化了,则认为模型已压缩。
下面介绍具体每个步骤是怎么实施的:
1.kernel的权重每次按照什么样的比例来分组,文章给出对各个模型的分组方案:(大括弧中的比例代表每次训练前有多少的权重已被量化编码)
Alexnet:{0.3, 0.6, 0.8, 1} ,batch_size:256 weights_decay:0.0005 动量系数:0.9
VGG-16:{0.5, 0.75, 0.875, 1},batch_size:32 weights_decay:0.0005 动量系数:0.9
GoogleNet:{0.2, 0.4, 0.6, 0.8, 1},batch_size:80 weights_decay:0.0005 动量系数:0.9
ResNet-18:{0.5, 0.75, 0.875,1},batch_size:80 weights_decay:0.0005 动量系数:0.9
ResNet-50: {0.5,0.75, 0.875, 1},batch_size:80 weights_decay:0.0005 动量系数:0.9
每次把权重大的分为一组,权重小的分为一组,后面量化的主要为权重大的那个组。
2.量化编码:(很多trick,这些trick的理解我可能理解有错)
首先看下最终编的
不在一个范围内线性取值,如在0到1间取值{0.1,0.2,0.3,0.4,...1},而是在在一个范围内以对数的方式取值,在n1到n2间取2的指数,这样处理的原因就是为了在FPGA等平台上使用。
现在就是确定n1和n2了,假设n1>n2,那么可以首先确定的就是n1了
(我的理解:由于降取值,也就是小数只取整数部分,必然会带来误差,所以s前的系数应为一个大于1的数去补偿,为什么是4/3,后面解释)
其中s为每个kernel值得绝对值的最大值:
现在怎么确定n2了,如果确定了几位2进制的数来保存,那么就可以确定n2了。模型中的权重保存的形式是float32位的形式保存的,希望使用b位数据来保存我们的数据,则 n2=n1+1 −2^(b−1)/2. 式子中b-1是为了单独用1位数据来保存0(有点奢侈),除以2是由于存在正负数。
量化的过程也很简单,在Pl中相邻的两个数α,β,则权重量化为:
作者写了这个公式,也没说为什么这样量化。这个量化规则是非常常规的,就是到这个数距离Pl最近的那个数为量化值,比如2.8到整数3的距离比到整数2的距离小,则量化为3.
根据公式,现在一个权重w量化为β,即这个数到Pl中β的前一个数和后一个数的距离都比β大,怎么度量就是
而α+β=3β/4,所以上述条件可以写成3β/4
这个条件乘以4/3,得到的区间就是β和2β之间,这就说明了4/3是怎么来的了。
3.重训练re-train
训练的目标函数:
改进后的塔索模型的损失函数:
训练的规则:
相关文章推荐
- (摘要)ICLR 2017 神经网络压缩,Incremental Network Quantization: Towards Lossless CNNs with Low-Precision Weig
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 代码编译
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization
- 论文笔记| Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- 【论文笔记】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- 论文笔记:Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- 论文翻译:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- RCNN(四)Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- 论文笔记之: Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(更快的RCNN:通过区域提议网络实现实时)
- 【CV论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
- Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks