您的位置:首页 > 其它

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
            训练的目标函数:
                   


                 
           改进后的塔索模型的损失函数:
                          
         


    训练的规则: 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