AdderNet: Do We Really Need Multiplications in Deep Learning?
作者團隊: 北京大學 & 華爲諾亞實驗室
0.相關資源
論文地址:arvix (如果arvix速度過慢,推薦使用中科院的鏡像鏈接:cn.arvix)
開源代碼: github
知乎關於論文的討論:
1. TL; DR
這是一篇CVPR2020的論文,作者針對神經網絡中大量的乘法的問題設計了修改思路,提出了一種新的加法網絡結構AdderNet。
將卷積網絡中的乘法規則變成加法,需要對網絡中的多種規則進行修改:
- 使用L1距離作爲各層卷積核與輸入特徵之間輸出的計算方法,並詳盡分析了這種近似方法對神經網絡的影響。(詳見3.2)
- 爲AdderNet設計了一種改進的帶正則梯度的反向傳播算法。(詳見3.3)
- 提出一種針對神經網絡每一層數量級不同的適應性學習率調整策略。(詳見3.4)
實驗結果表明,在ImageNet上使用ResNet-50可以達到SOTA的效果。但作者並沒有給出實際運行時間或運行效率的對比結果。
2. Motivation
我們都知道,在計算機的計算單元裏,浮點數的乘法計算複雜度比加法高得多,正式由於大量的乘法運算,也限制了它在移動設備上大規模使用的可能性。這是因爲雖然GPU本身是一張卡中很小的一部分,但是仍然需要許多其他的硬件來支撐它的使用,如存儲芯片、能源器件等,因此,神經網絡需要儘可能地減少其計算開銷。
對於這種思想,開創性的工作是Matthieu等人提出的二值網絡1,此後有衆多學者提供了針對二值網絡的參數優化改進方法。但是這些網絡最大的問題就在於無法達到理想的效果,並且在訓練的過程中無法保證穩定。
因此,作者希望設計一種基於加法的網絡,在保證計算不包括乘法運算的同時減小二值網絡中精度的損失。
3. Model
3.1. L1距離的可視化分析
作者首先討論了使用L1距離的合理性。在對AdderNets和CNN的特徵圖可視化中(圖1),可以看到CNN中不同的類別根據之間的角度進行區分(Softmax),而相反,在AdderNets中會根據類的中心點聚成一簇。這就說明了L1距離能夠作爲一個合適的指標去量化特徵值和輸入之間的距離。
3.2. Adder Networks
對於原始的CNN一層卷積運算,我們假定是卷積核,是輸入特徵,是輸出特徵,那麼相互之間的計算關係可以表示爲:
其中是一種定義好的相似性度量方法。如果是互相關函數(cross correlation),則,這個時候就是卷積的操作。
如果將這裏的互相關替換成L1距離,那麼上面的公式就變成了:
其中的減法在運算中可以用補碼的方式轉化爲加法,這樣就能夠得到不包含乘法運算的相似性度量方法。
這裏需要注意的是,由於經過上述處理後的輸出均爲負數,作者把輸出的結果過了一層BN,雖然這裏的BN需要乘法運算,但是運算量相較於卷積中的運算可以忽略不計。
3.3. 優化方法
在CNN中,輸出層對卷積核求偏導爲:
一般採用SGD去更新這些參數。
而在AdderNet中,這個偏導爲:
其中是符號函數。
然而這個導數只能通過signSGD2進行更新,但signSGD會隨着特徵維數的增加而降低性能,並且永遠不會沿着最陡的方向下降,並不適用於此。因此,作者採用了一種替代的方法(full-precision gradient),即去掉外層函數:
然而這樣對輸入特徵的梯度計算存在問題:如果使用full-precision gradient計算,那麼在反向傳播過程中,當每一級的梯度均大於+1或小於-1時,就會不可避免的造成梯度爆炸問題。因此,還需要對梯度的值進行約束。作者這裏採用的方法是採用裁剪函數,當梯度值不在範圍內,就裁剪到邊界值,即HardTanh函數:
修改後的對輸入特徵的梯度變爲:
3.4. 學習率調整方法
首先通過對CNN和AdderNet的輸出方差計算:
實際上的值非常小,對普通的CNN大概在或這個量級,這樣AdderNet的輸出方差就遠大於CNN的。
根據梯度傳播的公式可以知道這時AdderNet的梯度遠小於CNN的。作者在LeNet-5中測試兩種網絡的梯度大小,如圖2所示。
可以看到在AdderNet中卷積核的梯度遠小於CNN中的,這可能會導致在訓練AdderNet過程中參數更新過慢。
最直觀的解決方法就是給AdderNets一個比較大的學習率,然而可以看到圖2中,AdderNets的每一層梯度差距比較大,同樣的速率可能不能適合所有的層,因此需要對每一層設定不同的學習率,每一層更新的計算方法即:
其中是用於控制全局的學習率(如adder和BN層),是層的梯度,並且類似於RMSProp中的學習率調整,採用的策略是根據卷積核中梯度的L2正則:
其中k是卷積核中元素的個數,用於平均L2正則的值,是用於控制adder單元學習率的超參。
3.5. 算法流程
4. Experiment
4.1. 分類任務上的性能對比
從上面兩個結果可以看到AdderNet在圖像分類任務上可以在不做乘法運算(BN層忽略不計)基礎上達到接近CNN的結果。
4.2. 可視化結果
可以看到雖然使用不同的距離度量指標,其中仍然有許多相似的特徵模塊,也證明了AdderNets能夠很有效地從圖像中提取信息。
除此之外,作者可視化了LeNet-5-BN網絡中第三層參數的分佈,如圖7所示。
可以看到經過L1正則的AdderNet參數服從拉普拉斯分佈(Laplace Distribution),經過L2正則的CNN參數服從高斯分佈(Gaussian Distribution)。
4.3. 消融實驗
在這裏作者討論了求梯度的兩種方法full-precision grad(FP)和sign grad(Sgn),及學習率調整的兩種方法Adaptive learning rate(ALR)和Increased learning rate(ILR)的訓練情況,如圖8所示。
從上面的acc及loss的變化來看,ILR能夠更快地讓網絡達到比較好的效果,但在訓練後期會出現瓶頸無法提高,而ALR波動較大,但能隨着epoch的增長達到更好的效果;梯度計算方法上,FP顯著優於Sgn。
5. Thoughts
-
這篇文章突破了傳統卷積需要大量乘法導致計算困難的問題,如果這種網絡在大部分CV任務上都能夠達到SOTA,就很有可能替代傳統的乘法網絡。
-
個人認爲,本文中的一些優化的方法比較簡單粗暴,比如對full-precision gradient可能會造成梯度爆炸問題的優化方法是直接採用HardTanh函數去裁剪。對這些問題的優化方法是否還可以挖掘更深的理論討論空間?
-
另外,在Reddit論壇中討論的比較厲害的一個問題就是本篇核心在於用加法來優化網絡的運行效率,但是在結果中並沒有給出實際的運行時間。不知道是作者疏忽了還是實際加法網絡在現有的環境下依然有其他耗時瓶頸。
Reference
Matthieu Courbariaux, Yoshua Bengio, and Jean-Pierre David. Binaryconnect: Training deep neural networks with binary weights during propagations. In NeuriPS, pages
3123–3131, 2015. ↩︎Jeremy Bernstein, Yu-Xiang Wang, Kamyar Azizzade- nesheli, and Anima Anandkumar. signsgd: Compressed optimisation for non-convex problems. arXiv preprint arXiv:1802.04434, 2018. ↩︎