AdderNet是北大和华为诺亚方舟实验室共同完成的一篇文章,被CVPR2020收录为Oral representation.
1 Introduction
深度神经网络中会使用大量的浮点数乘法运算,这些运算可以在GPU上进行提速并在多个计算机视觉领域取得了进步。但是GPU的高功率消耗使得一些算法无法应用在移动端。并且,虽然GPU只占用很小的卡片体积,但是它还需要很多额外支撑的硬件。因此,本文研究的是可以使用在移动端设备上的神经网络结构。
加减乘除是四种基本运算,并且加法比乘法速度更快。但是,目前深度神经网络中大量的运算是乘法运算。因此,目前的一个研究方向是对网络进行二值化,这样可以将乘法变成累加的运算,如BinaryConnect是对权值进行二值化,BNNs还对CNN中的**值进行了归一化,Rastergari等对二值网络的优化进行了改进。
二值化网络可以减少计算消耗,但是也会牺牲性能,并且训练的过程不稳定,收敛速度较慢。为了解决这个问题,本文作者分析了CNN中的卷积运算,发现该运算实际上就是计算输入和滤波器权重的相似性。因此,本文主要研究了使用加法运算替代卷积运算中乘法运算的可行性。
这篇文章提出AdderNet,最大限度地使用加法运算替代卷积运算。首先,文章提出使用l 1 l_1 l 1 距离度量输入和滤波器权重之间的相似性,l 1 l_1 l 1 距离使用了加法运算(实际上是减法,但减法就是加上被减数的反码),因此该方法可以更有效率地构建神经网络。其次,针对l 1 l_1 l 1 距离的计算方法,本文还提出了一种基于正则化梯度的反向传播算法,该算法可以保证参数的充分更新。再次,本文根据正则化梯度的特性,提出了自适应的学习率缩放策略,该策略可以加快网络的收敛速度。最后,AdderNet在多个数据集上均加快了推理速度,并且取得了和传统CNN相近的性能。
本文的贡献如下:(1)提出了l 1 l_1 l 1 距离相似度度量替代卷积操作中的乘法相似度度量,这样可以使用加法替代大部分乘法操作,降低了计算资源的消耗。(2)提出了基于正则化梯度的反向传播算法和自适应的学习率缩放策略,这样可以加快网络收敛速度。(3)多个数据集的实验结果表明,AdderNet可以在保证性能的前提下,加快推理速度。
2 Methods
AdderNet的具体算法流程如Algorithm 1所示。
2.1 Adder Networks
对于输入X X X 和卷积滤波器F F F ,传统的卷积操作如式KaTeX parse error: Undefined control sequence: \eqref at position 1: \̲e̲q̲r̲e̲f̲{eq1} :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 ) ) (1)
Y\left ( m,n,t\right )=\sum_{i=0}^{d}\sum_{j=0}^{d}\sum_{k=0}^{c_{in}}S\left ( X\left ( m+i,n+j,k\right )-F\left ( i,j,k,t\right )\right ) \tag{1}
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 ) ) ( 1 )
式中,S S S 代表X X X 和F F F 之间的相似性度量。传统卷积相似性度量包含了乘法操作,作者提出用l 1 l_1 l 1 距离度量相似性,具体方法如式(2),这样可以实现使用加法运算替代乘法运算。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 ) ∣ (2)
Y\left ( m,n,t\right )=-\sum_{i=0}^{d}\sum_{j=0}^{d}\sum_{k=0}^{c_{in}}\left | X\left ( m+i,n+j,k\right )-F\left ( i,j,k,t\right )\right | \tag{2}
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 ) ∣ ( 2 )
式中的相似性度量计算结果都是负数,因此结果需要使用BN进行归一化,再使用**函数提高特征非线性。
2.2 梯度回传
式(2)中输出Y Y Y 相对于滤波器F F F 的偏导数如式(3):∂ Y ( m , n , t ) ∂ F ( i , j , k , y ) = s g n ( X ( m + i , n + j , k ) − F ( i , j , k , t ) ) (3)
\frac{\partial Y\left ( m,n,t\right )}{\partial F\left(i,j,k,y\right)}=sgn\left(X\left(m+i,n+j,k\right)-F\left(i,j,k,t\right)\right) \tag{3}
∂ F ( i , j , k , y ) ∂ Y ( m , n , t ) = s g n ( X ( m + i , n + j , k ) − F ( i , j , k , t ) ) ( 3 )
式中sgn()代表符号函数,因此偏微分仅能取值+ 1 , 0 , − 1 +1, 0, -1 + 1 , 0 , − 1 ,这样的优化经常无法找到梯度下降最陡的方向,使得优化过程不稳定。因此,作者提出了全精度(full-precision)的梯度回传,即去掉外层的sgn函数。
另外,作者还发现输入X X X 的梯度对参数更新也很有用。由于Y Y Y 对于X X X 的偏导还会影响前面的层参数变化,因此产生的梯度值需要在[-1, 1]范围内进行截断,计算公式如下:∂ Y ( m , n , t ) ∂ X ( m + i , n + j , k ) = H T ( F ( i , j , k , t ) − X ( m + i , n + j , k ) ) (4)
\frac{\partial Y\left ( m,n,t\right )}{\partial X\left(m+i,n+j,k\right)}=HT\left(F\left(i,j,k,t\right) - X\left(m+i,n+j,k\right)\right) \tag{4}
∂ X ( m + i , n + j , k ) ∂ Y ( m , n , t ) = H T ( F ( i , j , k , t ) − X ( m + i , n + j , k ) ) ( 4 )
其中,HT()代表HardTanh函数:H T ( x ) = { x , i f − 1 < x < 1 , 1 , x > 1 , − 1 , x < − 1.
HT\left ( x\right )=\left\{\begin{matrix}
x, if -1 < x < 1,\\
1, x > 1, \\
-1, x < -1.
\end{matrix}\right.
H T ( x ) = ⎩ ⎨ ⎧ x , i f − 1 < x < 1 , 1 , x > 1 , − 1 , x < − 1 .
2.3 自适应的学习率缩放
作者分别列出了传统CNN和AdderNet之间的方差表达式(5)和(6):V a r [ Y C N N ] = ∑ i = 0 d ∑ j = 0 d ∑ k = 0 c i n V a r [ X × F ] = d 2 c i n V a r [ X ] V a r [ F ] (5)
Var\left [ Y_{CNN}\right ]=\sum_{i=0}^{d}\sum_{j=0}^{d}\sum_{k=0}^{c_{in}}Var\left [ X \times F\right ] = d^2c_{in}Var\left[X\right]Var\left[F\right] \tag{5}
V a r [ Y C N N ] = i = 0 ∑ d j = 0 ∑ d k = 0 ∑ c i n V a r [ X × F ] = d 2 c i n V a r [ X ] V a r [ F ] ( 5 ) V a r [ Y A d d e r N e t ] = ∑ i = 0 d ∑ j = 0 d ∑ k = 0 c i n V a r [ ∣ X − F ∣ ] = ( 1 − 2 π ) d 2 c i n ( V a r [ X ] + V a r [ F ] ) (6)
Var\left [ Y_{AdderNet}\right ]=\sum_{i=0}^{d}\sum_{j=0}^{d}\sum_{k=0}^{c_{in}}Var\left [ \left |X-F\right|\right ] = (1-\frac{2}{\pi})d^2c_{in}\left(Var\left[X\right]+Var\left[F\right]\right) \tag{6}
V a r [ Y A d d e r N e t ] = i = 0 ∑ d j = 0 ∑ d k = 0 ∑ c i n V a r [ ∣ X − F ∣ ] = ( 1 − π 2 ) d 2 c i n ( V a r [ X ] + V a r [ F ] ) ( 6 )
通常实践中,网络权重的方差值V a r ( F ) Var(F) V a r ( F ) 较小。因此,相比较于式(5)中V a r ( X ) × V a r ( F ) Var(X) \times Var(F) V a r ( X ) × V a r ( F ) ,AdderNet中的V a r ( X ) + V a r ( F ) Var(X) + Var(F) V a r ( X ) + V a r ( F ) 会带来更大的方差。
2.1节中提到,为了解决l 1 l_1 l 1 距离相似性度量是负数的问题,AdderNet引入了BN操作。因此,loss对于输入x i x_i x i 的求导如式(7):∂ l ∂ x i = ∑ j = 1 m γ m 2 σ B { ∂ l ∂ y i − ∂ l ∂ y j [ 1 + ( x i − x j ) ( x j − μ B ) σ B ] } (7)
\frac{\partial l}{\partial x_i}=\sum_{j=1}^{m}\frac{\gamma}{m^2\sigma _B}\left\{\frac{\partial l}{\partial y_i} - \frac{\partial l}{\partial y_j}\left[1+\frac{\left (x_i-x_j\right)\left(x_j-\mu_B\right)}{\sigma_B}\right]\right \} \tag{7}
∂ x i ∂ l = j = 1 ∑ m m 2 σ B γ { ∂ y i ∂ l − ∂ y j ∂ l [ 1 + σ B ( x i − x j ) ( x j − μ B ) ] } ( 7 )
结合式(5)~(7)可知,当Var(X)较大时,loss对于x的求导较小。根据链式法则,对于前面一层的滤波器参数的导数也就越小,具体 结果如Table1所示。
上述分析的结果表明AdderNet需要更大的学习率。由于网络中不同层的梯度大小不同,作者认为每一层都需要设定适合自身的学习率。因此,作者提出了自适应学习率缩放,对于第l l l 层的学习率计算如式(8):Δ F l = γ × α l × Δ L ( F l ) (8)
\Delta F_l=\gamma \times \alpha_l \times \Delta L\left(F_l\right) \tag{8}
Δ F l = γ × α l × Δ L ( F l ) ( 8 )
式中,γ \gamma γ 是全局学习率,Δ L ( F l ) \Delta L(F_l) Δ L ( F l ) 是第l l l 层的梯度,α l \alpha_l α l 是第l l l 层的局部学习率,它由第l l l 层元素个数和超参数η \eta η 决定,具体公式如式(9):α l = η k ∥ Δ L ( F l ) ∥ 2 (9)
\alpha_l=\frac{\eta\sqrt{k}}{\left \| \Delta L\left(F_l\right)\right \|}_2 \tag{9}
α l = ∥ Δ L ( F l ) ∥ η k 2 ( 9 )
3 Experiments
4 Q & A
这篇文章也并不是纯加法网络,还有BN层的加法需要优化
感觉文章结论部分的几幅图画的不是特别solid或者是我的水平不够,对于图2~4解释我都不是特别明了。图2作者是想证明CNN和AdderNet的中间层特征相似么?可是这么小分辨率这么模糊的特征图,怎么证明是相似的?图3是想说明什么呢?是想说明ALR方法的收敛速度更快吗?可是蓝色的ILR收敛更快啊?文中对于图3的说明似乎只是在说性能的问题,如果只是说性能,为啥要画个这么复杂的图呢?而且文中对于Loss的那幅图似乎并没有提及。图4列出了AdderNet和CNN的权重分布,这里想说明的意思是AdderNet的权重分布满足l 1 l_1 l 1 范数对应的Laplace分布,而CNN更接近l 2 l_2 l 2 范数对应的高斯分布吗?这张图的意义在哪里呢?
这篇文章的实验都是在CPU上做的,在GPU上的实验并没有给出结果,作者也说了CUDA和cuDNN的优化还没有结束。但是,这样总感觉似乎少了点什么。
暂时还没有公布预训练模型。
可以实验一下该方法移植到目标检测上的性能。