摘要
在量化神经网络时,将每个浮点权值赋给其最近的定点值是主要的方法。在本文中,提出了一种更好的适应数据和任务损失的PTQ加权舍入机制AdaRound。AdaRound速度很快,不需要对网络进行微调,并且只使用少量未标记的数据。
从理论上分析预训练神经网络的舍入问题。通过泰勒级数展开式逼近任务损失,将舍入任务化为二次型无约束二元优化问题,将其简化为分层局部损失,并建议使用软松弛来优化该损失。
背景
以前的量化方法是使用的四舍五入,权重会被四舍五入到最近的一个定点权值
但是在PTQ方法中,这个方法并不是最佳的。为了分析方法,作者将舍入表述成为一个层二次无约束二进制优化问题。
分析
是我们想要的最小任务损失
使用了泰勒展开式得到上式。在任务损失中,当Δw不太大时,忽略泰勒级数展开中的高阶项是一个很好的近似。
在中
当我们在本例中只考虑这些对角项时,舍入到最接近是最优的。然而,对于对应于∆w1∆w2的项,符号很重要,其中两个相反符号改善了损失。为了最小化量化对任务损失的总体影响,我们需要在对角线项和非对角线项的贡献之间进行权衡。舍入到最接近忽略了非对角线的贡献,使其经常是次优的。
为了证明这一想法,作者进行了一个实验。随机抽样的精度在52.06%±5.52%之间,而四舍五入到最近是52.29%,两者的结果差不多,但是前者的浮动值范围大。
核心
我们只用向下取整的方法,使用h(V)来调节最后的取整部分。
Vi,j是我们要优化的连续变量,h (Vi,j)可以是取值在0到1之间的任意可微函数,即h (Vi,j)∈[0,1]。附加项freg (V)是一个可微正则器,它的引入是为了促使优化变量h (Vi,j)收敛于0或1,即收敛时h (Vi,j)∈{0,1}。
总结:
这就需要看的值在 ℎ(v)=0 或者 1 的时候,函数值才会等于 0。所以,只要最小化
,那么最后求解出来的 ℎ(v) 肯定就是 0 或者 1,那么相应地,
最后就会收敛到 w-ceil,w-floor 中的某个数值。相当于间接实现了我们最开始的优化目标。
在优化h(V)前是四舍五入到最近;但是优化后,下图中可以看到不一定是舍入到最近。
实验
跟nearest方法比较可以看出adaround算法结果非常突出。
这篇论文跟我的工作的关联是比较大的,对权重w使用h(v)进行一个微调