1 标题
AdderNet: Do we really need multiplications in deep learning 来源:CVPR 2020 日期:06月26日 周五
2 概述
在计算机运算中,乘法耗费时间和硬件资源,而加法又快又省,CNNs中的卷积等操作都涉及大量的浮点相乘,神经网络真的需要乘法吗?为此,文中提出了加法器网络adder networks(AdderNets),用L1距离作为filter和feature的相似度量,摒弃原来的乘法运算,以减少神经网络运算的代价。此外,作者使用了特殊的BP方法,并使用自适应学习率策略来优化AdderNets。
如果能用加法替代乘法计算,那么神经网络在手机、平板等轻量移动设备上训练将成为可能。
3 创新点
- 提出AdderNets,摒弃了卷积计算,用filter和input feature的L1距离作为输出响应,深度神经网络(特别是CNNs)中的乘法被替换为加法——因为L1距离的计算只包含加减法。
- 使用了特殊的反向传播算法,使用自适应学习率进行梯度下降。
4 详细内容
4.1 算法
-
乘法变加法理解
卷积操作其实可以视为filter和feature的相似度量,相似性高的地方激活值高,而加法器网络则是使用L1-norm作为两者的相似度量,相似性高的地方激活值也高。下图为AdderNets和CNNs的特征可视化。
-
加法器网络
传统地,神经网络卷积核为: F ∈ R d × d × c i n × c o u t F\in\mathbb{R}^{d\times{d}\times{c_{in}}\times{c_{out}}} F∈Rd×d×cin×cout;输入特征为: X ∈ R H × W × c i n X\in\mathbb{R}^{H\times{W}\times{c_{in}}} X∈RH×W×cin;
则输出特征 Y Y Y为: Y ( m , n , t ) = − ∑ i = 0 d ∑ j = 0 d ∑ k = 0 c i n S ( X ( m + i , n + j , k ) , F ( i , j , k , t ) ) 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)) Y(m,n,t)=−i=0∑dj=0∑dk=0∑cinS(X(m+i,n+j,k),F(i,j,k,t))
其中 S S S是特征度量,如果是CNN,那么 S ( x , y ) S(x,y) S(x,y)就是 x x x和 y y y的卷积, d = 1 d=1 d=1的时候,上述公式还可以用于全连接层。
加法器神经网络用L1距离度量替代卷积,输出特征 Y Y Y为: Y ( m , n , t ) = − ∑ i = 0 d ∑ j = 0 d ∑ k = 0 c i n ∣ X ( m + i , n + j , k ) − F ( i , j , k , t ) ∣ Y(m,n,t)=-\sum_{i=0}^d\sum_{j=0}^d\sum_{k=0}^{c_{in}}|X(m+i,n+j,k)-F(i,j,k,t)| Y(m,n,t)=−i=0∑dj=0∑dk=0∑cin∣X(m+i,n+j,k)−F(i,j,k,t)∣
L1距离是每一维度差的绝对值之和,所以计算全程只涉及加减法。 -
优化
①AdderNets中,原来输出特征 Y Y Y对滤波器 F F F的偏导使用阶跃函数 s g n sgn sgn,这使得结果仅有1,-1,0,这并不利于保留特征,也就是说无法保证加法器网络的精度和CNNs一样。
δ Y ( m , n , t ) δ F ( i , j , k , t ) = s g n ( X ( m + i , n + j , k ) − F ( i , j , k , t ) ) \frac{\delta{}Y(m,n,t)}{\delta{} F(i,j,k,t)}=sgn(X(m+i,n+j,k)-F(i,j,k,t)) δF(i,j,k,t)δY(m,n,t)=sgn(X(m+i,n+j,k)−F(i,j,k,t))
②于是考虑用L2范数的偏导:
δ Y ( m , n , t ) δ F ( i , j , k , t ) = X ( m + i , n + j , k ) − F ( i , j , k , t ) \frac{\delta{}Y(m,n,t)}{\delta{} F(i,j,k,t)}=X(m+i,n+j,k)-F(i,j,k,t) δF(i,j,k,t)δY(m,n,t)=X(m+i,n+j,k)−F(i,j,k,t)
③去掉了 s g n sgn sgn更利于特征保留与后续梯度优化,但是由于偏导可能大于1或小于-1,反向传播可能会导致梯度爆炸,为此加入了HardTanh函数:
δ Y ( m , n , t ) δ F ( i , j , k , t ) = H T ( F ( i , j , k , t ) − X ( m + i , n + j , k ) ) \frac{\delta{}Y(m,n,t)}{\delta{} F(i,j,k,t)}=HT(F(i,j,k,t)-X(m+i,n+j,k)) δF(i,j,k,t)δY(m,n,t)=HT(F(i,j,k,t)−X(m+i,n+j,k))其中: H T ( x ) = { x , − 1 < x < 1 1 , x > 1 − 1 , x < − 1 HT(x)=\begin{cases}x,&-1<x<1\\1,&x>1\\-1,&x<-1\end{cases} HT(x)=⎩⎪⎨⎪⎧x,1,−1,−1<x<1x>1x<−1 -
自适应学习率
下图给出第1次迭代,部分层L2范数梯度大小,可以看出AdderNet梯度明显较小,这样反向传播也容易出现梯度消失现象。
为此,每个adder层: Δ F l = γ × α l × Δ L ( F l ) \Delta{}F_l=\gamma{}\times{\alpha_l}\times{\Delta{L(F_l)}} ΔFl=γ×αl×ΔL(Fl),其中 γ \gamma γ是全局学习率, Δ L ( F l ) \Delta{L(F_l)} ΔL(Fl)是第 l l l层的梯度, α \alpha α是局部学习率。
局部学习率可以定义为: α l = η k ∣ ∣ Δ L ( F l ) ∣ ∣ 2 \alpha_l=\frac{\eta{}\sqrt{k}}{||\Delta{L(F_l)}||_2} αl=∣∣ΔL(Fl)∣∣2ηk其中 η \eta η为超参, k k k为 F l F_l Fl中元素个数。
4.2 实验
- CIFAR-10和CIFAR-100上的准确率
- ImageNet上的准确率
- 总得来说,同CNN、BNN对比,AddNN节省计算量的同时也保证了精度。
5 收获与心得
现在一提到特征提取,首先想到的就是利用卷积网络,这是本能反应还是思维定式呢?特征的提取不仅仅局限于卷积网络方法,PCA和LDA也是值得尝试的方法。
本文的创新动机就很新颖,实现方法也极其简单,仅将神经网络的卷积操作摒弃,以L1距离度量替代之。随着各种深度神经网络的出现,训练网络的硬件成本越来越高,作者从网络本身切入,变乘法为加法,确实值得敬佩,用L1距离代替卷积操作,实际是模仿特征提取——即保留图像中的有用信息(激活值大的保留,小的摒弃)。今后遇到神经网络或其他算法,值得借鉴这种“模仿”的思想,尝试对其进行修改。