论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?

论文阅读之AdderNet:深度学习中真的需要乘法吗?
AdderNet
Code
CVPR2020 from 北大&华为诺亚实验室

Abstract

与加法运算相比,乘法运算更加复杂。而在神经网络中广泛使用的卷积操作主要就是通过大量的浮点乘法来进行输入图像与filter之间的互相关运算。本文提出的AdderNet则通过加法而不是乘法来减少计算上的开销。AdderNet中将输入与各filter之间的l1-距离作为输出,并设计了AdderNet的反向传播算法并提出了自适应学习率策略用于AdderNet的训练。最终没有卷积乘法,也能进行分类任务。最终以ResNet-50框架在ImageNet数据集上取得了74.9%的top-1 Accuracy

Section I Introduction

GPU的提出大大加速了神经网络的训练,但也能耗问题限制了深度学习框架在移动端的应用。因此完成神经网络在移动设备山的部署需要进一步减少计算开销。
加减乘数是四大基本运算,但众所周知乘法比加法慢得多,而神经网络中很大一部分是权重与**值这些浮点数的乘法运算。因此很多研究者研究如何将网络中的乘法用加法替代从而加速网络。比如BNN网络将权重与**值二值化,这样乘累加运算就可以转化为位移操作;其他研究还涉猎了用二进制计算近似卷积操作、使用低位宽数据表征权重等。
虽然二值化操作可有效降低计算开销,但也带来了分类精度的下降。除此之外,也不能保证二值网络训练的稳定性,若降低学习率会使得网络收敛很慢。神经网络中的卷积主要是对输入进行互相关运算,用以提取图像特征。研究者们也对卷积加速进行了一系列探索,甚至不惜牺牲网络性能,但却未尝试过将卷积直接替换为另一种仅有加法实现的更为简洁的运算从而降低计算复杂度。
因此本文探索了将卷积神经网络中的乘法替换为加法的可行性。本文提出的AdderNet不使用卷积操作而是最大化利用了加法运算。首先使用L1距离来区分不同类别。由于L1距离是计算二者坐标差的绝对值,仅涉及加法操作,因此在硬件实现上具有天然优势;此外本文还设计了带有正则化的梯度更新策略以保证网络的反向传播和收敛性。最终AdderNet既完成了神经网络的加速同时取得了同CNN相近的识别精度。

Section II Related works

主要探究如何去除一些无效计算来降低神经网络的计算复杂度。
Part A 网络剪枝
网络剪枝主要通过移除冗余的权重来实现网络的压缩和加速。比如用奇异值分解(SVD)全连接层的权重矩阵、去除预训练中的部分权重、将filter变换到频域避免浮点计算。还有的通过去除冗余的filter、或者对channel进行选择这样冗余filter/channel后续的计算就无需考虑了。
Part B高效模块设计
-DW+PW Conv,SE Module
除了网络剪枝,还有部分学者致力于设计更高效的模块或运算用于替代传统的卷积操作。比如轻量级的MobileNet将完整的卷积运算分两步进行:point-wise convolution&depth-wise convolution,在不改变输出特征维度的前提下大大降低了卷积参数个数;类似的还有SE 模块(squeeze & excitation block)
Part C 知识蒸馏
除了去除网络中的冗余连接,Hinton还提出了knowledge distillation的概念,借助teacher网络的学习能力来指导student网络完成复杂任务的学习,变种有多个teacher网络、对中间隐层的学习以及对不同teacher网络学到的特征整合成新的知识来帮助student网络的训练。

Section III AdderNet

Part A
对于CNN中的卷积运算,假定输入X,filter表示为F,卷积后输出的是二者的相似性度量,表述为下式:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
实际上二者的相似性度量可以有多种途径,但都涉及到大量的乘法运算,这就增加了计算开销。
因此本文通过计算L1距离完成输入和filter之间的相似性度量。而L1距离仅涉及到两个向量差的绝对值,这样输出就变成了(注意到前面多了个-):
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?我们注意到使用互相关运算还是L1距离都可以完成相似性度量,但二者的输出结果还是有一些差别的。通过卷积核完成输入特征图谱的加权和计算,结果可正可负;但adder filter输出的结果恒为负,为此我们引入了batch normalization将结果归一化到一定范围区间内从而保证传统CNN使用的**函数在此依旧可以正常使用。虽然BN的引入也有乘法操作但计算复杂度已远低于常规卷积层.conv和BN的计算复杂度分别为:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
Part B Optimization
神经网络反向传播过程中通过随机梯度下降完成参数值的更新。传统的CNN中偏导数的计算表述如下:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
而AdderNet中的偏导数通过下式计算:

