[CVPR2020] AdderNet阅读笔记

AdderNet是北大和华为诺亚方舟实验室共同完成的一篇文章,被CVPR2020收录为Oral representation.

1 Introduction

  深度神经网络中会使用大量的浮点数乘法运算,这些运算可以在GPU上进行提速并在多个计算机视觉领域取得了进步。但是GPU的高功率消耗使得一些算法无法应用在移动端。并且,虽然GPU只占用很小的卡片体积,但是它还需要很多额外支撑的硬件。因此,本文研究的是可以使用在移动端设备上的神经网络结构。
  加减乘除是四种基本运算,并且加法比乘法速度更快。但是,目前深度神经网络中大量的运算是乘法运算。因此,目前的一个研究方向是对网络进行二值化,这样可以将乘法变成累加的运算,如BinaryConnect是对权值进行二值化,BNNs还对CNN中的激活值进行了归一化,Rastergari等对二值网络的优化进行了改进。
  二值化网络可以减少计算消耗,但是也会牺牲性能,并且训练的过程不稳定,收敛速度较慢。为了解决这个问题,本文作者分析了CNN中的卷积运算,发现该运算实际上就是计算输入和滤波器权重的相似性。因此,本文主要研究了使用加法运算替代卷积运算中乘法运算的可行性。
  这篇文章提出AdderNet,最大限度地使用加法运算替代卷积运算。首先,文章提出使用 l 1 l_1 l1距离度量输入和滤波器权重之间的相似性, l 1 l_1 l1距离使用了加法运算(实际上是减法,但减法就是加上被减数的反码),因此该方法可以更有效率地构建神经网络。其次,针对 l 1 l_1 l1距离的计算方法,本文还提出了一种基于正则化梯度的反向传播算法,该算法可以保证参数的充分更新。再次,本文根据正则化梯度的特性,提出了自适应的学习率缩放策略,该策略可以加快网络的收敛速度。最后,AdderNet在多个数据集上均加快了推理速度,并且取得了和传统CNN相近的性能。
  本文的贡献如下:(1)提出了 l 1 l_1 l1距离相似度度量替代卷积操作中的乘法相似度度量,这样可以使用加法替代大部分乘法操作,降低了计算资源的消耗。(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=0dj=0dk=0cinS(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 l1距离度量相似性,具体方法如式(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=0dj=0dk=0cinX(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)=sgn(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)=HT(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. HT(x)=x,if1<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} Var[YCNN]=i=0dj=0dk=0cinVar[X×F]=d2cinVar[X]Var[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} Var[YAdderNet]=i=0dj=0dk=0cinVar[XF]=(1π2)d2cin(Var[X]+Var[F])(6)
通常实践中,网络权重的方差值 V a r ( F ) Var(F) Var(F)较小。因此,相比较于式(5)中 V a r ( X ) × V a r ( F ) Var(X) \times Var(F) Var(X)×Var(F),AdderNet中的 V a r ( X ) + V a r ( F ) Var(X) + Var(F) Var(X)+Var(F)会带来更大的方差。
   2.1节中提到,为了解决 l 1 l_1 l1距离相似性度量是负数的问题,AdderNet引入了BN操作。因此,loss对于输入 x i x_i xi的求导如式(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} xil=j=1mm2σBγ{yilyjl[1+σB(xixj)(xjμ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} ΔFl=γ×αl×ΔL(Fl)(8)
式中, γ \gamma γ是全局学习率, Δ L ( F l ) \Delta L(F_l) ΔL(Fl)是第 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(Fl)ηk 2(9)

3 Experiments

在这里插入图片描述
在这里插入图片描述

4 Q & A

  1. 这篇文章也并不是纯加法网络,还有BN层的加法需要优化
  2. 感觉文章结论部分的几幅图画的不是特别solid或者是我的水平不够,对于图2~4解释我都不是特别明了。图2作者是想证明CNN和AdderNet的中间层特征相似么?可是这么小分辨率这么模糊的特征图,怎么证明是相似的?图3是想说明什么呢?是想说明ALR方法的收敛速度更快吗?可是蓝色的ILR收敛更快啊?文中对于图3的说明似乎只是在说性能的问题,如果只是说性能,为啥要画个这么复杂的图呢?而且文中对于Loss的那幅图似乎并没有提及。图4列出了AdderNet和CNN的权重分布,这里想说明的意思是AdderNet的权重分布满足 l 1 l_1 l1范数对应的Laplace分布,而CNN更接近 l 2 l_2 l2范数对应的高斯分布吗?这张图的意义在哪里呢?
  3. 这篇文章的实验都是在CPU上做的,在GPU上的实验并没有给出结果,作者也说了CUDA和cuDNN的优化还没有结束。但是,这样总感觉似乎少了点什么。
  4. 暂时还没有公布预训练模型。
  5. 可以实验一下该方法移植到目标检测上的性能。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值