杜湘瑜,彭 杰,劉海軍
(國(guó)防科技大學(xué) 電子科學(xué)學(xué)院, 湖南 長(zhǎng)沙 410073)
近年來(lái),深度學(xué)習(xí)技術(shù)發(fā)展迅速,尤其是在神經(jīng)網(wǎng)絡(luò)領(lǐng)域[1]。深度學(xué)習(xí)算法通常采用CPU或GPU進(jìn)行訓(xùn)練[2],這也帶來(lái)了很大的功耗問(wèn)題[3]。隨著超大規(guī)模集成電路制造業(yè)的快速發(fā)展[4-5],嵌入式系統(tǒng)逐漸成為研究的熱點(diǎn),它能夠在功耗和占用面積非常小的情況下解決目標(biāo)檢測(cè)問(wèn)題[6]。
在嵌入式神經(jīng)形態(tài)處理系統(tǒng)的發(fā)展中[7],基于憶阻器的神經(jīng)形態(tài)計(jì)算體系架構(gòu)引起了許多研究者的關(guān)注[8-9]。一些基于憶阻器的神經(jīng)形態(tài)計(jì)算體系架構(gòu)已被提出[10-11]。例如, Sun等[12]提出了一種基于憶阻器的神經(jīng)形態(tài)計(jì)算架構(gòu),該架構(gòu)實(shí)現(xiàn)了三層全并行卷積神經(jīng)網(wǎng)絡(luò)(full-parallel convolutional neural networks, FP-CNN)。Sun等[13]在FP-CNN計(jì)算體系架構(gòu)的基礎(chǔ)上,以其為基本計(jì)算單元(basic computing units, BCUs)提出了一種級(jí)聯(lián)神經(jīng)網(wǎng)絡(luò)體系架構(gòu)。Yakopcic等[14]提出了一種基于憶阻器的卷積神經(jīng)網(wǎng)絡(luò),該網(wǎng)絡(luò)使用多個(gè)憶阻器交叉陣列。上述方法在網(wǎng)絡(luò)架構(gòu)方面取得了很好的效果,但當(dāng)憶阻器陣列存在低良率問(wèn)題時(shí),其性能會(huì)出現(xiàn)明顯下降[15-16]。
對(duì)此,本文提出了一種基于憶阻器的神經(jīng)形態(tài)計(jì)算方法,將能夠提高憶阻器陣列乘累加計(jì)算準(zhǔn)確率的校準(zhǔn)方法與可減少訓(xùn)練誤差的原位訓(xùn)練方法相結(jié)合,能夠提高網(wǎng)絡(luò)在低良率陣列中的識(shí)別率。
Sun等[16]提出了一種基于輸入分割的校準(zhǔn)方法,提高了存在損壞器件情況下網(wǎng)絡(luò)的識(shí)別率,如圖1所示。

圖1 校準(zhǔn)方法流程Fig.1 Flow chart of the calibration method
根據(jù)算法的基本原理,標(biāo)定算法的實(shí)現(xiàn)過(guò)程可以概括為:





由于器件具有波動(dòng)性,憶阻器的阻值在讀寫過(guò)程中會(huì)發(fā)生變化,特別是在編程過(guò)程中,器件不能準(zhǔn)確地編程到預(yù)期的阻值狀態(tài)。
為了解決這一問(wèn)題,采用了原位訓(xùn)練神經(jīng)網(wǎng)絡(luò)的方法[17]。需要說(shuō)明的是,原位訓(xùn)練方法需要對(duì)權(quán)值進(jìn)行頻繁更新,因此對(duì)器件的擦寫次數(shù)要求很高,當(dāng)前器件水平下,還難以制備出性能一致的大規(guī)模陣列,隨著工藝水平的不斷提升,這一問(wèn)題將會(huì)得到妥善解決。圖2展示的是采用原位訓(xùn)練更新阻值的方法。這意味著憶阻器被編程時(shí),器件的實(shí)際阻值被讀出,讀出的阻值被代入神經(jīng)網(wǎng)絡(luò)的反向傳播中進(jìn)行計(jì)算。將交叉陣列讀出的神經(jīng)網(wǎng)絡(luò)權(quán)值代入網(wǎng)絡(luò)訓(xùn)練中,誤差損失函數(shù)可以得到更準(zhǔn)確的計(jì)算結(jié)果。

圖2 采用原位訓(xùn)練更新阻值的圖示Fig.2 Diagram of resistances updated by in-situ training
1T1R陣列編程電路如圖3所示[13]。在這個(gè)電路中,只有目標(biāo)憶阻器對(duì)應(yīng)的行是啟用的。該電路使用兩個(gè)數(shù)模轉(zhuǎn)換器來(lái)控制電壓范圍。可以假設(shè)要設(shè)置的憶阻為w,數(shù)模轉(zhuǎn)換器(digital to analog convertor, DAC)能夠?qū)⒚總€(gè)浮點(diǎn)權(quán)值轉(zhuǎn)換為一組預(yù)定義的電導(dǎo)率狀態(tài)內(nèi)的值。其中:k對(duì)應(yīng)所使用的DAC的位寬;α是待寫入的器件權(quán)值,近似值為2B,B為實(shí)際的有效位寬,且0

