論文閱記 【CVPR2020】 AdderNet: Do We Really Need Multiplications in Deep Learning?


論文題目: AdderNet:Do We Really Need Multiplications in Deep Learning?

文獻地址:https://arxiv.org/pdf/1912.13200v3.pdf

源碼地址:https://github.com/huawei-noah/AdderNet(Pytorch 版)

  

  從論文題目中可以意會出這篇paper是要將CNN網絡中乘積操作盡可能的全部替換為加法操作,也就是對CNN操作的改進,而不是提出某種網絡結構。當然,改進的效果需要達到和CNN差不多的精度或者更好的精度

  眾所周知,在硬件平台中,加法操作相對於乘法操作都要更容易更省時。在ARM中,進行一個乘法操作就會帶來1μs的時間消耗。由於FPGA中運算的高速並發,才使得深度學習在硬件平台中移植成為了可能。雖然現在各種專用AI芯片、FPGA都對深度學習任務做了優化,算浮點乘法並不一定與加法消耗資源相差太大但使用AdderNet可以減少芯片,板子的成本,同時可以應用於更輕巧的移動設備中

AdderNet應用中的效果

  從CIFAR數據集和ImageNet數據集的實驗結果可以看出,AdderNet減少了網絡中的乘法操作的計算量,降低了計算能耗。但與CNN相比,雖然精度在數量級上差不多,但還是會存在少量的精度丟失。這其實在某一方面也對應了作者的題目,在深度學習中是否需要乘法?作者將這個問題拋出來,供專家、學者實踐驗證。

但值得注意的是, Doesn't AdderNet use multiplication at all? The answer is No.

卷積運算在深度學習中面臨的問題

  與廉價的加法運算相比,乘法運算具有更高的計算復雜度深度神經網絡廣泛使用卷積操作,卷積操作中使用互相關來度量輸入特征與卷積濾波器之間的相似性,包含大量的浮點運算。作者針對神經網絡中大量的乘法的問題設計了修改思路,提出了AdderNets的卷積方式,使用加法運算降低運算成本。

將CNN卷積過程中的乘法操作換為加法操作,需要對模型訓練的多種規則進行修改:

  1. 使用L1距離作為各層卷積核與輸入特征相互作用的計算方式;
  2. 設計了改進的包含正則的梯度計算方式;
  3. 提出了一種針對各層學習率的自適應策略。

  

  隨着圖形處理單元(GPU)的出現,具有數十億個浮點數乘法的深度卷積神經網絡(CNNs)可以加速並在各種計算機視覺任務中取得重要進展。例如:圖像分類、目標檢測、分割以及人臉驗證。而這些高能耗的GPU設備難以部署到移動設備從而限制了先進的深度學習系統的應用(RTX 2080Ti, 250W +)。【現有的GPU不夠輕巧,不能輕易的安裝在移動設備上,雖然GPU本身是一張卡中很小的一部分,但是仍然需要許多其他的硬件來支撐它的使用,如存儲芯片、能源器件等】。這也是為什么要研究更加高效的深度神經網絡,從而使模型可以在負擔的起的移動設備資源上運行。

  簡而言之,雖然GPU可以滿足大量浮點數乘法的運算,但由於GPU不夠輕巧,難以安裝在更加輕巧的移動設備上,使應用場景有一定限制。

  二值化的卷積核可以顯著的減少計算消耗,但原來的識別精度將無法保持。此外,二值網絡的訓練過程不穩定

實現思路

1. 卷積操作的替代品 -- L1距離

  直觀理解

   首先,作者對使用L1距離代替卷積操作的合理性進行了可視化的展示。如下圖所示,左圖是使用L1 距離的AdderNet, 右圖為使用CNN卷積操作。不難看出,CNN中根據不同的類別特征的角度進行區分;AdderNets中是根據類的中心點,不同的類別聚成一簇。從特征的分布圖可以直觀的說明,L1距離能夠作為一個合適的指標去量化特征值和輸入之間的距離

  理論理解

  對於卷積操作,假定F是卷積核,X為輸入特征,Y為輸出特征,那么卷積操作的計算可以定義為如下操作。直覺上,下式的形式與模板匹配很像,F相當於模板整個過程相當於計算輸入特征X與F的相似匹配程度

其中,S( · )為預定義的相似度量方式。如果S為乘法操作,上式就是卷積操作的方式,而乘法操作構成的上式正好是L2-范數的表達,也就是說CNN是L2-范數如果d=1,就是全連接操作

  通過上式和之前的描述,作者的意圖是尋找一個距離指標S,而這個S操作基本上不用或者少用乘法

  不難想象,可以嘗試使用L1-范數來代替L2-范數。恰好,作者便是使用L1-范數距離作為預定義的相似度量方式S,如下式所示:

