论文阅读——LSQ+: Improving low-bit quantization through learnable offsets and better initialization

淺唱寂寞╮ 提交于 2020-10-04 11:58:05

LSQ+: Improving low-bit quantization through learnable offsets and better
initialization
from Qualcomn AI Research | Seoul National University
CVPR2020
LSQ+:通过学习偏移和更好的初始化改进LSQ



Abstract

新的激活函数,如Swish,Mish不像ReLU只有非负值,而是有正有负,而传统的无符号量化策略会将所有负的激活值量化为0,从而导致性能的显著下降;如果为了对负激活值也进行量化就需要增加额外的符号位,在低比特量化(2、3、4bit)中代价太大了。


为了解决这一问题,本文基于LSQ提出了改进版的LSQ+,通过引入一种通用的非对称的量化策略,通过训练学习缩放尺度scale和偏移参数offset,从而解决负激活值的量化问题;另一方面基于梯度学习的量化方案训练过程通常不稳定,因此需要调整大量的超参数才能达到较好的性能,LSQ+通过对待量化的参数使用MSE初始化策略有效缓解了这一问题,使得多次训练结果的差异波动明显降低。



在EfficientNet和MixNet上使用LSQ+的量化策略的表现要优于Swish激活的LSQ低比特量化,比如EfficientNet的W4A4量化精度提升1.8%,EfficientNet的W2A2量化提升5.6%。据我们所知,这也是第一份将上述网络量化到如此低位数的工作。




其中WxAx表示将网络中的权重和激活值量化为x位。


Section I Introduction

随着深度神经网络在各种场景下得到了广泛应用,相应对资源受限的硬件平台上高效部署这些网络的需求也越来越大。尝试的策略由网络剪枝、网络结构搜索以及手动设计更为高效的网络结构(如深度可分离卷积、SE模块等),本文通过将模型中的权重和激活量化到较低比特,从而实现定点推理,减少内存带宽的使用。




在这一过程中,也提出了一系列新的激活函数,如Swish,H-swish,Leaky-ReLU作为Relu的替代,这些激活函数会产生负的激活值;而目前的量化方案,如PACT,LSQ使用的是无符号的量化范围,因此所有小于0的激活值都会被丢弃,量化为0.这种量化策略对使用ReLU作为激活函数的网络如ResNet是十分使用的,但如果迁移到EfficientNet、MixNet这种使用新型激活函数Swish的网络时就会导致严重的精度损失。




比如LSQ W4A4量化预训练ResNet50几乎不损失精度,然而在EfficientNet-B0中却会导致4.1%的精度下降,因此单纯使用有符号的量化范围会导致性能的下降;如果量化范围包含负值,则由于负值区域的值相对于正值而言更少,这样会降低正值范围内的表现能力。





为了缓解低比特量化这一精度下降问题,本文提出了一种通用的通过学习偏移参数和缩放参数的非对称量化策略,更适合于负的激活值的量化。





