BinaryConnect: Training Deep Neural Networks with binary weights during propagations

1 Introduction

      深度神經網絡(DNN)大大推動了廣泛的任務的state-of-the-art,特別是在語音識別[1,2]和計算機視覺方面,特別是圖像中的物體識別[3,4]。最近,深度學習在自然語言處理方面取得重要進展,特別是統計機器翻譯[5,6,7]。有趣的是,造成這一重大進展的關鍵因素之一是圖形處理單元(GPU)的出現,加速10到30倍,從[8]開始,類似的改進與分佈式訓練[9,10]。事實上,在更多數據上訓練大型模型的能力使得觀察到了過去幾年中的這種突破。今天,設計新的深度學習算法和應用程序的研究人員和開發人員經常發現自己受到計算能力的限制。隨着在低功耗設備(不同於GPU)放置深度學習系統的推動,大大增加了針對深層網絡的專業硬件研發的興趣[11,12,13]。
       在深層網絡的訓練和應用過程中進行的大部分計算都考慮了實值權重乘以實值激活(在識別或者反向傳播算法的前向傳播階段)或梯度(在反向傳播算法的後向傳播階段)。本文提出了一種稱爲BinaryConnect的方法,通過強制將這些正向和反向傳播中使用的權重二值化,即僅限於兩個值(不一定是0和1)來消除對這些乘法的需要。我們展示了可以在置換不變的MNIST,CIFAR-10和SVHN上,BinaryConnect實現state-of-the-art的結果。
       下面兩條使其具有可行性:(不懂)
       1.需要足夠的精度來積累和平均大量的隨機梯度,但是噪聲權重(我們可以將離散化視爲一種噪聲形式的少數值,特別是如果我們使這種離散化隨機)與深度學習的主要優化算法--隨機梯度下降(SGD)是可兼容的。 SGD通過進行小的噪聲嘗試來探索參數空間,並通過每個權重累積的隨機梯度貢獻來平均噪聲。因此,重要的是要爲這些累加器保持足夠的精度,這一切都是絕對需要高精度的。 [14]和[15]表明可以使用隨機或隨機舍入來提供無偏離的離散化。[14]已經表明,SGD需要精度至少爲6到8位的權重,[16]成功地訓練了具有12位動態定點計算的DNN。此外,腦突觸的估計精度在6位和12位之間變化[17]。
      2.噪聲權重實際上提供了一種正則化形式,可以幫助泛化能力更好,如先前所示的變分權重噪聲[18],Dropout [19,20]和DropConnect [21],這增加了激活或權重的噪聲。例如,最接近BinaryConnect的DropConnect [21]是非常有效的正則化器,它在傳播過程中隨機地用0替換一半的權重。以前的工作表明,只有權重的預期值需要高精度,而噪聲實際上是有益的。
    本文的主要貢獻如下。
•我們引入了BinaryConnect,它是一種在正向和反向傳播期間用二值化權重訓練DNN的方法(第2節)。
•我們顯示BinaryConnect是一個正則化器,我們在置換不變的MNIST,CIFAR-10和SVHN(第3節)上獲得近似最先進的結果。
•我們使BinaryConnect的代碼公開

2 BinaryConnect

        在本節中,我們給出BinaryConnect的更詳細的視圖,考慮選擇哪兩個值,如何離散化,如何訓練以及如何執行inference。

2.1 +1或-1

       應用DNN主要包括卷積和矩陣乘法。 因此,DL的關鍵算術運算是乘加運算。 人工神經元基本上是計算其輸入的加權和的乘加器。
       BinaryConnect在傳播過程中將權重約束爲+1或-1。 結果,許多乘加操作被簡單的加法(和減法)代替。 這是一個巨大的增益,因爲固定點加法器在面積和能量方面比定點乘加器要便宜得多[22]。(不懂)

2.2 Deterministic vs stochastic binarization

     二值化操作將實值權重轉換爲兩個可能的值。 一個非常簡單的二值化操作將基於符號函數:

其中wb是二值化權重,w是實值權重。 雖然這是一個確定性操作,但對隱藏單元的許多輸入權重的這種平均離散化可以彌補信息的丟失(不懂)。 允許進行更精細和更正確的平均過程的另一種方法是隨機二值化:

我們使用這樣一個hard sigmoid而不是soft版本,因爲它在計算上要少得多(在軟件和專門的硬件實現中),並且在我們的實驗中產生了出色的結果。 它類似於[23]引入的“hard tanh”非線性。 它也是分段線性的,對應於ReLU的有界形式[24]。

2.3 Propagations vs updates

       讓我們考慮與SGD更新的反向傳播不同的步驟,以及在這些步驟中離散權重是否有意義。
       1.給定DNN輸入,逐層計算神經元激活,直到頂層,這是DNN在給定輸入下的輸出。該步驟被稱爲正向傳播。
       2.給定DNN目標,計算訓練目標的梯度,考慮每層的激活,從頂層開始,逐層下移直到第一個隱藏層。該步驟被稱爲反向傳播或反向傳播的反向階段。
       3.計算梯度,考慮每層的參數,然後使用其計算的梯度及其先前的值更新參數。此步驟稱爲參數更新。
       
      理解BinaryConnect的一個關鍵點是,我們只在前向和後向傳播(步驟1和2)中二值化權重,而不是在參數更新(步驟3)期間進行二值化,如算法1所示。在更新過程中權重保持良好的精度是SGD能夠工作所需要的。由於通過梯度下降獲得的這些參數變化很小,即SGD在最大程度改善訓練目標的方向上執行大量幾乎無窮小的變化(加上噪音)。執行所有這一切的方法是假設在訓練結束時最重要的是權重的符號w *,但是爲了弄清楚,我們對連續值的數量進行了很多小的改變w,只有到最後才考慮它的符號:

    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章