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要高。

猜你喜欢

转载自blog.csdn.net/holmosaint/article/details/82316389