论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?但signSGD优化方法几乎不会选择到最陡的方向,而且随着维度增加效果会更差,因此本文使用下式进行梯度更新:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
此外,如果使用full-precision gradient的更新方法,由于涉及到前层的梯度值很容易导致梯度爆炸,因此本文还通过使用HardTanh将输出限定在[-1,1]范围内。
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?** Part C Adaptive Learning Rate Scaling**
自适应学习率调整策略
AdderNet的输出具有较大方差,在更新时根据常规的链式法则会导致梯度比常规CNN更小,从而导致参数更新过慢。因此自然而然想到通过引入自适应学习率调整参数的更新
learningrate组成:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
包括神经网络的全局学习率和本地学习率,其中本地学习率表示为:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?
这样可以保证每层更新的幅度一致,最终AdderNet的训练过程表述为:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?

Section IV Experiment

本章在MNIST、CIFAR及ImageNet数据集山验证了AdderNet的有效性,随后进行了消融实验以及对提取的特征进行可视化。实验平台和框架:V100 Pytorch
Part A MNIST
框架:LeNet5+BN conv filter替换为adder filter
images:3232 50epochs
在MNIST数据集中AdderNet和CNN均取得了99.4%的accuracy,但addernet中几乎没有乘法运算
AdderNet:870K additions latency:1.7M
LeNet-CNN:435L multiplications +534K additions latency:2.5M
** Part B CIFAR**
CIFAR-10 & CIFAR-100
图片大小:32
32彩图
同BNN进行比较(因为BNN可通过异或非门完成硬件实现)
400 epochs batch_size=256
AdderNet在CIFAR-10 CIFAR-100上取得了和VGG-small相近的分类结果(93.72%、72.64%)
虽然BNN参量更少,但精度远不如AdderNet,仅有89.8%、65.4%。
结论就是AdderNet可以达到和CNN相近的精度而且(几乎)没有乘法运算,BNN虽然参量少但有乘法运算,而且性能不如AdderNet。
CIFAR分类结果如下所示:
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?** Part C ImageNet**
images:224*224 彩图
对比AdderNet/CNN/BNN的Resnet-18 & Resnet-50实现
150 epochs batch_size=256
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?Part D 可视化结果
AdderNet使用L1距离来度量输入与filter之间的关系,而不是使用卷积的互相关。因此需要探究一些AdderNet与CNN特征空间上的差异。因此就在MNIST数据集上搭建了LeNet++:6conv+1fc,每层神经元数目依次为:32,32,64,64,128,128,2.同样其中的conv层用add filter替换可视化结果如图1所示,CNN的可视化结果为右侧,相似度通过cosin计算得到的,因此分类通过角度进行的分类。左侧是AdderNet的可视化结果,可以看到不同种类的聚类中心不同,这也验证了AdderNet具有同CNN相似的辨别能力。
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?对filter的可视化结果如Fig2所示,虽然AdderNet和CNN用的度量矩阵不同,但都具有特征提取的能力。
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?权重分布的可视化
对LeNet-5-BN的第三层进行可视化,AdderNet权重更接近Laplace分布,CNN的权重近似高斯分布,分别对应L1-norm和L2-norm。
论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?Part E 消融实验
用于验证adaptive learning rate的有效性,进行了消融实验。在采用full_precision gradient和sign-gradient训练取得的精度分别为:54.91%和29.26%,随后测试了不同的learning rate对accuracy的影响,实验结果如Fig3所示。使用ALR以及ILR策略后精度达到了97.99%及97.72%,但还是低于CNN的99.40%。最后我们采用full-precision gradient+ALR达到99.40%的精度。

论文阅读——AdderNet: Do We Really Need Multiplications in Deep Learning?

Section V Conclusion

卷积神经网络中的卷积操作用于度量输入与filter之间的相似性,基于此我们尝试用更有高效的度量方式来替代传统卷积。本文就尝试通过加法运算来取代乘法运算的可能性,因此构建了AdderNet用于降低计算开销,AdderNet通过L1距离完成度量任务的。在一些benchmark上AdderNet取得了与CNN相近的性能,今后我们还将尝试量化方法进一步加速AdderNet,以及测试AdderNet在除分类以外的检测及分割任务中的泛化性。