另一个问题是基于梯度学习的量化方法其训练不稳定的问题,对初始化结果非常敏感,因此本文使用基于MSE(均方误差的初始化来缓解这一问题。





总而言之,本文在LSQ的基础上增加了对激活值量化的偏移参数的学习,从而抵消量化过程中的精度损失;本文的实验还表明了合理初始化对稳定训练的重要性,尤其在低比特领域。




Section II Related Work

Paper16对量化的基础知识做了很好的总数,主要解释了对称量化和非对称量化的区别;通常可以将量化策略分为无需微调的训练后的方法(post_training)以及需要微调的量化感知方法(quantization-aware).





Post-training方法无需网络完全训练,而是基于少量数据进行优化,这类方法在传统的8bit量化上有较好的实现,但在低比特量化中效果不佳。






Quantization-aware方法如果时间充足可以在低比特量化时优化至更好的精度,LSQ就是这类的代表之一,本文也是基于这类方法,但增添了新的量化和初始化的内容进去。







在调研过程中还发现有的工作致力于借助知识蒸馏来提升量化效果、或者自动学习量化的位宽;而本文的工作与上述研究是正交的,也就是可以共同使用共同提升量化效果。


Section III Method

在LSQ中提出了一种具有学习可变步长的对称量化方案,通过学习扩展参数scale完成对权重和激活值的量化。
在这里插入图片描述

其中n.p由量化位数决定,量化后的值会被钳制在n,p范围内,如
在这里插入图片描述
但无法处理activation有负数的情况,如Swish、Leaky ReLU,会导致精度下降;因此LSQ+对激活使用的是非对称量化策略。


Part A Learnable asymmetric quantization
由于权重参数一般在0附近对称分布的,所以凭经验可以使用对称量化,而激活值使用费对称量化。
本文提出的激活值非对称量化方案不仅需要学习尺度参数scale还考虑了偏移参数offset-betha
在这里插入图片描述




这一参数的梯度求导为:

在这里插入图片描述
在这里插入图片描述

额外增加的偏移项增加了计算但是可以在编译时预先计算好作为一项bias,到时候直接加入到计算中。
在这里插入图片描述

Table I展示了LSQ+非对称量化的4种方案,其中Config1和Config2未加入偏移参数iffsert项,是基于LSQ的量化方式,只不过范围不同;Config3和Config4则加入了可训练参数offset项。
在这里插入图片描述

Part B Initialization of quantization parameters

前文提到在低比特量化中使用quantization-aware方式,在训练过程中极不稳定,很容易受到初始化结果的影响。这一问题在计算深度可分离卷积时会进一步放大,因此本文提出了一种新的对可训练参数初始化的方法。


Scale initialization for weight quantization



对权重的scale参数LSQ使用的是符号对称量化:
在这里插入图片描述



因此权重量化时没有offset偏移参数的参与,但在2、3、4bit量化时收敛效果并不好;因此本文使用权重分布的统计特征-权重绝对值分布的均值和方差,而不是真实的权重值来进行初始化:
在这里插入图片描述

Scale/Offset initialization for activation quantization





Xmin和Xmax分别代表激活值的最大和最小值,比如ReLU激活函数的最小值Xmin=0,Swish的最小值Xmin=-0.278。
确定Xmin和Xmax,以及量化范围的上下界皆可以得到scale和offset参数-beta的初始值:
在这里插入图片描述
在这里插入图片描述


但是这种初始化计算方法很容易受到异常点的影响,这一问题通过先取几个patch的数据,最小化MSE来进行优化,纠正初始值。
在这里插入图片描述

Section IV Experiments

本文在Swish激活上进行W2A2,W3A3,W4A4量化测试LSQ+的效果,也是据我们所知第一次将本文使用的框架量化到如此低的位数。比较时还是保持了LSQ中传统框架使用ReLU的精度进行对比,在所有的实验设定中权重参数首先都被初始化为预训练后的浮点数,主要对比使用不同的量化策略对性能的影响。
Part A Swish Activation

Table 2和Table 3展示了基于EfficiNet-B0和MixNet-S框架下不同量化方案、量化不同位数后的性能对比。可以看到在W4A4量化时,offset参数的加入使得性能提升了1.6%、1.3%,而在W2A2中提升效果更明显;

在这里插入图片描述


另外一个有意思的实验结果是Config2(Signed+Symmetric)配置下的量化结果是最差的,首先没有offseta参数,其次只有一半的量化范围用于正激活值的表示,而实际Swish函数中负数仅占很少一部分,大部分是正激活值,而量化范围又减少了一半,因此表现力不足。
Part B ReLU Activation

Table 4则展示了本文四种量化方案与其他研究使用的量化方案对ResNet18中ReLU量化的结果对比,可以看到比ResNet的精度还要提升0.4-0.6%,在W4A4中都能达到70.7%的精度,而全精度的ResNet-18精度才为70.1%;同时也能看出LSQ+四种配置方案中没有明显的差距,也可以理解,因为ReLU激活函数没有负值,因此量化效果差别不大。
在这里插入图片描述
Part C Effect of quantization parameter initialization

本文还对比了3种初始化方法的效果,其中前两种配置没有使用offset参数,一个是计算每一层权值或激活值的最大最小值来获得s初始值;一个是LSQ的初始化方案;
第三种则是LSQ+中引入offset参数的初始化方案。

在这里插入图片描述





量化方案则选择的是基于EfficientNet-B0 Config4.通过Table5的对比结果可以看出Config3初始化后具有更好的稳定性,尤其是W2A2量化时,主要就是因为2bit量化是scale参数很容易受到权重或激活值波动的影响,即使是LSQ的初始化方案也不可避免有一个很大的方差。
在这里插入图片描述

Section V Discussion

Part A Learned Offset Values

Fig2可视化了每一层学到的offset偏移参数,基于在EfficientNet做W4A4量化,可以看到大多数offset参数都是负的,意味着激活值在scale前就被平移了一部分,这意味着量化的层开始逐渐去调整负的激活值。
在这里插入图片描述
Part B Learned Offset vs Fixed Offset

究竟是固定偏移量好呢还是学习可变的偏移量效果更佳呢,通过前一小节的观察发现,学习到的offset量绝大部分都还没到Swish的最小值,如果使用统一的偏移就会导致精度的下降。而通过学习得到的scale和offset参数可以在量化间隔和激活值的可表示范围内有一个较好的权衡,Table6也展示了学习到的offset和固定的offset的结果对比,依旧是通过学习可变的offset精度最高。
在这里插入图片描述




Section VI
 Conclusion

本文聚焦于低比特量化的两大问题:

(1)有符号激活值的量化问题

(2)量化过程中的训练稳定性问题

为了解决上述问题,本文提出了一种新的通用的非对称量化方案,引入可学习的偏移参数,避免引入额外的符号位来完成负数激活值的量化;此外还采用了新的初始化方案-MSE Initialization提升训练稳定性。
从而将EfficientNet和MixNet量化至2、3、4bit;此外在ResNet中使用LSQ+量化也不会造成精度损失。


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!