圖3 一種編程憶阻器交叉陣列的電路Fig.3 A circuit for a programmed memristor cross array
陣列編程電路根據(jù)兩個(gè)比較器的輸出電壓VT決定記憶電阻是減小還是增大。如果與門(AND GATE)有高電平輸出,一個(gè)負(fù)脈沖將被寫到目標(biāo)憶阻器,如果與非門(NAND GATE)有高電平輸出,一個(gè)正脈沖將被寫到目標(biāo)憶阻器。這個(gè)編程過(guò)程將被重復(fù)進(jìn)行,直到異或門(XOR GATE)得到一個(gè)高電平輸出,代表一個(gè)憶阻器編程成功。
本文將校準(zhǔn)方法與原位訓(xùn)練相結(jié)合,以提高低良率憶阻器陣列中實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)的識(shí)別率。算法流程如圖4所示。

圖4 組合算法的執(zhí)行流程Fig.4 Execution flow chart of the combined algorithm
首先,使用憶阻器陣列進(jìn)行乘累加計(jì)算,并使用1.1節(jié)校準(zhǔn)方法進(jìn)行校準(zhǔn),以獲得校準(zhǔn)輸出。定義一個(gè)“閾值”(threshold)來(lái)確定使用校準(zhǔn)算法后陣列的標(biāo)準(zhǔn)輸出與原始輸出之間的差值是否大于預(yù)期。閾值的確定與實(shí)際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度有關(guān)。閾值越小,實(shí)現(xiàn)的網(wǎng)絡(luò)精度會(huì)提高,對(duì)應(yīng)的網(wǎng)絡(luò)精度調(diào)整越細(xì),訓(xùn)練時(shí)間會(huì)越長(zhǎng),網(wǎng)絡(luò)訓(xùn)練過(guò)程中的權(quán)值更新越頻繁,器件的實(shí)際擦寫次數(shù)越多,對(duì)器件的要求就越高;反之,閾值越大,實(shí)現(xiàn)的網(wǎng)絡(luò)精度會(huì)降低,對(duì)應(yīng)的網(wǎng)絡(luò)精度調(diào)整越粗,網(wǎng)絡(luò)訓(xùn)練過(guò)程中的權(quán)值更新次數(shù)越低,對(duì)器件的要求也越低。在本文的仿真實(shí)驗(yàn)中,綜合考慮器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度等因素,閾值被設(shè)為10-2,所采用的數(shù)據(jù)集經(jīng)過(guò)200個(gè)epoch的訓(xùn)練,能夠最終收斂。為了保證網(wǎng)絡(luò)能夠收斂,需要優(yōu)選網(wǎng)絡(luò)的初始化權(quán)值等參數(shù),并綜合考慮實(shí)際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度等因素的影響合理設(shè)置閾值。如果校準(zhǔn)輸出與原始輸出的差值大于“閾值”,則進(jìn)行原位訓(xùn)練,訓(xùn)練后再進(jìn)行校準(zhǔn)驗(yàn)證,直到誤差達(dá)到要求的精度為止。該算法的執(zhí)行流程總結(jié)如下:
1)根據(jù)公式Vout=Vin×G×Rs,使用憶阻器陣列執(zhí)行乘累加運(yùn)算以獲得模擬輸出,其中,Vout為陣列輸出電壓向量,Vin為陣列輸入電壓向量,G為憶阻器陣列電導(dǎo),Rs為運(yùn)放電阻值。

