現在的卷積神經網絡(CNN)的卷積操做中包含了大量的乘法,雖然已經有不少輕量級的網絡(如MobileNet)提出來,可是乘法的開銷依舊是難以忽視的,要在輕量級設備本地進行深度學習應用,須要使得計算速度進一步加快,因而本論文提出了使用加法操做代替乘法操做,本論文的做者是Hanting Chen,Yunhe Wang,Chunjing Xu,Boxin Shi,Chao Xu,Qi Tian,Chang Xu。是CVPR2020上華爲諾亞實驗室和北京大學合做的一篇文章。
論文指出傳統卷積操做其實就是使用的一種互相關操做來衡量輸入特徵和卷積核之間的類似度,而這個互相關的操做就引入了不少乘法操做,所以文章提出另外一種方式來衡量輸入特徵和卷積核之間的類似度,這個方法就是L1距離。算法
原論文網絡
假設$F \in R^{d \times d \times c_in \times c_{out}}$,F是網絡中間某層的過濾器,過濾器大小爲d,輸入有$c_{in}$個通道,輸出有$c_{out}$個通道。輸入的特徵定義爲$X \in R^{H \times W \times c_{in}}$,其中H和W對應着特徵的高和寬。則輸出的Y有如下式子$$Y(m,n,t) = \sum_{i=0}^n \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$,那麼這個公式就變成了傳統卷積神經網絡中的卷積操做。ide
前面提到過要用L1距離代替互相關操做,那麼上述公式就變成$$Y(m,n,t) = - \sum_{i=0}^n \sum_{j=0}^d \sum_{k=0}^{c_{in}}|X(m+i,n+j,k)-F(i,j,k,t)|$$這裏做者提到了這樣的操做得出的結果都是負值,可是傳統卷積網絡獲得的輸出值則是有正有負,可是在輸出層後緊接着一個BN層咱們可讓輸出分佈在一個合理的範圍。函數
在傳統卷積網絡中Y關於F的反向傳播公式以下$$\frac{\partial Y(m,n,t)}{\partial F(i,j,k,t) } = X(m+i,n+j,k)$$在加法網絡中,使用了L1距離的反向傳播公式以下$$\frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = sgn(X(m+i,n+j,k) - F(i,j,k,t))$$文章中說L1距離反向傳播的這種signSGD並不能沿着最好的方向降低,有時候還會選擇比較糟糕的方向,所以論文中把反向傳播公式變成L2距離的反向傳播,叫作全精度梯度$$\frac{\partial Y(m,n,t)}{\partial F(i,j,k,t) } = X(m+i,n+j,k) - F(i,j,k,t)$$同時再考慮Y對X的導數,根據鏈式法則,$\frac{\partial Y}{\partial F_i }$只跟$F_i$本身有關,而$\frac{\partial Y}{\partial X_i }$的梯度值還會影響前一層的值,做者指出這種全精度梯度傳播會產生梯度爆炸,因而使用一個HT函數把梯度截斷在[-1,1]裏,既$$\frac{\partial Y(m,n,t)}{\partial X(m+i,n+j,k) } = HT(F(i,j,k,t) - F(i,j,k,t))$$其中HT表明着HardTanh函數$$HT(x) = x\quad if -1<x<1$$$$HT(x) = 1 \quad x>1$$$$HT(x)=-1\quad x<-1$$性能
在加法網絡中,每一層輸出後面也跟着一層BN層,雖然BN層帶來了一些乘法操做,可是這些操做的量級比起經典卷積網絡的乘法數量就能夠忽略不計。給定一個mini-batch B={x1,...,xm},BN層作了以下操做$$y = \gamma \frac{x-\mu_B}{\sigma_B}+\beta$$$$\mu=\frac{1}{m}\sum_ix_i$$$$\sigma_B^2=\frac{1}{m}\sum_i(x_i-\mu_B)^2$$該層主要就是處理這個mini-batch的數據集使它均值等於0,方差等於1。那麼加上了BN層後l關於x的偏導爲$$\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_j}[1+\frac{(x_i-x_j)(x_j-\mu_B)}{\sigma_B}]\}$$根據鏈式法則,每一層的權重的梯度都受到上一層$x_i$梯度的影響,根據上述公式$x_i$的梯度很大程度取決於$\sigma_B$,即BN處理前$x_i$的標準差。論文中給出了粗略的輸出Y的方差計算,傳統神經網絡輸出方差爲$$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]$$而在加法網絡中方差變爲$$Var[Y_{CNN}]=\sum_{i=0}^d \sum_{j=0}^d \sum_{k=0}^{c_{in}}Var[|X-F|]=(1-\frac{2}{\pi})d^2c_{in}(Var[X]+Var[F])$$根據以往經驗,$Var[F]$在普通CNN網絡中很是的小,只有$10^{-3}$或者$10^{-4}$。所以傳統CNN中$Var[Y]$方差要比加法網絡中$Var[Y]$大不少。以前提到權重梯度取決於標準差,所以用了BN層的加法網絡中權重梯度會很小,下表是個對比圖片除顯示出梯度較小以外,還展現出有些層可能值不在一個量級,所以使用全局統一的學習率變得再也不合適,因此論文中使用了一種自適應學習率的方法,使得學習率在每一層都不同。它的公式計算表示爲$$\Delta F_l = \gamma \times \alpha_l \times \Delta L(F_l)$$其中$\gamma$是全局學習率,而$\alpha_l$則是每層的學習率。$$\alpha_l = \frac{\eta \sqrt k}{\parallel \Delta L(F_l) \parallel _ 2}$$k表明$F_l$中元素的個數,$\eta$則是一個超參數。有了這樣的學習率調整,在每層中都能自動適應當層的狀況進行學習率的調整。學習
上面就是本篇論文提出的全部新東西與新設計,文章中也給出了加法網絡前向和後向傳播的流程描述優化
實驗數據和結果對比見原論文idea