AdderNet:仅使用加法运算的卷积神经网络.

加法神经网络

给定滤波器$F \in \Bbb{R}^{d \times d \times c_{in} \times c_{out}}$和输入特征$X \in \Bbb{R}^{H \times W \times c_{in}}$,其中$d$是滤波器的大小,$c_{in}$和$c_{out}$是输入和输出通道数,$H$和$W$是特征的高度和宽度。卷积神经网络的计算可以被表示为:

\[Y(m,n,t)=\sum_{i=0}^{d} {\sum_{j=0}^{d} {\sum_{k=0}^{c_{in}} {S(X(m+i,n+j,k),F(i,j,k,t))}}}\]

此时可以理解为卷积网络在度量特征和滤波器之间的相关性,其中$S$是距离度量函数。

当选择互相关作为距离度量函数时,有$S(x,y)=x \times y$,这就是通常使用的卷积运算,用来计算特征和卷积核之间的互相关性。特别地,当$d=1$时,公式表示全连接层的运算。

作者提出了一种只具有加法运算的度量函数,使用L1距离代替卷积计算。此时计算表示为:

\[Y(m,n,t)=-\sum_{i=0}^{d} {\sum_{j=0}^{d} {\sum_{k=0}^{c_{in}} {\mid X(m+i,n+j,k)-F(i,j,k,t) \mid }}}\]

优化方法

网络使用反向传播算法计算参数的梯度,并通过梯度下降法更新参数。AdderNet中输出特征$Y$对滤波器$F$的偏导数计算为:

\[\frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = sgn(X(m+i,n+j,k)-F(i,j,k,t))\]

其中$sgn$代表符号函数。这样计算只有\(\{-1,0,+1\}\)三个值的输出,不能很好的反应输入特征$X$和滤波器$F$之间的距离关系,也不利于滤波器的优化。作者提出将符号函数去掉:

\[\frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = X(m+i,n+j,k)-F(i,j,k,t)\]

使用改进方式计算的梯度更能表达输入特征$X$和滤波器$F$之间的距离大小关系,也更加有利于梯度的优化。

特别地,由于使用改进的梯度计算出的结果量级可能大于$1$,在对输入特征$X$求偏导数时,对其进行截断:

\[\frac{\partial Y(m,n,t)}{\partial X(m+i,n+j,k)} = HT(F(i,j,k,t)-X(m+i,n+j,k))\] \[HT(x) = \begin{cases} x, \quad \text{if }-1<x<1 \\ 1 \quad x>1 \\ -1 \quad x<-1 \end{cases}\]

其中$HT$为HardTanh函数,即将输出截断到$-1$到$+1$。如果不对$X$的梯度进行截断,多层的反向传播会使得改进梯度的量级和真实梯度的量级有着很大的累计误差,导致梯度爆炸。

自适应学习率调整

在训练卷积网络时,通常希望每一层的输出分布相似,使得网络的计算更加稳定。假设输入特征$X$和滤波器$F$都是标准正态分布,在卷积网络中输出特征的方差可以被计算为:

\[Var[Y_{CNN}] = \sum_{i=0}^{d} {\sum_{j=0}^{d} {\sum_{k=0}^{c_{in}} {Var[X \times F]}}} = d^2c_{in}Var[X]Var[F]\]

通过给定滤波器$F$初始化一个很小的方差,输出特征$Y$的方差可以被控制为和输入特征$X$相似。

AdderNet中,输出特征的方差可以被计算为:

\[Var[Y_{AdderNet}] = \sum_{i=0}^{d} {\sum_{j=0}^{d} {\sum_{k=0}^{c_{in}} {Var[\mid X - F \mid]}}} = \sqrt{\frac{\pi}{2}} d^2c_{in}(Var[X]+Var[F])\]

对于AdderNet,无法给定滤波器$F$的方差使得输出特征的方差维持不变,于是输出特征的量级会大大高于输入特征,如果不对其进行归一化,将会导致输出的数量级随着网络的深度爆炸。

卷积网络通常用Batch Norm控制每层的特征量级相似,通过如下计算实现:

\[y = \gamma \frac{x-\mu_{B}}{\sigma_{B}} + \beta\]

其中$\gamma$和$\beta$是可学习的参数,$\mu_{B}$和$\sigma_{B}$是特征的均值和方差。在Batch Norm层,梯度被计算为:

\[\frac{\partial l}{\partial x_i} = \sum_{j=1}^{m} {\frac{\gamma}{m^2 \sigma_{B}}\{\frac{\partial l}{\partial y_i}-\frac{\partial l}{\partial y_i}[1+\frac{(x_i-x_j)(x_j-\mu_{B})}{\sigma_{B}}]\}}\]

由于AdderNet的方差很大,计算出的偏导数的量级会很小,对滤波器的梯度将会变的很小,不利于网络的训练:

作者提出了基于归一化的自适应学习率,以便于AdderNet的训练。具体地,每层的梯度计算为:

\[\Delta F_l = \gamma \times \alpha_l \times \Delta L(F_l)\]

其中$\gamma$是整个网络的全局学习率,$\Delta L(F_l)$是第$l$层的梯度,$\alpha_l$是$l$层的学习率。每层的学习率计算为:

\[\alpha_l = \frac{\eta}{\sqrt{k} \mid\mid \Delta L(F_l) \mid\mid_2}\]

其中$k$代表中$F_l$元素的个数,$\eta$为超参数。通过使用这个方法,每层的滤波器可以以相同且更快的更新速度进行优化。

该算法的完整流程如下:

实验分析

作者通过实验证明了去掉符号函数(FP)以及自适应学习率(ALR)能够帮助网络训练:

作者比较了卷积神经网络、二值神经网络(BNN,加法和异或)与AdderNetCIFAR数据集上的分类结果:

为进一步测试网络在大型分类任务上的表现,作者还在ImageNet数据集上进行实验:

作者对AdderNet和卷积网络的特征进行了可视化。由于卷积网络使用互相关性作为特征提取的度量,不同的类别被按照角度分开。而AdderNet使用的L1距离把不同的类别分成不同的聚类中心。

作者还对AdderNet和卷积网络的滤波器进行了可视化。两种网络虽然采用不同的度量方式,它们的滤波器都具有较强的纹理特征,都具有提取图片中特征的能力。

作者还对AdderNet和卷积网络的权重参数分布进行了可视化。AdderNet的参数更接近于拉普拉斯分布,而卷积网络的权重更接近于正态分布。这是由于L1度量的先验分布为拉普拉斯分布,AdderNet的参数更倾向于产生拉普拉斯分布。