Accelerating deep convolutional networks using low-precision and sparsity
(这篇blog不涉及文中所探讨的dLAC设计的内容)
这篇文章旨在不影响其准确率的情况下提高deep CNN的计算效率。作者采用了两种方法:1.使用2-bit代替原来的full precision进行训练和inference;2.跳过过于zero value的计算。
1 low-precision deep CNN
作者使用了先前研究者提出的ternary network的框架,使用2-bit来训练整个网络。具体的实现如下
同时,不同于DeepCompression中提到的剪枝,该网络会利用网络中动态的sparsity来skip关于zero value的计算。
1.1 评估模型
文章选用基于Cifar-10训练的VGG模型和基于Imagenet训练的Resnet模型进行评估。
1.2 低精度网络训练
训练低精度网络文章才去一下几种策略:
1.2.1 从全精度网络中获取权值初始值
在训练的前15个周期,使用full-precision的网络进行训练;在之后的周期中切换到low-precision的网络中。这个策略提高了2%的正确率。
1.2.2 低精度部分化
在网络的第一层不使用low-precision的策略,确保输入信息损失的最小化。这一策略提升了Top-1 0.5%的准确率。
1.2.3 大幅降低learning rate
当训练的error rate迟迟不降低的时候,选择大幅降低learning rate进行调节。这一策略提升了Top-1大约1%的准确率。
1.2.4 正则化和ReLU threshold
使用正则化并且调节ReLU的阈值来提升sparsity的占比和降低噪声的影响。
1.3 低精度网络中的sparsity
zero value主要有两个来源,一个是ReLU function阈值之前的值会变为0;另一个是在低精度操作之后一些比较小的权值会变成0.经过统计在inference(forward pass)阶段有74%是有zero value的计算;而在backward pass中有67%是有zero value的计算。
2 results
2.1 Cifar-10 accuracy
baseline的低精度网络降低了大约3%左右的accuracy。为了提高accuracy,做了一些列的步骤:1.Reg series:使用了11中不同的正则化的方式;2.GradUpdate series:跳过classification结果正确的batch的backpropagation来降低overfitting;3.RuluT series:将ReLU的threshold在最后几个epoch中调节为0.01来降低噪声的干扰;4.SkipLayer series:第一层使用full precision。
以上这些手段将accuracy提升了大约1.6%。
2.2 ImageNet accuracy
文章中指出,Resnet的accuracy随着层数的增多越来越好。其中,低精度的Resnet-34/Resnet-50/Resnet-152比全精度的Resnet-18/Resnet-34/Resnet-50的accuracy要高。