不用乘法做深度學習,性能不輸CNN,北大、華為等提出AdderNet

量子位 發佈 2020-01-07T09:01:20+00:00

曉查 發自 凹非寺 量子位 報導 | 公眾號 QbitAI在深度學習里,乘積是個避免不了的運算,比如做圖像識別的卷積層,就需要做大量的乘法。但是,與加法運算相比,乘法運算的計算複雜度高得多。

曉查 發自 凹非寺
量子位 報導 | 公眾號 QbitAI

在深度學習里,乘積是個避免不了的運算,比如做圖像識別的卷積層,就需要做大量的乘法。

但是,與加法運算相比,乘法運算的計算複雜度高得多。

現在的深度學習在很大程度上依賴於GPU硬體,做大量的乘法運算,限制了它在移動設備上的應用,需要一種更高效的方法。

如果能夠拋棄乘法運算,是不是會讓代碼運行速度更快呢?

來自北京大學、華為諾亞方舟實驗室、鵬城實驗室的研究人員提出了一種加法器網絡AdderNet,去掉卷積乘法,並設計一種新的反向傳播算法,結果也能訓練神經網絡。

而且實驗結果證明了,這種方法在MNIST、CIFAR-10、SVHN上已經接近傳統CNN的SOTA結果。

加法網絡早已有之

早在2015年,Bengio等人就提出了二元權重(1或-1)神經網絡,用簡單的累加運算來代替乘法,提高深度學習硬體的運行效率。

緊接著在2016年,Bengio等人進一步提出了二元神經網絡(BNN),不僅是權重,連激活函數也被設定為二元形式。

儘管將深度神經網絡二元化可以極大地降低了計算成本,但是原始識別精度經常無法保持。另外,二元網絡的訓練過程不穩定,並且通常收斂速度較慢。

卷積通常作為默認操作從圖像數據中提取特徵,若引入各種方法來加速卷積,則存在犧牲網絡性能的風險。

如何讓避免CNN中的乘法呢?研究人員使用L1了距離。L1距離是兩點坐標差值的絕對值之和,不涉及乘法。

加法運算是L1距離中的主要操作,使用補碼可以輕鬆地將求差值的運算轉化為加法。

研究人員在此基礎上提出了加法器網絡AdderNet,下圖展示了AdderNet和CNN的不同之處:

不同類別的CNN特徵按其角度來劃分。由於AdderNet使用L1範數來區分不同的類,因此AdderNet的特徵傾向於聚集到不同的類中心。

可視化的結果表明,L1距離可用作深度神經網絡中濾波器與輸入特徵之間距離的相似性度量。濾波器和輸入特徵的距離可以表述為:

在傳統的CNN中,計算偏導數的公式為:

而在L1範數的定義中,偏導數變成了:

其中sgn代表符號函數,它讓我們求得的梯度只能取三種值:-1,0,1。

由此進行優化的方法叫做符號SGD(signSGD)。但是,signSGD幾乎永遠不會沿著最陡的下降方向,並且方向性只會隨著維數的增長而變差。因此要使用另一種形式的梯度:

在優化過程中,不僅需要求出對濾波器的梯度,還要求對輸入特徵的偏導數:

其中HT是HardTanh函數:

最後,得到了AdderNet的優化方法:

學習率的公式是:

其中k是Fl中元素的數量,ΔL(Fl)是第l層的濾波器梯度。

最後,在CIFAR-10的圖像分類任務中,AdderNet相比原始的二元神經網絡BNN性能有大幅的提升,並且性能已經接近了傳統CNN的結果。

這種方法訓練的得到的權重分布也和CNN有很大的不同,AdderNet的權重服從拉普拉斯分布,而CNN的權重服從高斯分布。

作者表示,在未來的工作中,他們將研究AdderNet的量化結果,以實現更高的速度和更低的能耗,以及AdderNet的通用性,不僅用於圖像分類,還將用到目標檢測和語義分割等任務中。

遭網友diss

這篇文章發布到網上後,引發了Reddit論壇機器學習板塊的熱議。

有網友認為,文章以提高運算性能為目的,但在結尾只提到了圖像分類認為的正確率,不免讓人感到文不對題。

文章不是在深度學習任務中更常見的GPU硬體上部署模型,而是選擇在CPU上部署,可能無法體現出加法運算的優勢。

而且現在各種專用AI晶片、FPGA都對深度學習任務做了優化,算浮點乘法並不一定與加法消耗資源相差太大。

對此你怎麼看呢?

論文連結:
https://arxiv.org/abs/1511.00363

關鍵字: