原创作品,转载时请务必以超链接形式标明文章原始出处: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量化可自行了解