0%

论文阅读笔记(2):AdderNet

Motivation

目标:设计更加高效的深度神经网络,可以在资源有限的移动设备运行。

现有工作的局限性:常规的卷积基于乘法,代价较高;用二值滤波器替换卷积的工作如BNN等会带来较大的识别准确率下降。

文章思路:常规卷积本质上是一种互相关(输入图像与卷积核之间的相似度度量)。可以用更高效的相似度度量方法来替换常规卷积,使得度量中只包含代价较小的加法操作→AdderNet

AdderNet

开局公式

F: 卷积核(滤波器)(尺寸$d×d$) 当d=1时,该公式表示全连接层的计算

X:特征图

S:预定义的相似度测量方法,例如互相关中$S(x,y)=x\times y$

从上述公式出发,文章改变S,使用L1距离测量F和X的相似度,使得测量中只有加法没有乘法:

使用L1距离存在的问题及解决:

问题1:加法滤波器的输出总为负数(会影响激活函数如ReLU的使用)

解决方法:使用Batch Normalization→输出被归一化到适当的范围→CNN中的激活函数在AdderNet中也适用 (BN中存在乘法,但是数量太少可以忽略)

问题2.1:优化方法中滤波器F梯度的计算

AdderNet中计算偏微分:

所以梯度取值只有+1,0,-1。由此进行优化的方法为signSGD,但是,signSGD几乎永远不会沿着最陡的下降方向,并且方向性只会随着维数的增长而变差。

解决方法:使用另一种形式的梯度(实际上是L2范数的梯度):

问题2.2:优化方法中特征图X梯度的计算

同样使用L2范数的梯度,但是梯度值可能会在[-1,+1]的范围之外→由于chain rule,Y对X的偏导数不仅影响当前层的梯度,还会影响当前层之前的所有层的梯度→梯度爆炸

解决方法:使用HardTanh函数(HT(x))将X的梯度clip到[-1,+1]的范围。

问题3:AdderNet使用L1范数得到的Y方差更大,导致滤波器权重的梯度消失问题

假设F和X服从正太分布

CNN中有

而AdderNet中则是

实际情况中Var[F]非常小,所以$Var[Y_{AdderNet}]$会比$Var[Y_{CNN}]$大。在加法层后面会接一个BN层,大方差会导致X的梯度幅值小,经过chain rule的作用,滤波器的权重梯度幅值会越来越小。

gradient_disappear

解决方法:adaptive learning rate

$l$:表示第$l$层;$\triangle L(F_{l})$第$l$层F的梯度;$\gamma$:全局学习率

局部学习率:

k:F中的元素数量,用于对L2范数求平均

Results

在MNIST、CIFAR10、CIFAR100、ImageNet上达到与CNN相近的准确率。

v1_imagenet_result

AdderNet的权重服从拉普拉斯分布,而CNN的权重服从高斯分布。

v1_histogram

AdderNet: DoWe Really Need Multiplications in Deep Learning?

AdderNet代码