杜湘瑜,彭 杰,劉海軍
(國防科技大學(xué) 電子科學(xué)學(xué)院, 湖南 長沙 410073)
近年來,深度學(xué)習(xí)技術(shù)發(fā)展迅速,尤其是在神經(jīng)網(wǎng)絡(luò)領(lǐng)域[1]。深度學(xué)習(xí)算法通常采用CPU或GPU進行訓(xùn)練[2],這也帶來了很大的功耗問題[3]。隨著超大規(guī)模集成電路制造業(yè)的快速發(fā)展[4-5],嵌入式系統(tǒng)逐漸成為研究的熱點,它能夠在功耗和占用面積非常小的情況下解決目標檢測問題[6]。
在嵌入式神經(jīng)形態(tài)處理系統(tǒng)的發(fā)展中[7],基于憶阻器的神經(jīng)形態(tài)計算體系架構(gòu)引起了許多研究者的關(guān)注[8-9]。一些基于憶阻器的神經(jīng)形態(tài)計算體系架構(gòu)已被提出[10-11]。例如, Sun等[12]提出了一種基于憶阻器的神經(jīng)形態(tài)計算架構(gòu),該架構(gòu)實現(xiàn)了三層全并行卷積神經(jīng)網(wǎng)絡(luò)(full-parallel convolutional neural networks, FP-CNN)。Sun等[13]在FP-CNN計算體系架構(gòu)的基礎(chǔ)上,以其為基本計算單元(basic computing units, BCUs)提出了一種級聯(lián)神經(jīng)網(wǎng)絡(luò)體系架構(gòu)。Yakopcic等[14]提出了一種基于憶阻器的卷積神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)使用多個憶阻器交叉陣列。上述方法在網(wǎng)絡(luò)架構(gòu)方面取得了很好的效果,但當憶阻器陣列存在低良率問題時,其性能會出現(xiàn)明顯下降[15-16]。
對此,本文提出了一種基于憶阻器的神經(jīng)形態(tài)計算方法,將能夠提高憶阻器陣列乘累加計算準確率的校準方法與可減少訓(xùn)練誤差的原位訓(xùn)練方法相結(jié)合,能夠提高網(wǎng)絡(luò)在低良率陣列中的識別率。
Sun等[16]提出了一種基于輸入分割的校準方法,提高了存在損壞器件情況下網(wǎng)絡(luò)的識別率,如圖1所示。
圖1 校準方法流程Fig.1 Flow chart of the calibration method
根據(jù)算法的基本原理,標定算法的實現(xiàn)過程可以概括為:
由于器件具有波動性,憶阻器的阻值在讀寫過程中會發(fā)生變化,特別是在編程過程中,器件不能準確地編程到預(yù)期的阻值狀態(tài)。
為了解決這一問題,采用了原位訓(xùn)練神經(jīng)網(wǎng)絡(luò)的方法[17]。需要說明的是,原位訓(xùn)練方法需要對權(quán)值進行頻繁更新,因此對器件的擦寫次數(shù)要求很高,當前器件水平下,還難以制備出性能一致的大規(guī)模陣列,隨著工藝水平的不斷提升,這一問題將會得到妥善解決。圖2展示的是采用原位訓(xùn)練更新阻值的方法。這意味著憶阻器被編程時,器件的實際阻值被讀出,讀出的阻值被代入神經(jīng)網(wǎng)絡(luò)的反向傳播中進行計算。將交叉陣列讀出的神經(jīng)網(wǎng)絡(luò)權(quán)值代入網(wǎng)絡(luò)訓(xùn)練中,誤差損失函數(shù)可以得到更準確的計算結(jié)果。
圖2 采用原位訓(xùn)練更新阻值的圖示Fig.2 Diagram of resistances updated by in-situ training
1T1R陣列編程電路如圖3所示[13]。在這個電路中,只有目標憶阻器對應(yīng)的行是啟用的。該電路使用兩個數(shù)模轉(zhuǎn)換器來控制電壓范圍??梢约僭O(shè)要設(shè)置的憶阻為w,數(shù)模轉(zhuǎn)換器(digital to analog convertor, DAC)能夠?qū)⒚總€浮點權(quán)值轉(zhuǎn)換為一組預(yù)定義的電導(dǎo)率狀態(tài)內(nèi)的值。其中:k對應(yīng)所使用的DAC的位寬;α是待寫入的器件權(quán)值,近似值為2B,B為實際的有效位寬,且0
圖3 一種編程憶阻器交叉陣列的電路Fig.3 A circuit for a programmed memristor cross array
陣列編程電路根據(jù)兩個比較器的輸出電壓VT決定記憶電阻是減小還是增大。如果與門(AND GATE)有高電平輸出,一個負脈沖將被寫到目標憶阻器,如果與非門(NAND GATE)有高電平輸出,一個正脈沖將被寫到目標憶阻器。這個編程過程將被重復(fù)進行,直到異或門(XOR GATE)得到一個高電平輸出,代表一個憶阻器編程成功。
本文將校準方法與原位訓(xùn)練相結(jié)合,以提高低良率憶阻器陣列中實現(xiàn)的神經(jīng)網(wǎng)絡(luò)的識別率。算法流程如圖4所示。
圖4 組合算法的執(zhí)行流程Fig.4 Execution flow chart of the combined algorithm
首先,使用憶阻器陣列進行乘累加計算,并使用1.1節(jié)校準方法進行校準,以獲得校準輸出。定義一個“閾值”(threshold)來確定使用校準算法后陣列的標準輸出與原始輸出之間的差值是否大于預(yù)期。閾值的確定與實際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度有關(guān)。閾值越小,實現(xiàn)的網(wǎng)絡(luò)精度會提高,對應(yīng)的網(wǎng)絡(luò)精度調(diào)整越細,訓(xùn)練時間會越長,網(wǎng)絡(luò)訓(xùn)練過程中的權(quán)值更新越頻繁,器件的實際擦寫次數(shù)越多,對器件的要求就越高;反之,閾值越大,實現(xiàn)的網(wǎng)絡(luò)精度會降低,對應(yīng)的網(wǎng)絡(luò)精度調(diào)整越粗,網(wǎng)絡(luò)訓(xùn)練過程中的權(quán)值更新次數(shù)越低,對器件的要求也越低。在本文的仿真實驗中,綜合考慮器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度等因素,閾值被設(shè)為10-2,所采用的數(shù)據(jù)集經(jīng)過200個epoch的訓(xùn)練,能夠最終收斂。為了保證網(wǎng)絡(luò)能夠收斂,需要優(yōu)選網(wǎng)絡(luò)的初始化權(quán)值等參數(shù),并綜合考慮實際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度等因素的影響合理設(shè)置閾值。如果校準輸出與原始輸出的差值大于“閾值”,則進行原位訓(xùn)練,訓(xùn)練后再進行校準驗證,直到誤差達到要求的精度為止。該算法的執(zhí)行流程總結(jié)如下:
1)根據(jù)公式Vout=Vin×G×Rs,使用憶阻器陣列執(zhí)行乘累加運算以獲得模擬輸出,其中,Vout為陣列輸出電壓向量,Vin為陣列輸入電壓向量,G為憶阻器陣列電導(dǎo),Rs為運放電阻值。
3)確定校準輸出和標準輸出之間的差值是否大于閾值。如果差異大于“閾值”,進行原位訓(xùn)練,然后回到第一步。
4)輸出最終的計算結(jié)果。
需要說明的是,上述方法中第三步的閾值設(shè)定與實際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度有關(guān)。閾值僅體現(xiàn)在訓(xùn)練過程中,僅影響訓(xùn)練過程的參數(shù)更新,對識別過程沒有影響。本文方法將能夠提高憶阻器陣列乘累加計算準確率的校準方法與可減少訓(xùn)練誤差的原位訓(xùn)練方法相結(jié)合,從而提高網(wǎng)絡(luò)在低良率陣列中的識別率。
使用Tensorflow[18]開源庫進行實驗,并使用LTspice進行電路仿真。為了更好地反映算法的實際應(yīng)用性能,不使用任何數(shù)據(jù)增強技術(shù)[18-20]。選擇MNIST數(shù)據(jù)集[21]進行驗證,將每幅圖像歸一化為0~1的灰度值。本文采用Ti/AlOx/TaOx/Pt[15]憶阻器進行仿真實驗。憶阻器陣列可以重復(fù)編程到從1 kΩ到12 kΩ的不同狀態(tài)。在實驗中,校準算法的誤差閾值設(shè)置為10-2。
使用一個784×100×10的多層感知機(multi-layer perceptron, MLP)[22]來驗證所提方法的性能。圖5顯示了MLP在兩層憶阻器陣列上的實現(xiàn)。權(quán)重矩陣W1被映射到一個784×200的數(shù)組,矩陣W2被映射到一個100×20的數(shù)組。需要說明的是,激活函數(shù)采用的是Abs激活函數(shù),原因在于Abs激活函數(shù)在淺層神經(jīng)網(wǎng)絡(luò)中有助于提高識別率[12]。在Abs激活函數(shù)后,第一個數(shù)組的輸出被視為第二個數(shù)組的輸入。
圖5 MLP在兩層憶阻器陣列上的實現(xiàn)Fig.5 Implementation of MLP on a two-layer memristor array
在模擬實驗中,本文考慮了器件的波動性和陣列的良率。在良率方面,本文主要考慮單比特錯誤(single-bit failure,SBF)[23]。具體來說,當SBF發(fā)生時,憶阻器固定在高阻狀態(tài)。
圖6展示了本文算法在MNIST數(shù)據(jù)集上的識別率。圖中的識別率均為100次實驗的平均識別率。在實際中,陣列同時受波動性與良率共同影響,因此本實驗采用壞塊比例的方法進行仿真。壞塊比例(defect percent)考慮了良率與波動性兩個因素。若當前的壞塊比例為α,則受良率影響的陣列比例為α×β,受器件波動性影響的陣列比例為α×(1-β)。在本文的仿真實驗中,β被設(shè)為0.5。受波動性和良率影響的器件的位置隨機產(chǎn)生,其中波動性系數(shù)σ在0.6~1.0之間隨機產(chǎn)生。
圖6 算法在MNIST數(shù)據(jù)集上的識別率Fig.6 Performance of the algorithms on the MNIST dataset
從圖6中可以看出,采用原位訓(xùn)練和校準算法相結(jié)合的方法對網(wǎng)絡(luò)進行訓(xùn)練后,識別率明顯提高。例如,當壞塊比例達到10%時,不進行任何校準的網(wǎng)絡(luò)精度只能達到38.3%,使用校準算法的網(wǎng)絡(luò)精度可以達到48.5%,使用校準算法與原位訓(xùn)練相結(jié)合的網(wǎng)絡(luò)精度可以達到近70%。在最壞的情況下,在壞塊比例達到20%的情況下,網(wǎng)絡(luò)識別性能從21.4%提高到了60%。
本文還將這項工作與文獻[24]的方法進行了比較,后者對神經(jīng)網(wǎng)絡(luò)進行了再訓(xùn)練,以提高精度。表1 展示了兩種方法在MLP上的性能(784×256×10)。假設(shè)器件損壞只存在于權(quán)矩陣W1和W2中,或者同時存在于W1和W2中??梢钥闯?文獻[24]可以獲得92.93% 的識別率,本文工作比文獻[24]的識別率高出0.29%。
表1 本文算法同主流方法的識別率對比Tab.1 Recognition rate comparison of the proposed algorithm and the mainstream methods %
本文提出了一種基于憶阻器的神經(jīng)形態(tài)計算方法,將校準方法與原位訓(xùn)練相結(jié)合。通過MLP架構(gòu)的仿真驗證了該方法的有效性。從以上的仿真結(jié)果來看,神經(jīng)網(wǎng)絡(luò)的精度有明顯的提高(近40%)。實驗結(jié)果表明,與不進行校準的方法相比,該方法的網(wǎng)絡(luò)精度提高了約30%。與現(xiàn)有方法相比,該方法的精度比現(xiàn)有方法提高了0.29%。