3)確定校準(zhǔn)輸出和標(biāo)準(zhǔn)輸出之間的差值是否大于閾值。如果差異大于“閾值”,進(jìn)行原位訓(xùn)練,然后回到第一步。
4)輸出最終的計(jì)算結(jié)果。
需要說(shuō)明的是,上述方法中第三步的閾值設(shè)定與實(shí)際器件可支撐的擦寫次數(shù)、網(wǎng)絡(luò)精度有關(guān)。閾值僅體現(xiàn)在訓(xùn)練過(guò)程中,僅影響訓(xùn)練過(guò)程的參數(shù)更新,對(duì)識(shí)別過(guò)程沒(méi)有影響。本文方法將能夠提高憶阻器陣列乘累加計(jì)算準(zhǔn)確率的校準(zhǔn)方法與可減少訓(xùn)練誤差的原位訓(xùn)練方法相結(jié)合,從而提高網(wǎng)絡(luò)在低良率陣列中的識(shí)別率。
使用Tensorflow[18]開(kāi)源庫(kù)進(jìn)行實(shí)驗(yàn),并使用LTspice進(jìn)行電路仿真。為了更好地反映算法的實(shí)際應(yīng)用性能,不使用任何數(shù)據(jù)增強(qiáng)技術(shù)[18-20]。選擇MNIST數(shù)據(jù)集[21]進(jìn)行驗(yàn)證,將每幅圖像歸一化為0~1的灰度值。本文采用Ti/AlOx/TaOx/Pt[15]憶阻器進(jìn)行仿真實(shí)驗(yàn)。憶阻器陣列可以重復(fù)編程到從1 kΩ到12 kΩ的不同狀態(tài)。在實(shí)驗(yàn)中,校準(zhǔn)算法的誤差閾值設(shè)置為10-2。
使用一個(gè)784×100×10的多層感知機(jī)(multi-layer perceptron, MLP)[22]來(lái)驗(yàn)證所提方法的性能。圖5顯示了MLP在兩層憶阻器陣列上的實(shí)現(xiàn)。權(quán)重矩陣W1被映射到一個(gè)784×200的數(shù)組,矩陣W2被映射到一個(gè)100×20的數(shù)組。需要說(shuō)明的是,激活函數(shù)采用的是Abs激活函數(shù),原因在于Abs激活函數(shù)在淺層神經(jīng)網(wǎng)絡(luò)中有助于提高識(shí)別率[12]。在Abs激活函數(shù)后,第一個(gè)數(shù)組的輸出被視為第二個(gè)數(shù)組的輸入。

圖5 MLP在兩層憶阻器陣列上的實(shí)現(xiàn)Fig.5 Implementation of MLP on a two-layer memristor array
在模擬實(shí)驗(yàn)中,本文考慮了器件的波動(dòng)性和陣列的良率。在良率方面,本文主要考慮單比特錯(cuò)誤(single-bit failure,SBF)[23]。具體來(lái)說(shuō),當(dāng)SBF發(fā)生時(shí),憶阻器固定在高阻狀態(tài)。

圖6展示了本文算法在MNIST數(shù)據(jù)集上的識(shí)別率。圖中的識(shí)別率均為100次實(shí)驗(yàn)的平均識(shí)別率。在實(shí)際中,陣列同時(shí)受波動(dòng)性與良率共同影響,因此本實(shí)驗(yàn)采用壞塊比例的方法進(jìn)行仿真。壞塊比例(defect percent)考慮了良率與波動(dòng)性兩個(gè)因素。若當(dāng)前的壞塊比例為α,則受良率影響的陣列比例為α×β,受器件波動(dòng)性影響的陣列比例為α×(1-β)。在本文的仿真實(shí)驗(yàn)中,β被設(shè)為0.5。受波動(dòng)性和良率影響的器件的位置隨機(jī)產(chǎn)生,其中波動(dòng)性系數(shù)σ在0.6~1.0之間隨機(jī)產(chǎn)生。

圖6 算法在MNIST數(shù)據(jù)集上的識(shí)別率Fig.6 Performance of the algorithms on the MNIST dataset
從圖6中可以看出,采用原位訓(xùn)練和校準(zhǔn)算法相結(jié)合的方法對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練后,識(shí)別率明顯提高。例如,當(dāng)壞塊比例達(dá)到10%時(shí),不進(jìn)行任何校準(zhǔn)的網(wǎng)絡(luò)精度只能達(dá)到38.3%,使用校準(zhǔn)算法的網(wǎng)絡(luò)精度可以達(dá)到48.5%,使用校準(zhǔn)算法與原位訓(xùn)練相結(jié)合的網(wǎng)絡(luò)精度可以達(dá)到近70%。在最壞的情況下,在壞塊比例達(dá)到20%的情況下,網(wǎng)絡(luò)識(shí)別性能從21.4%提高到了60%。
本文還將這項(xiàng)工作與文獻(xiàn)[24]的方法進(jìn)行了比較,后者對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行了再訓(xùn)練,以提高精度。表1 展示了兩種方法在MLP上的性能(784×256×10)。假設(shè)器件損壞只存在于權(quán)矩陣W1和W2中,或者同時(shí)存在于W1和W2中。可以看出,文獻(xiàn)[24]可以獲得92.93% 的識(shí)別率,本文工作比文獻(xiàn)[24]的識(shí)別率高出0.29%。

表1 本文算法同主流方法的識(shí)別率對(duì)比Tab.1 Recognition rate comparison of the proposed algorithm and the mainstream methods %
本文提出了一種基于憶阻器的神經(jīng)形態(tài)計(jì)算方法,將校準(zhǔn)方法與原位訓(xùn)練相結(jié)合。通過(guò)MLP架構(gòu)的仿真驗(yàn)證了該方法的有效性。從以上的仿真結(jié)果來(lái)看,神經(jīng)網(wǎng)絡(luò)的精度有明顯的提高(近40%)。實(shí)驗(yàn)結(jié)果表明,與不進(jìn)行校準(zhǔn)的方法相比,該方法的網(wǎng)絡(luò)精度提高了約30%。與現(xiàn)有方法相比,該方法的精度比現(xiàn)有方法提高了0.29%。