基于权值熵的深度神经网络量化

原创作品,转载时请务必以超链接形式标明文章原始出处:http://www.dapalm.com/?p=88,作者:DaPalm-大数据,怕了么?

 

论文: Weighted-Entropy-based Quantization for Deep Neural Networks  (CVPR2017)

链接:http://openaccess.thecvf.com/content_cvpr_2017/papers/Park_Weighted-Entropy-Based_Quantization_for_CVPR_2017_paper.pdf

代码地址:https://github.com/EunhyeokPark/script_for_WQ

1.绪论部分:

      量化是优化神经网络模型前向计算耗时的最有效的方法之一,以便它们部署到资源受限的移动或嵌入式系统中。在这类方法中,最重要是提供低精度损失量化。在这篇论文中,作者提出了一种基于加权熵概念的量化权值和激活值的方法。它不像最近的二值化神经网络,作者提出的方法是根据目标精度来选择量化的比特位数。这种方法更加方便的去权衡精度与性能,以便更合理的选择量化级别。虽然,作者提供了这种自动量化策略,但是对于传统训练算法来说也是很轻易使用的。作者进行大量实验,如分类(AlexNet,GoogleNet,ResNet-50/101),检测(R-FCN with ResNet-50)和语言模型(LSTM网络),不用多说,肯定是有效果的。

2.相关工作:

     1.无法权衡精度和性能

     2.即使有,也是部分有效,需要大量修改网络,而且不量化第一层和最后一层

      提到了一些方法:LogQuan、XNOR-Net、DoReFa-Net,有兴趣可以找出来看看。

3.动机和灵感:

      首先对权值和激活值的概率分布进行了分析,呈现钟型分布(bell-shaped distribution),由三部分组成:1.接近0的值占主要部分,但对结果影响不大,分配相对较少的量化级;2.两端大的值相对较少,对结果影响大,但是为了充分利用量化级只分配少量的量化级给这部分;3.既不大又不小的值相对较多,对结果影响相对较大,所以分配更多的量化级。如图右下角就是WQ量化分布图。

4.量化与权值熵:

4.1权值量化

      权值量化的高层次思想是将权值分成N个聚类,从而有更多聚类代表重要权值,为每个聚类分配具有代表性的值,然后量化所有权值到某个对应聚类的值。这里最主要的是Weight Entropy,下面公式中的S,这里分成N个聚类C0,...,CN-1。Pn(概率)表示有多少比例的权值在Cn这个聚类范围内;In(重要性)表示Cn这个聚类里面所有权值的平均重要性。i(n,m)表示第n个聚类中的第m个权值的重要性,其与那个权值的二次方成比例。因为值大的权重分布比较稀疏,值小的权重的分布比较密集,所以值较大的Cn会有较大的In和较小的Pn。简单说就是高重要性低概率;高频率低重要性。

      (权值量化)提供训练数据(mini-batch input)和期望的logN-bit精度(聚类个数),找聚类N中的最大权值熵。聚类代表的值对应权值量化的level。

      权值熵理论限制,不能同时处理正负值,因此分成两个组负值和非负值,分别应应用算法到每组(N/2 levels)。

重要算法1

      1.输入(聚类数量N,权值w)

      2-3.计算每个权值的重要性

      4.重要性排序s=[]

      5.初始化聚类边界C0,...CN(假如s=[1,2,3,4],N=2,那么就可以得到初始化的分割边界:c0=0,c1=2,c2=4,也就是将s分成了C0={1,2}和C1={3,4}两份)

      6-11.找最大权值熵S的过程中更新聚类边界。第7行遍历所有聚类1~N-1,第8行ck在ck-1和ck+1这个范围遍历的时候,找到最大S,并更新边界对应的聚类ck,即新边界聚类

      12-15.遍历每个聚类,第13行计算每个聚类的重要性Ik,第14行根据Ik计算出这个聚类代表的值rk(Figure1的纵轴),第15行根据边界重要性s[ck]计算出权值的边界(Figure1的横轴)

       16-17.返回r0-rN-1和b0-bN,分别表示每个聚类的值和边界

4.2激活值量化

  LogQuan量化可自行了解

 

 

你可能感兴趣的:(模型压缩)