论文笔记-AdderNet: Do We Really Need Multiplications in Deep Learning?

论文信息

  • 论文标题:AdderNet: Do We Really Need Multiplications in Deep Learning?

  • 论文作者:Hanting Chen, Yunhe Wang, Chunjing Xu, Boxin Shi, Chao Xu, Qi Tian, Chang Xu

  • 研究机构:北京大学、华为诺亚实验室、悉尼大学

  • 论文出处:CVPR 2020

  • 引用信息:

    @inproceedings{DBLP:conf/cvpr/ChenWXSX0X20,
      author    = {Hanting Chen and
                   Yunhe Wang and
                   Chunjing Xu and
                   Boxin Shi and
                   Chao Xu and
                   Qi Tian and
                   Chang Xu},
      title     = {AdderNet: Do We Really Need Multiplications in Deep Learning?},
      booktitle = {2020 {IEEE/CVF} Conference on Computer Vision and Pattern Recognition,
                   {CVPR} 2020, Seattle, WA, USA, June 13-19, 2020},
      pages     = {1465--1474},
      publisher = {{IEEE}},
      year      = {2020},
      url       = {https://doi.org/10.1109/CVPR42600.2020.00154},
      doi       = {10.1109/CVPR42600.2020.00154},
      timestamp = {Sat, 22 Aug 2020 18:50:50 +0200},
      biburl    = {https://dblp.org/rec/conf/cvpr/ChenWXSX0X20.bib},
      bibsource = {dblp computer science bibliography, https://dblp.org}
    }
    
  • 代码链接:https://github.com/huawei-noah/AdderNet

论文主要贡献和参考价值

  • 主要贡献:

  • 参考价值:

    论文要点翻译

    • 摘要
      • 和开销较小的加法操作相比,乘法操作具有更高的计算复杂性。在深度神经网络中广泛使用的卷积操实际上是在衡量输入特征和卷积核之间相似性的交叉相关操作,这主要通过大量的浮点数乘法计算实现
      • 本文提出加法器网络 AdderNet 用于减少乘法操作带来的开销,在加法器网络中,利用核和输入特征之间的 ℓ 1 \ell_1 1 距离作为其输出的响应,这样新的相似度衡量方式带来的好处在于可以优化神经网络
      • 为了达到更好的效果,本文实现了专门的反向传播算法,主要利用全精度的梯度进行计算,然后本文提出是影响的学习率调整策略用于根据每个神经元梯度增强学习过程
      • 实验结果说明,提出的 AdderNet 在 ImageNet 数据集上使用 resnet-50 作为骨干网络,且卷积层不使用乘法操作,最终达到 74.9% 的 top-1 精确性和 91.7% 的 top-5 精确性
    • 引言
      • GPU 的出现使得有上十亿浮点乘法的卷积神经网络得到加速,并用于图像分类、目标识别、分割、人脸验证等领域,但是这些计算用的高端显卡都需要极大的电源功率开销,使得这些模型难以部署到便携的移动设备中。现有的 GPU 卡难以挂到移动设备,研究高效的 DNN 是有必要的,可以使得模型在可负担的计算开销范围内在移动设备上运行
      • 加减乘除是数学中的基本运算,乘法是比加法慢得多的运算,但是现有的许多 DNN 的基本操作都是乘法运算,如果能够乘法转换为加法操作,则可以加速神经网络的学习过程。已有工作中,seminal work 讲网络权重设置为二值的 -1 或者 1 使得乘法变成累加操作,也有的通过二值操作进行近似的卷积
      • 虽然 DNN 滤波器的二值化可以显著减少计算开销,但是原始的识别精度通常无法保留,此外,二值网络的训练通常是不稳定的,而且学习速率小时收敛速度很慢。实际上,经典的 CNN 中的卷积操作是用来衡量两个输入相似性的互相关操作,研究者们已经习惯于将卷积作为默认提取视觉特征的操作,引入许多方法加速神经网络,甚至通过牺牲网络能力的方式进行网络加速,但是还是几乎没有将原有的神经网络的卷积操作替换成为其他的更高效的操作。实际上,加法比起乘法来说计算的复杂度要小得多,因此,本文受到这个启发,将卷积神经网络中的乘法操作替换为加法操作
      • 本文提出加法器网络,最大化加法的使用,替换原有的卷积操作。给定一系列小的作为滤波器的输入,衡量输入信号和模板之间的 ℓ 1 \ell_1 1 距离,这个距离可以作为高效的衡量差异的度量。由于减法操作可以简单通过加法操作将其中的一个操作数使用补码表示实现,因此,这个距离可以成为一个高效的替换卷积的神经网络操作的方式,本文还设计了一个改进的反向传播方案,利用正则化的梯度保证足够的更新,也促进了网络的收敛,提出的 AdderNet 通过实验验证可以达到传统的 CNN 达到的精度
    • 相关工作
      • 减少 CNN 计算开销的相关工作
      • 移除冗余的权重、压缩加速神经网络;将权重矩阵进行奇异值分解;转换到 DCT 频域等
    • 方法
      • 考虑滤波器 F ∈ R d × d × c i n × c o u t F \in \mathbb R^{d \times d \times c_{in}\times c_{out}} FRd×d×cin×cout 其中的 d 是操作核大小,输入特征定义为 X ∈ R H × W × c i n X \in \mathbb R^{H \times W \times c_{in}} XRH×W×cin 输出 Y Y Y 是滤波器和输入特征之间的相似性 S ( ⋅ , ⋅ ) S(\cdot,\cdot) S(,),即: 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\limits_{i=0}^{d}\sum\limits_{j=0}^{d}\sum\limits_{k=0}^{c_{in}}S(X(m+i,n+j,k),F(i,j,k,t)) Y(m,n,t)=i=0dj=0dk=0cinS(X(m+i,n+j,k),F(i,j,k,t))
      • 加法器网络
        • ℓ 1 \ell_1 1 距离用于计算两个向量表示之间的绝对值差之和,,即上述的相似性可以替换,得到 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\limits_{i=0}^{d}\sum\limits_{j=0}^{d}\sum\limits_{k=0}^{c_{in}}|X(m+i,n+j,k)-F(i,j,k,t)| Y(m,n,t)=i=0dj=0dk=0cinX(m+i,n+j,k)F(i,j,k,t)
        • 虽然上述 Y 的公式和互相关都可以表示相似性,但是两者输出有所不同,卷积核的输出是特征图的加权和,可能为正也可能为负,而加法器滤波器中的输出始终为负数,因此本文使用调整的 BN 层,将输出层正则化到合适的范围内,而 CNN 中的激活函数都可以直接用于 adderNet,虽然激活函数中包含乘法操作,但是总的开销还是显著小于卷积层的,因此可以忽略不计。考虑卷积核 F ∈ R d × d × c i n × c o u t F \in \mathbb R^{d \times d \times c_{in}\times c_{out}} FRd×d×cin×cout 和输入 X ∈ R H × W × c i n X \in \mathbb R^{H \times W \times c_{in}} XRH×W×cin 以及输出 Y ∈ R H ′ × W ′ × c o u t Y \in \mathbb R^{H^{'} \times W^{'} \times c_{out}} YRH×W×cout,则卷积和 BN 的计算复杂度分别为 O ( d 2 c i n c o u t H W ) \mathcal O(d^2c_{in}c_{out}HW) O(d2cincoutHW) O ( c o u t H ′ W ′ ) \mathcal O(c_{out}H^{'}W^{'}) O(coutHW) ,例如给定输入的通道数为 512,核大小为 3,则卷积的操作是 BN 的 4068 倍左右,由于现有的 CNN 中广泛使用 BN,因此把其中的卷积操作直接替换为加法器层次即可实现推理的加速并减少能源开销
      • 优化
        • 神经网络利用反向回传计算滤波器梯度并通过随机梯度下降更新权重,在 CNN 中,输出的偏导数的计算为 ∂ Y ( m , n , t ) ∂ F ( i , j , k , t ) = X ( m + i , n + j , k ) \frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)}=X(m+i,n+j,k) F(i,j,k,t)Y(m,n,t)=X(m+i,n+j,k)
        • 加法器中的偏导数计算为 ∂ Y ( m , n , t ) ∂ F ( i , j , k , t ) = s g n ( X ( m + i , n + j , k ) − F ( i , j , k , t ) ) \frac{\partial Y(m,n,t)}{\partial 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)) 其中的 s g n ( ⋅ ) sgn(\cdot) sgn() 表示符号值,取 +1、0 或者 -1
        • 其中的对于输入特征图的偏导数有所不同,需要考虑不同层之间,因此 ∂ Y ( m , n , t ) ∂ X ( m + i , n + j , k ) = H T ( F ( i , j , k , t ) − X ( m + i , n + j , k ) ) \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)) X(m+i,n+j,k)Y(m,n,t)=HT(F(i,j,k,t)X(m+i,n+j,k)),其中,HT 表示的是 HardTanh 函数,即当 − 1 < x < 1 -1<x<1 1<x<1 H T ( x ) = x HT(x)=x HT(x)=x,当 x > 1 x>1 x>1 H T ( x ) = 1 HT(x)=1 HT(x)=1,当 x < − 1 x<-1 x<1 H T ( x ) = − 1 HT(x)=-1 HT(x)=1
      • 适应地学习率调整
        • 传统 CNN 中,假设权重和输入特征图是独立同分布的正态分布,则输出的方差可以表示为 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 ] Var[Y_{CNN}]=\sum\limits_{i=0}^{d}\sum\limits_{j=0}^{d}\sum\limits_{k=0}^{c_{in}}Var[X\times F]=d^2c_{in}Var[X]Var[F] Var[YCNN]=i=0dj=0dk=0cinVar[X×F]=d2cinVar[X]Var[F]
        • 对于 AdderNet, 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 ] = π 2 d 2 c i n ( V a r [ X ] + V a r [ F ] ) Var[Y_{AdderNet}]=\sum\limits_{i=0}^{d}\sum\limits_{j=0}^{d}\sum\limits_{k=0}^{c_{in}}Var[X- F]=\sqrt{\frac{\pi}{2}}d^2c_{in}(Var[X]+Var[F]) Var[YAdderNet]=i=0dj=0dk=0cinVar[XF]=2π d2cin(Var[X]+Var[F])
        • BN:给定小批量 B = { x 1 , … , x m } \mathcal B=\{x_1,\ldots,x_m\} B={x1,,xm} 则 BN 可以表示为 y = γ x − μ B σ B + β y = \gamma \frac{x-\mu_{\mathcal B}}{\sigma_{\mathcal B}}+\beta y=γσBxμB+β,其中 μ B = ( ∑ i x i ) / m \mu_{\mathcal B}=(\sum_ix_i)/m μB=(ixi)/m σ B 2 = ( ∑ i ( x i − μ B ) 2 ) / m \sigma_{\mathcal B}^2=(\sum_i(x_i-\mu_{\mathcal B})^2)/m σB2=(i(xiμB)2)/m
        • 则损失 ℓ \ell x x x 的梯度可以计算 ∂ ℓ ∂ x i = ∑ j = 1 m γ m 2 σ B { ∂ ℓ ∂ y i − ∂ ℓ ∂ y i [ 1 + ( x i − x j ) ( x j − μ B ) σ B ] } \frac{\partial \ell}{\partial x_i}=\sum_{j=1}^m\frac{\gamma}{m^2\sigma_{\mathcal B}}\{\frac{\partial \ell}{\partial y_i}-\frac{\partial \ell}{\partial y_i}[1+\frac{(x_i-x_j)(x_j-\mu_{\mathcal B})}{\sigma_{\mathcal B}}]\} xi=j=1mm2σBγ{yiyi[1+σB(xixj)(xjμB)]}
        • 每个加法器层的损失更新 Δ 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 层的梯度, α l \alpha_l αl 是局部学习率 α l = η k ∥ Δ L ( F l ) ∥ 2 \alpha_l=\frac{\eta \sqrt{k}}{\|\Delta L(F_l)\|_2} αl=ΔL(Fl)2ηk
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值