其中的減法在運算中可以用補碼的方式轉化為加法,這樣就能夠得到不包含乘法運算的相似性度量方法。

  卷積核通過權重作用於特征值再加和的方式,其輸出可能是正值也可能是負值。而adder核的輸出總是負值。因此,作者使用BN操作,這樣可以使adder操作規范化到一定的范圍這樣,所有的激活函數便都可以作用於adderNets上(否則還要設計激活函數)。雖然BN操作中包含乘法運算,但是運算量相較於卷積中的運算可以忽略不計。

  CNN和AdderNet的計算復雜度可以分別表示為:

2. 優化方法

sgn(·) --》 full precision gradient(無sgn) --》 Hard-Tanh(full-precision gradient)

  在CNN中,輸出特征Y對卷積核F的偏導數如下式所示(乘法求偏導)。

  在AdderNets中,偏導為:

其中,sgn( · )為信號函數,使得梯度只有可能是±1和0。

  然而,上述偏導只能通過signSGD進行更新,然而,signSGD不會沿着梯度最陡峭的方向下降,並且性能會隨着維度的增大而下降。因此,作者認為signSGD不適合用於具有大量參數的神經網絡。因此,作者又選取了一種替代方式 ---- full precision gradient。 從形式上看,即為去掉外層的sgn( · ):

  然而,采用full precision gradient的方式也會帶來一個問題,full-precision gradient的值有可能比1大或者比-1小,這樣的梯度在鏈式求導法則中極易造成梯度爆炸的現象。

  由於鏈式求導法則,梯度不僅僅影響當前層卷積核Fi本身,還會影響之前的層。

  因此, 還需要對梯度值進行約束,作者采用HardTanh粗暴的對梯度值進行截斷,最終梯度的形式

其中,HT( · )表示HardTanh函數,具體表達形式如下:

這里關於梯度的描述中,可以感覺到反向傳播過程中,可以不嚴格按照求偏導的方式進行

3. 自適應學習率

  首先,作者比較了CNNs和AdderNets輸出的方差【訓練發生的偏移-- BN來解決】:

  實際中,權重的方差Var[F]的值通常特別小,在CNN中大約是10^-3 或者 10^-4這樣的數量級。這樣,比較上述CNN和AdderNet的方差,CNN中Var[X]乘以Var[F]這樣特別小的值,其方差的輸出要比AdderNet中Var[X] + Var[F]這樣特別小的值要小的多。也就是說,AdderNet輸出的方差要比CNN的大得多【AdderNet輸出具有大方差。 --添加BN

  為了促進激活函數的功能,在每一層后都添加BN操作:

其中,γ和β是訓練的超參數;μ和σ分別代表輸入的均值和方差。

  因此,梯度的公式可以計算為:

  可以看出,AdderNet的梯度遠小於CNN。作者在MNIST數據集中對比了AdderNet和CNN前三層的梯度,如下表所示。梯度值小會造成卷積核參數更新緩慢

  對於這樣的問題,一個很直接的想法就是采用一個較大的學習率。然而從表1中可以看出,Adder Net中不同層之間的梯度相差較大,因此,難以使用統一的學習率。也就是說,需要針對各層設計自適應的學習率。每一層學習率更新的方式:

其中,γ是全局學習率;ΔL(Fl)是第l層的梯度;αl是l層的學習率。

  αl的確定是通過卷積核中的參數量確定的:

其中,k表示卷積核中的參數量;η表示是用於控制adder單元學習率的超參數。

  前向和反向的計算過程如下所示:

  

  對各卷積核進行可視化:

  從卷積核的可是化來看,AdderNet的卷積核與CNNs一致,並不是二值化的網絡。

  權重分布可視化

  AdderNet服從拉普拉斯分布,CNN服從高斯分布。

總結

  AdderNets與卷積神經網絡(CNNs)非常相似,卷積神經網絡通過卷積核從輸入數據或者圖像中提取特征。現在為了找出與CNN的不同之處,CNN相當於使用L2-范數,它要求浮點值之間進行大量的乘法運算,使得計算成本高。但是L2-范數不是確定兩個向量距離的唯一方法。AdderNets中使用了另一種類型的范數:向量的L1-范數來找出輸入特征和濾波器之間的區別,使用減法代替了卷積操作中的乘法。由於L1-范數在向量分量之間使用減法(加法的補碼),所以AdderNet的計算成本相對於CNN而言是非常低的。而設計的特殊的反向傳播方法全精度梯度和自適應學習率會使得AdderNet更加高效。

  AdderNet中並沒有完全不使用乘法操作,BN操作中包含乘法操作,只不過相對於CNNs中的乘法操作的數量來說,是可以忽略不計的。

  只不過... 在AdderNet中關於梯度和自適應學習率的設計的改進,雖然有可圈可點之處,但處理方式上未免有些"拿來主義"的暴力解決。畢竟是實習生領銜打造,改進風格上讓我想起了我讀研時發的那篇SCI...

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM