论文地址:https://arxiv.org/pdf/1805.06085v1.pdf
主要内容
作者提出了PArameterized Clipping acTivation(PACT)针对激活值的量化方法,使神经网络能在超低精度的权重和激活值下正常工作(精度不会显著下降)。PACT能将激活值量化至任意精度。而且还第一次证明权重和激活值都能被量化到4位,且网络精度与全精度网络的精度相当。
概括一下,其主要贡献有:
- PACT:通过在relu函数基础上引入新的参数α\alphaα用于表示clipping level(相当于截断的位置),通过反向传播学习该参数。α\alphaα需要使量化尺度比relu小以便减小量化误差,同时需要比传统的截断激活函数大,以便梯度更有效的流动。
- 实验结果证明PACT的有效性:权重和激活值精度 ≤\leq≤ 2bits时,PACT的网络精度最高;基于4bits量化的CNN,结果与单精度浮点数表示的精度相当。
激活值量化的难题
传统的激活函数没有可训练的参数,如果直接量化就不能在反向传播中进行误差补偿,网络精度会显著下降。
如果使用relu函数,虽然比其他激活函数准确性更高,但其输出无界,量化结果范围大,准确性会显著降低。
截断激活函数可以缓解上述问题,但其误差仍然高于基线。
PACT
基于上述问题,作者提出了PACT量化方法。
激活函数为:
相当于relu函数截断上界,输出限制在[0,α\alphaα]。
也可以将其线性量化为k位:
α\alphaα相当于loss中的参数,可以通过反向传播进行学习(STE):
在损失函数中对α\alphaα使用L2正则化。
只改变某一层的α\alphaα的值,保持其他参数以及其他层的α\alphaα值不变,得到如下结果:
不量化时,relu是个很好的激活函数,但并不是每层都能将交叉熵损失函数收敛至很好的值(act0,act6);但是量化后,α\alphaα的值不能过大,意味着无上界的relu函数不合适。
注意:每一层共享一个α\alphaα的效果更好;α\alphaα初始化的值尽量大,然后通过训练中的正则化减小α\alphaα的值;α\alphaα的正则化参数可以与权重的正则化参数λ\lambdaλ相同。
最后,作者还将PACT和其他方法用于经典的神经网络进行对比:
PACT与DoReFa:
总结
PACT量化方法可以对激活函数进行量化,其中的参数α\alphaα可以通过反向传播进行学习优化,而且在经典的神经网络上的量化效果不错(量化精度低于4bit,准确率下降不到1%)。