韓婷婷, 張 章, 陳思鍇
(合肥工業(yè)大學 微電子學院,安徽 合肥 230601)
深度神經(jīng)網(wǎng)絡(luò)(deep neural network,DNN)模型在解決挑戰(zhàn)性任務(wù)時的突出表現(xiàn),使其在語音信號處理[1]、數(shù)字圖像處理[2]領(lǐng)域受到廣泛應(yīng)用。因為前饋神經(jīng)網(wǎng)絡(luò)要求輸入和輸出維度固定,所以其不適合處理長度不固定的時序數(shù)據(jù)。循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)是具有短期記憶能力的一類網(wǎng)絡(luò),其具有反饋連接以保留信息的順序,并且能處理任意長度的輸入序列數(shù)據(jù),因此被廣泛應(yīng)用在語音識別、語言模型以及自然語言生成等任務(wù)上。然而,對RNN的訓(xùn)練可能難以進行,因為RNN的權(quán)重更新是基于梯度算法進行的,所以會有梯度爆炸或消失的問題,這些問題可以通過在傳統(tǒng)RNN中添加門控機制來解決。長短時記憶網(wǎng)絡(luò)(long short-term memory,LSTM)[3]和門控循環(huán)單元(gated recurrent unit,GRU)[4]是目前廣泛應(yīng)用的2個基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò)(gated recurrent neural network,Gated RNN)。GRU是受LSTM模型啟發(fā),具有更少的參數(shù)和更簡單的計算步驟。文獻[5]對比了GRU與LSTM在相同任務(wù)中的精度、內(nèi)存消耗和訓(xùn)練時間,發(fā)現(xiàn)GRU與LSTM精度幾乎相同,但是GRU的內(nèi)存消耗相比于LSTM減少了約18%,訓(xùn)練速度提升了約20%,這使得GRU在對內(nèi)存或速度有特殊要求的實際應(yīng)用中更加流行。
然而,GRU由于其結(jié)構(gòu)的復(fù)雜性和并行性,需要大量的計算資源,傳統(tǒng)馮諾依曼體系架構(gòu)中存在的“馮諾依曼瓶頸”[6]和“內(nèi)存墻瓶頸”[7]問題導(dǎo)致其實現(xiàn)起來有一定難度。為了推動未來神經(jīng)形態(tài)計算技術(shù)的發(fā)展,必須找到非馮諾依曼體系架構(gòu)的解決方案。憶阻器是代表磁通量與電荷之間關(guān)系的兩端電路器件,是存算一體架構(gòu)的有力候選者。與馮諾依曼體系架構(gòu)相比,基于憶阻器的內(nèi)存計算有效地規(guī)避了頻繁數(shù)據(jù)通信帶來的巨大能耗和時間開銷。
人工神經(jīng)網(wǎng)絡(luò)(artificial neural network, ANN)的整體內(nèi)存計算架構(gòu)將由多個交叉開關(guān)陣列組成,憶阻器可以使用電導(dǎo)值作為突觸權(quán)重,交叉開關(guān)陣列執(zhí)行向量矩陣乘法(vector matrix multiplication,VMM)。在饋入行的每個輸入電壓向量和列權(quán)重向量之間生成點積向量,每個交叉開關(guān)陣列都帶有模數(shù)轉(zhuǎn)換器和數(shù)字電路,然后連接到下一個交叉開關(guān)陣列。然而,先前大部分對GRU的研究都是基于軟件實現(xiàn)的,對GRU存算一體的硬件研究介紹很少,并且沒有任何使用憶阻器實現(xiàn)GRU單元計算的研究。
因此,本文提出一個基于憶阻器的門控循環(huán)單元的硬件電路,使用較少的元件以及低精度要求的元件就可以實現(xiàn)門控循環(huán)單元的功能。本文首先對搭建的電路進行仿真,結(jié)果表明電路的平均誤差為0.007 5;然后將電路應(yīng)用于3層GRU模型實現(xiàn)股票的預(yù)測,預(yù)測的R2分數(shù)為0.923 4。本文的設(shè)計不僅具有較高的精度,而且具有更小的片上預(yù)算和功率消耗。
憶阻器為應(yīng)用非馮諾依曼架構(gòu)的存內(nèi)計算集成技術(shù)提供了新思路。憶阻器可以用作仿生突觸設(shè)備,通過動態(tài)調(diào)整電阻狀態(tài)來實現(xiàn)權(quán)重更新。同時,憶阻器陣列可以根據(jù)基爾霍夫定律和歐姆定律實現(xiàn)VMM操作,但是使用憶阻器陣列進行GRU操作,在每次迭代操作中存在海量數(shù)據(jù)傳輸。因此目前還缺乏使用憶阻器來實現(xiàn)RNN網(wǎng)絡(luò)功能的方案。
為實現(xiàn)更切實際的電路仿真,本文利用真實的憶阻器性能進行建模。使用Au/Ta2O5/HfO2/Pt疊層用作阻變式存儲器(resistive random access memory,RRAM)器件,憶阻器的電流-電壓特性和多態(tài)特性如圖1所示。
圖1 憶阻器的電流-電壓和多態(tài)特性
通過施加0~-1.5 V的掃描電壓,器件可以從高電阻狀態(tài)(high resistance state,HRS)變?yōu)榈碗娮锠顟B(tài)(low resistance state,LRS)。當施加0~2.0 V的掃描電壓時,器件可以從LRS變?yōu)镠RS。此外,本文對200個工作電壓進行統(tǒng)計,設(shè)定電壓集中在0.7~-1.1 V的范圍,復(fù)位電壓集中在-0.7 ~ 0.4 V的范圍。分布式和集中式的式工作電壓特性有利于后期電路設(shè)計。通過改變復(fù)位過程的截止電壓,可以實現(xiàn)憶阻器的多態(tài)調(diào)節(jié)。本文使用這種方法實現(xiàn)了64個狀態(tài)的連續(xù)調(diào)節(jié),電導(dǎo)調(diào)節(jié)的線性關(guān)系(圖1b)表明該裝置滿足實際應(yīng)用的要求。
對器件的特性進行函數(shù)擬合,并將其數(shù)學表達式轉(zhuǎn)換為相應(yīng)的電路元件。將不可轉(zhuǎn)換的部分作為函數(shù)方程合并到Spice模型中以擬合器件數(shù)據(jù),因此新模型具有器件屬性。在重置過程中提取一條完整的曲線,如圖2所示。從圖2可以看出,器件曲線和模型擬合曲線幾乎完全重合。因此,該模型滿足多態(tài)調(diào)控仿真,能夠很好地模擬真實憶阻器在后續(xù)神經(jīng)網(wǎng)絡(luò)構(gòu)建中的工作狀態(tài)。
圖2 憶阻器模型的擬合曲線
GRU是一種結(jié)構(gòu)更簡單的門控循環(huán)神經(jīng)網(wǎng)絡(luò),其重置門能同時進行遺忘和記憶,并且沒有額外的記憶單元,如圖3所示。從圖3可以看出,其輸入分別為當前時刻輸入xt和上一時刻輸出的ht-1。輸入分別乘以相應(yīng)的權(quán)重,然后通過激活函數(shù)輸出門控值。sigmoid激活層后的更新門zt值和重置門rt值的范圍都為(0, 1)。rt和上一時刻的狀態(tài)ht-1相乘用來控制候選狀態(tài)h′對前一時刻ht-1的狀態(tài)進行遺忘。如果重置門近似0,那么上一個隱藏狀態(tài)將被丟棄。因此,重置門可以丟棄與預(yù)測未來無關(guān)的歷史信息,通過tanh函數(shù)過濾可以使輸出范圍為(-1, 1)。zt更新門用來控制此刻的時間步ht如何被上一時刻時間步信息ht-1和候選激活信息h′所更新,若當前時刻輸出ht和上一時刻輸出ht-1之間的關(guān)系是線性函數(shù),則這種設(shè)計可以應(yīng)對循環(huán)神經(jīng)網(wǎng)絡(luò)中的梯度衰減問題,并更好地捕捉時間序列中時間步距離較大的依賴關(guān)系。
圖3 門控循環(huán)單元的結(jié)構(gòu)
GRU單元操作公式如下:
zt=σ(Wzxt+Uzht-1+bz)
(1)
rt=σ(Wrxt+Urht-1+br)
(2)
h′=tanh(Wxt+U(rt⊙ht-1)+b)
(3)
ht=zt⊙h′+(1-zt)⊙ht-1
(4)
其中:xt為時間步長為N的輸入向量;ht-1為上一時刻的信息輸入向量;zt為更新門輸出矩陣;rt為重置門輸出矩陣;h′為中間激活狀態(tài)輸出矩陣;ht為當前時刻的輸出;Wz、Uz為更新門的權(quán)重矩陣;Wr、Ur為重置門的權(quán)重矩陣;W、U為中間激活狀態(tài)的權(quán)重矩陣;bz、br分別為更新門和重置門偏置矩陣;σ為sigmoid函數(shù);⊙為逐元素向量積。
基于憶阻器的門控循環(huán)單元的整體電路如圖4所示,硬件電路的設(shè)計是基于上述GRU單元的詳細參數(shù)計算過程。門控單元的權(quán)重可以由憶阻器電導(dǎo)表示,憶阻器的電導(dǎo)可以通過施加的電壓和脈沖時間來控制。另外,通過一個開關(guān)和反相電路來控制硬件電路中權(quán)重值的正值和負值。當權(quán)重值為負時,開關(guān)關(guān)斷,輸入通過反相電路用于憶阻器;當權(quán)重值為正時,開關(guān)斷開,輸入不經(jīng)過反相電路用于憶阻器。通過控制輸入的方向電路實現(xiàn)負值的乘法結(jié)果輸出,因此本設(shè)計可以通過4個憶阻器實現(xiàn)更新門和重置門內(nèi)的乘法。另外,激活函數(shù)的硬件實現(xiàn)是設(shè)計中具有挑戰(zhàn)性的部分。經(jīng)常使用的激活函數(shù)有sigmoid、tanh、ReLU等,硬件電路中ReLU函數(shù)可以用一個放大電路近似等效。受此啟發(fā),GRU中使用的sigmoid和tanh函數(shù)都可以用一個線性函數(shù)去逼近它的線性部分。
圖4 基于憶阻器的門控循環(huán)單元的整體電路
基于以上2個設(shè)計思想,下面介紹GRU內(nèi)部單元的具體實現(xiàn)電路。
權(quán)值與電導(dǎo)值之間被設(shè)計為100倍的線性映射關(guān)系,即
G=W/100
(5)
其中:G為電導(dǎo)值;W為權(quán)重值,W的取值范圍為(0,0.2]。該設(shè)計使得輸出電壓與理論值之間呈線性關(guān)系,將式(5)分別代入式(1)、式(2),可計算復(fù)位門和更新門電路的輸出電壓值。
計算公式分別為:
rt=σ[Wr/(100xt)+Ur/(100ht-1)]
(6)
zt=σ[Wz/(100xt)+(Uz/(100ht-1)]
(7)
輸出電壓與理論值之間存在100倍的關(guān)系。因為器件電導(dǎo)是mS級,所以通過憶阻器的輸出電壓是mV級且在sigmoid函數(shù)的線性部分,可以在電路中實現(xiàn)一個線性函數(shù)替代sigmoid函數(shù)功能,本文用非零線性函數(shù)擬合sigmoid函數(shù)從0~0.2的線性部分,線性函數(shù)如下:
y=0.2x+0.5
(8)
根據(jù)式(8),sigmoid函數(shù)電路可以簡化為求和電路與放大電路的組合。根據(jù)式(5)可以看出,電壓值與理論值有100倍的關(guān)系,線性函數(shù)的系數(shù)為0.2,根據(jù)輸入的映射關(guān)系,即可將放大電路的反饋電阻阻值設(shè)為40 kΩ、輸入電阻阻值設(shè)為1 kΩ,同相求和電路的一端輸入設(shè)為0.5 V直流穩(wěn)壓源,運放同相輸入端的2個電阻和反向輸入端電阻同為3 kΩ,反饋電阻為6 kΩ。由此得到rt和zt電路輸出值,且其與理論計算為線性關(guān)系。
使用同樣的方法對h′候選激活輸出模塊進行搭建,將式(5)代入式(3),可得其電路輸出公式為:
h′=tanh(W/(100xt)+
(U/100)(rt⊙ht-1)+b)
(9)
候選激活模塊中通過憶阻器后的電壓為mV級別,而tanh函數(shù)的-0.5~0.5部分是線性的,因此為了在電路中實現(xiàn)tanh函數(shù),本文使用過零線性函數(shù)擬合tanh函數(shù),得到的線性擬合函數(shù)如下:
y=0.8x
(10)
通過一個放大電路可以簡單實現(xiàn)tanh函數(shù),放大電路的反饋電阻可以根據(jù)擬合的線性函數(shù)設(shè)置為80 kΩ,輸入電阻為1 kΩ,即可實現(xiàn)候選激活狀態(tài)的電路輸出。GRU的當前時刻輸出由輸出電路完成,其輸出方程式(3)根據(jù)乘法分配律可以拆分為:
ht=ht-1-ztht-1+zth′
(11)
電路的輸出還需要電壓乘法運算,這并不適合用憶阻器直接實現(xiàn),因此本文使用AD633搭建一個可以實現(xiàn)mV級的電壓乘法電路。更新門、上一時刻輸出、候選激活通過加法電路和減法電路進行組合,可得到當前時刻電路輸出。
本文搭建的電路完全從硬件方面實現(xiàn)了GRU單元的功能。電路參數(shù)只有輸入與輸出,無需對門信號和候選激活信號進行操作,避免了不必要的信息傳輸和外圍電路。同時本設(shè)計可以通過異地訓(xùn)練方法將權(quán)重寫入憶阻器,異位方法的主要優(yōu)點是可以使用任何學習算法進行訓(xùn)練,并且簡化了激活函數(shù)電路,無需高精度器件就可以實現(xiàn)GRU的功能。
因為器件的復(fù)位電壓是0.5 V,所以電路中的電壓范圍要控制在-0.5~+0.5 V范圍內(nèi)。提取模型中第1層GRU的權(quán)重值、輸入和輸出值,得到權(quán)重值范圍為(-0.2,0.2),輸入輸出范圍均為(-1,1)。因此軟件中的參數(shù)線性映射為-0.5~0.5 V的電壓值,權(quán)重取絕對值后從0~0.2線性映射到電導(dǎo)狀態(tài)0.000 5 ~ 0.002 0 S,見表1所列。
表1 網(wǎng)絡(luò)參數(shù)與電路參數(shù)的映射關(guān)系
本文將輸入xt和ht-1從-1 ~ 1以0.1為步長變化進行連續(xù)的仿真,以檢驗仿真模型的運算準確性。由于GRU單元中存在3次迭代運算,本文提取了迭代運算中的輸出結(jié)果,以驗證模型的實際效果,電路仿真結(jié)果混淆矩陣如圖5所示。因為軟件輸入是電路值的2倍,本文將sigmoid激活函數(shù)電路輸出放大了200倍,所以門控單元的輸出與理論值的關(guān)系式為Y=V,圖5a的誤差計算公式為:
圖5 電路仿真結(jié)果混淆矩陣
Ei=(V-Y)×100%
(12)
其中:Ei為第i次仿真的誤差;V為電路輸出電壓值;Y為理論輸出值。軟件輸出是電路值的2倍,即Y=2V,圖5b、5c的誤差計算公式為:
Ei=(V-Y/2)×100%
(13)
由圖5a可知,復(fù)位門和更新門的平均誤差值為0.010 3。由圖5b可知,候選激活狀態(tài)的電路輸出與理論輸出值的平均誤差值為0.014 6。由圖5c可知,最終電路輸出與理論輸出值的平均誤差值為0.007 5。1%的誤差在很多高精度數(shù)學計算中都是不可接受的,但神經(jīng)網(wǎng)絡(luò)通常具有較高的魯棒性,因此對單個神經(jīng)元的計算準確度要求并不如此苛刻。在神經(jīng)網(wǎng)絡(luò)中,考慮到憶阻器硬件電路在執(zhí)行神經(jīng)網(wǎng)絡(luò)過程中相比于傳統(tǒng)馮諾依曼架構(gòu)在能效上的巨大優(yōu)勢,計算精度上的少許損失是完全可以接受的。
通過分析電路輸出誤差混淆矩陣,獲得一個方差為0.009 7、均值為-0.002 6的正態(tài)分布函數(shù)。為了將電路應(yīng)用于實際情境,本文搭建一個包含2層GRU和一個全連接層的3層神經(jīng)網(wǎng)絡(luò)模型,每個GRU層具有64個單元,全連接層包含1個神經(jīng)元。
在模型的第1層GRU的輸出上,引入一個服從電路誤差分布的正態(tài)分布隨機數(shù),以模擬模型在電路中的運行情況。整個系統(tǒng)的具體操作流程如圖6所示。
圖6 系統(tǒng)流程
使用7 270個訓(xùn)練數(shù)據(jù),對模型進行100輪的訓(xùn)練。在完成訓(xùn)練后,將電路參數(shù)集成到模型中,并進行500個數(shù)據(jù)的測試。經(jīng)過訓(xùn)練后,損失值降至0.000 4,訓(xùn)練R2分數(shù)達到0.996 9。為了評估模型性能,對500個測試數(shù)據(jù)集的R2分數(shù)進行綜合分析,得到0.948 4的R2分數(shù)。將電路參數(shù)用于模型的前向預(yù)測,得到的預(yù)測R2分數(shù)為0.923 4。
將本文的設(shè)計與先前實現(xiàn)GRU模型的工作進行對比,結(jié)果見表2所列。從表2可以看出,本文的電路在功耗和速度方面具有顯著優(yōu)勢,因此在構(gòu)建深層網(wǎng)絡(luò)時可以提供優(yōu)越的并行度將單元應(yīng)用到網(wǎng)絡(luò)中,并且可以快速完成網(wǎng)絡(luò)的前向傳播。
表2 模型與電路的評估參數(shù)對比
本文設(shè)計了一個基于憶阻器的GRU硬件電路,設(shè)計的電路可以減少不必要的數(shù)據(jù)傳輸和大量外圍電路的參與。仿真結(jié)果表明,與理論值相比,GRU電路輸出的平均誤差低至0.007 5,而使用搭建的硬件電路實現(xiàn)的股票預(yù)測模型的R2分數(shù)可以達到0.923 4。與目前的GRU硬件實現(xiàn)方式相比,本文設(shè)計需要更少的電路組件,具有更快的執(zhí)行速度和更低的功耗。此外,本文設(shè)計能夠有效實現(xiàn)GRU模型的前向傳播。因此,本文設(shè)計為未來GRU的硬件電路設(shè)計提供了一種新的解決方案,并為提高GRU網(wǎng)絡(luò)存算一體的實現(xiàn)速度提供較好的思路。