張 博 何海龍 顧振海 盧珊珊
(西安電子工程研究所 西安 710100)
穩(wěn)定平臺(tái)的應(yīng)用面非常廣泛。不僅車載跟蹤武器上用到,飛機(jī)吊艙也有涉及[1],而且是船上跟蹤系統(tǒng)不可缺少的組成部分。主要的干擾因素有在陸地上行駛受到的路面顛簸、空中飛行受到的氣流和飛行器振動(dòng)以及海上風(fēng)浪引起的搖擺。穩(wěn)定平臺(tái)可以通過(guò)獲取傳感器采集的干擾信息,完成自身姿態(tài)解算,抵消掉控制帶寬允許的干擾,實(shí)現(xiàn)在干擾條件下,平臺(tái)保持相對(duì)穩(wěn)定,為跟蹤系統(tǒng)提供平穩(wěn)的跟蹤環(huán)境。隨著傳感器和控制技術(shù)不斷發(fā)展,穩(wěn)定平臺(tái)的抗干擾能力也在不斷提高。由于平臺(tái)干擾通常是無(wú)規(guī)則的振動(dòng)干擾,很難對(duì)其采用傳統(tǒng)建模分析。隨著人工智能領(lǐng)域深度學(xué)習(xí)技術(shù)的發(fā)展,神經(jīng)網(wǎng)絡(luò)已經(jīng)可以通過(guò)大量數(shù)據(jù)訓(xùn)練捕捉無(wú)規(guī)則數(shù)據(jù)的潛在規(guī)律,在很多領(lǐng)域都實(shí)現(xiàn)了復(fù)雜信號(hào)的模擬建模。本文通過(guò)采用長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)算法(Long Short Term Memory Network,LSTM)[2]對(duì)虛擬振動(dòng)數(shù)據(jù)進(jìn)行深度學(xué)習(xí),實(shí)現(xiàn)對(duì)新數(shù)據(jù)的預(yù)測(cè),預(yù)測(cè)量可以作為穩(wěn)定平臺(tái)的控制前饋,進(jìn)而提高穩(wěn)定平臺(tái)的控制精度。
在人工智能領(lǐng)域中,深度學(xué)習(xí)一直是備受關(guān)注的熱點(diǎn)話題。因?yàn)樵谶^(guò)去幾年中很多事件都與它相關(guān),比如用谷歌大腦[3](Google Brain)完成的貓臉識(shí)別、Alphago[4]在圍棋比賽中勝過(guò)李世石。深度學(xué)習(xí)算法確實(shí)在很多方面超越了傳統(tǒng)機(jī)器學(xué)習(xí)算法。
在深度學(xué)習(xí)的影響下,誕生了越來(lái)越多的計(jì)算支持或者框架,如Nivdia的cuda[5]、cuDnn,Google的tensorflow[6],F(xiàn)acebook的torch和微軟的PipeDream等等。
深度學(xué)習(xí)的實(shí)現(xiàn)過(guò)程通常是使用神經(jīng)元搭建神經(jīng)網(wǎng)絡(luò),合理規(guī)劃的神經(jīng)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),在經(jīng)過(guò)大量數(shù)據(jù)訓(xùn)練后,可以很好地記錄下數(shù)據(jù)輸入和輸出的潛在關(guān)系。訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)可以依據(jù)記錄下的輸入和輸出關(guān)系計(jì)算出給定輸入的對(duì)應(yīng)輸出。
當(dāng)不同信號(hào)輸入到神經(jīng)網(wǎng)絡(luò)時(shí),為了得到指定輸出,會(huì)通過(guò)誤差反向傳播來(lái)自適應(yīng)修改神經(jīng)網(wǎng)絡(luò)各單元的權(quán)值,以到達(dá)下次輸入信號(hào)再給定時(shí),可以得到離指定輸出更靠近的值。經(jīng)過(guò)大量數(shù)據(jù)訓(xùn)練后的神經(jīng)網(wǎng)絡(luò),由于權(quán)值(或者參數(shù))已經(jīng)可以滿足訓(xùn)練集的輸入都可以正確得到期望輸出,所以當(dāng)新的不在訓(xùn)練集的數(shù)據(jù)信號(hào)輸入時(shí),可以按照訓(xùn)練數(shù)據(jù)的規(guī)律得到對(duì)應(yīng)的輸出。如果新數(shù)據(jù)輸入和輸出的關(guān)系跟訓(xùn)練數(shù)據(jù)集類似,那神經(jīng)網(wǎng)絡(luò)的輸出將非常接近輸出值,因此神經(jīng)網(wǎng)絡(luò)也被認(rèn)為是一個(gè)萬(wàn)能模型,可以反應(yīng)很多復(fù)雜的數(shù)據(jù)內(nèi)在關(guān)系。
RNN(Recurrent neural network,循環(huán)神經(jīng)網(wǎng)絡(luò))[7]主要用于處理有先后關(guān)系的序列數(shù)據(jù)。因?yàn)樵趥鹘y(tǒng)的神經(jīng)網(wǎng)絡(luò)中,信息正向傳播通過(guò)輸入層、隱含層,最后由輸出層輸出,層與層之間都是全連接的,且每層之間的節(jié)點(diǎn)是沒(méi)有連接關(guān)系的。這種普通的神經(jīng)網(wǎng)絡(luò)無(wú)法用來(lái)處理一些有先后關(guān)系的序列信息。例如,在機(jī)器翻譯應(yīng)用中,同樣幾個(gè)詞,用不同順序排列會(huì)表示不同的意思。但是如果使用這幾個(gè)詞作為輸入元素,用普通神經(jīng)網(wǎng)絡(luò)去訓(xùn)練,不管這幾個(gè)詞的順序如何變化,輸出都不會(huì)變。也就無(wú)法翻譯出這幾個(gè)詞合成句子的真實(shí)含義。而RNN算法每處理一個(gè)輸入信息,都會(huì)考慮前一個(gè)輸入信息的狀態(tài)記憶,經(jīng)過(guò)綜合處理后,得到一個(gè)輸出信息,即隱藏層之間的節(jié)點(diǎn)之間建立了先后連接。理論上,RNN能夠?qū)θ魏伍L(zhǎng)度的序列數(shù)據(jù)進(jìn)行處理。
這種包含輸入層、隱藏層和輸出層的結(jié)構(gòu)已經(jīng)被證實(shí)可以等效表示更多層的網(wǎng)絡(luò)結(jié)構(gòu),所以圖1中的神經(jīng)網(wǎng)絡(luò)中只有三層結(jié)構(gòu)??梢悦黠@看到圖1中循環(huán)神經(jīng)網(wǎng)絡(luò)模型的隱藏層比傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型的隱藏層多出了一個(gè)環(huán)形結(jié)構(gòu)。這個(gè)環(huán)形表示RNN隱藏層的輸入不僅有輸入層進(jìn)來(lái)的信息,而且包括之前隱藏層輸出的信息。通過(guò)兩方面的信息進(jìn)行權(quán)值調(diào)整,就對(duì)前后兩組數(shù)據(jù)進(jìn)行了關(guān)聯(lián),從而反應(yīng)了帶有先后順序的數(shù)據(jù)之間的關(guān)系。
圖1 循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
RNN算法原理圖如圖2所示。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的隱藏層輸出可用公式(1)表示,偏置參數(shù)bi可以看成xn的一個(gè)特殊情況,通常被放到xn考慮。所以公式(1)的矩陣形式如公式(2)所示。
圖2 循環(huán)神經(jīng)網(wǎng)絡(luò)原理圖
(1)
S=f(WinX)
(2)
St=f(WinX+WSSt-1)
(3)
公式(2)中S表示隱藏層的輸出狀態(tài),其中St是當(dāng)前LSTM單元的輸出狀態(tài),St-1表示上一個(gè)LSTM單元的輸出狀態(tài),Win是隱藏層的權(quán)值序列,X表示上一級(jí)輸入層的輸出,作為隱藏層的輸入。對(duì)比RNN的矩陣表達(dá)式(3),RNN多出了一個(gè)WsSt-1,使得隱藏層的輸出跟上一個(gè)單元的隱藏層輸出建立了關(guān)聯(lián),假設(shè)輸入序列的每個(gè)輸入元素對(duì)應(yīng)一個(gè)LSTM單元,通過(guò)這種隱藏層關(guān)聯(lián)就對(duì)序列每個(gè)元素的順序進(jìn)行了聯(lián)系,可以更好地體現(xiàn)數(shù)據(jù)序列的先后順序差別。
RNN解決較短的數(shù)據(jù)序列問(wèn)題非常有效。但是當(dāng)數(shù)據(jù)序列過(guò)長(zhǎng)時(shí),會(huì)出現(xiàn)梯度消失等現(xiàn)象。因此在RNN的基礎(chǔ)上誕生了LSTM算法。
LSTM(Long Short-Term Memory,長(zhǎng)短時(shí)記憶結(jié)構(gòu))由Sepp Hochreiter和Jurgen Schmidhuber兩人在1997年提出,并在后續(xù)工作中被許多人提煉和推廣,在很多問(wèn)題上都有非常出色的表現(xiàn),被廣泛使用。
圖3和圖4分別表示RNN網(wǎng)絡(luò)和LSTM網(wǎng)絡(luò)的一個(gè)單元的運(yùn)算過(guò)程。圖3中的三個(gè)方框?qū)?yīng)t-1、t、t+1三個(gè)相鄰的RNN單元。X表示輸入,h表示輸出,可以看到這些單元的輸入信息都有兩個(gè),一個(gè)是x輸入,一個(gè)是上一單元的h輸出量。對(duì)于圖4中的LSTM單元,每一個(gè)單元的輸入信息有三個(gè),除了x輸入量和上一單元的h輸出量外,還多了一個(gè)狀態(tài)輸出量(可以用C來(lái)表示)。對(duì)比圖3和圖4還可以看到RNN單元內(nèi)部只有一個(gè)觸發(fā)(這里是tanh觸發(fā)[8]),而LSTM單元中除了一個(gè)觸發(fā)外,還有很多閾值處理。這種處理被分為三部分:遺忘門、輸入門、輸出門。
圖3 RNN單元運(yùn)算過(guò)程
圖4 LSTM單元運(yùn)算過(guò)程
ft=σ(Wf·[ht-1,xt]+bf)
(4)
LSTM的遺忘門示意圖如圖5所示。其中方框中的σ表示sigmoid函數(shù)處理。遺忘門的功能是決定哪些輸入信息應(yīng)丟棄或者保留。來(lái)自前一單元的h輸出和當(dāng)前x輸入的信息同時(shí)作為sigmoid函數(shù)的輸入量,輸出值介于0和1之間,如公式(4)所示,越接近0意味著越應(yīng)該丟棄,越接近1意味著越應(yīng)該保留。
圖5 LSTM的遺忘門示意圖
(5)
LSTM的輸入門示意圖如圖6所示。輸入門的功能是決定哪些輸入信息應(yīng)該保存到單元中作為單元狀態(tài)C。如公式5所示輸入門由兩部分組成,第一部分是經(jīng)過(guò)sigmoid函數(shù)輸出的0~1之間的值(可以看成是閾值)。第二部分是上一單元的h輸出和本單元的x輸入經(jīng)過(guò)tanh觸發(fā)的主要包含當(dāng)前信息的候選值向量。最后將兩部分的輸出值相乘,可以看到sigmoid函數(shù)的輸出閾值,決定了候選向量中哪些信息是重要且需要保留下來(lái)的。
圖6 LSTM的輸入門示意圖
(6)
圖7 LSTM的單元狀態(tài)示意圖
(7)
LSTM的輸出門示意圖如圖8所示。輸出門同樣有一個(gè)sigmoid函數(shù)的輸出閾值,通過(guò)和單元狀態(tài)Ct的tanh觸發(fā)輸出相乘的到了最終輸出ht。
圖8 LSTM的輸出門示意圖
在RNN的基礎(chǔ)上LSTM對(duì)數(shù)據(jù)進(jìn)行了有篩選的記憶,通過(guò)遺忘門、輸入門和輸出門的閾值變化決定了信息遺忘、更新、傳遞的比例。從而可以適應(yīng)長(zhǎng)數(shù)據(jù)信息的深度學(xué)習(xí)。
穩(wěn)定平臺(tái)遇到的振動(dòng)干擾通常是沒(méi)有固定周期,幅值不確定的。但是在模擬平臺(tái)振動(dòng)干擾時(shí)通常使用正弦曲線來(lái)測(cè)試。這里可以先用一個(gè)正弦曲線測(cè)試一下LSTM算法。輸入為如圖9所示的正弦信號(hào),以每連續(xù)5個(gè)點(diǎn)的值作為輸入,來(lái)預(yù)測(cè)第6個(gè)點(diǎn)的值。
圖9 測(cè)試用數(shù)據(jù)
整個(gè)訓(xùn)練過(guò)程是隨機(jī)從圖9曲線中取出連續(xù)的6個(gè)值(前5個(gè)作為輸入,第6個(gè)作為輸出),一共取600組作為訓(xùn)練數(shù)據(jù)集。再在剩下的數(shù)據(jù)中隨機(jī)取300組作為驗(yàn)證結(jié)果的測(cè)試數(shù)據(jù)集(根據(jù)前5個(gè)數(shù)算出第6個(gè)數(shù)的估計(jì)值,得到估計(jì)值與真值的誤差)。這里采用有6個(gè)單元的LSTM網(wǎng)絡(luò)作為模型網(wǎng)絡(luò)。當(dāng)經(jīng)過(guò)600組訓(xùn)練數(shù)據(jù)經(jīng)過(guò)72次迭代,1000次訓(xùn)練周期后,得到的訓(xùn)練誤差和輸出誤差如圖10所示??梢?jiàn)測(cè)試誤差和訓(xùn)練誤差都接近于0,而且兩條曲線幾乎重合。表明LSTM網(wǎng)絡(luò)的權(quán)值參數(shù)已經(jīng)充分訓(xùn)練,具備通過(guò)前5個(gè)時(shí)刻的曲線數(shù)據(jù)來(lái)預(yù)測(cè)下一個(gè)時(shí)刻曲線數(shù)據(jù)的能力。
圖10 訓(xùn)練誤差與輸出誤差
圖11中實(shí)線代表LSTM模型預(yù)測(cè)的數(shù)據(jù),虛線代表輸入的連續(xù)5個(gè)時(shí)刻的數(shù)據(jù)。可以看到在同一時(shí)刻,預(yù)測(cè)數(shù)據(jù)在上升和下降過(guò)程中都優(yōu)先于5個(gè)輸入數(shù)據(jù),并且趨勢(shì)和輸入曲線保持一致。
圖11 預(yù)測(cè)的曲線數(shù)據(jù)
經(jīng)過(guò)訓(xùn)練的LSTM模型參數(shù)可以移植到FPGA搭建的相同模型中,以實(shí)現(xiàn)相同的預(yù)測(cè)功能。
穩(wěn)定平臺(tái)振動(dòng)干擾的周期是不固定的,但是可以通過(guò)自身姿態(tài)調(diào)解抵消的只有部分周期的干擾。這里模擬周期變化的正弦曲線進(jìn)行LSTM模型輸入,來(lái)實(shí)現(xiàn)對(duì)隨機(jī)周期曲線的預(yù)測(cè)。
用多周期拼接出的測(cè)試數(shù)據(jù)如圖12所示,用同樣的6個(gè)單元的LSTM網(wǎng)絡(luò)作為模型。訓(xùn)練后的誤差如圖13所示。
圖12 測(cè)試用多周期數(shù)據(jù)
圖13和圖10相比測(cè)試誤差出現(xiàn)了波動(dòng),可見(jiàn)當(dāng)周期隨機(jī)時(shí),預(yù)測(cè)結(jié)果出現(xiàn)了明顯誤差,但是都在0.03°以內(nèi)。取隨機(jī)一個(gè)周期測(cè)試模型的結(jié)果如圖14所示。
圖13 隨機(jī)周期誤差
圖14 隨機(jī)周期波形預(yù)測(cè)
當(dāng)為了提高本文LSTM對(duì)變幅值正弦曲線的適用性,在隨機(jī)周期的訓(xùn)練參數(shù)的基礎(chǔ)上隨機(jī)改變幅值,得到如圖15所示的訓(xùn)練數(shù)據(jù)。
圖15 測(cè)試用多周期隨機(jī)幅值數(shù)據(jù)
對(duì)于頻率隨機(jī)和幅值隨機(jī)的波效預(yù)測(cè),之前的6個(gè)LSTM單元已經(jīng)無(wú)法達(dá)到要求了,只能把單元數(shù)增加到12個(gè)最后得到了比較好的預(yù)測(cè)結(jié)果。預(yù)測(cè)誤差和預(yù)測(cè)結(jié)果分別如圖16和圖17所示。
圖16 隨機(jī)周期隨機(jī)幅值誤差
圖17 隨機(jī)周期隨機(jī)幅值波形預(yù)測(cè)
從測(cè)試結(jié)果上看12個(gè)LSTM單元組成的網(wǎng)絡(luò)已經(jīng)可以很好地預(yù)測(cè)隨機(jī)頻率隨機(jī)幅值的曲線,且預(yù)測(cè)誤差都能達(dá)到0.3mil以內(nèi)。
對(duì)于隨機(jī)正弦曲線,如果已知曲線頻率和曲線幅值,是可以直接用上一時(shí)刻的值計(jì)算出下一時(shí)刻的值的。所以LSTM網(wǎng)絡(luò)的關(guān)鍵其實(shí)是得到曲線頻率和幅值特征。如果使用兩組LSTM分別對(duì)輸入曲線進(jìn)行幅頻特征的提取,就可以計(jì)算出下一時(shí)刻的值。由于LSTM網(wǎng)絡(luò)提取頻率和幅度信息相對(duì)于提取整個(gè)曲線規(guī)律信息要容易,所以可以用更少的LSTM單元數(shù)實(shí)現(xiàn)對(duì)隨機(jī)正弦曲線的預(yù)測(cè)。
但是對(duì)于穩(wěn)定平臺(tái)的實(shí)際振動(dòng)情況,需要用實(shí)際數(shù)據(jù)來(lái)實(shí)現(xiàn)對(duì)LSTM網(wǎng)絡(luò)模型的訓(xùn)練,只要訓(xùn)練數(shù)據(jù)具備實(shí)際情況的各種特征,合理規(guī)劃網(wǎng)絡(luò)結(jié)構(gòu)是可以實(shí)現(xiàn)對(duì)隨機(jī)振動(dòng)的預(yù)測(cè)功能的。
本文測(cè)試了用LSTM單元組成的模型可以實(shí)現(xiàn)對(duì)隨機(jī)周期隨機(jī)幅值的曲線值預(yù)測(cè)。雖然訓(xùn)練時(shí)間很長(zhǎng),但是單次正向傳播時(shí)間很短,可以滿足實(shí)時(shí)解算要求。在實(shí)際使用中可搭建相同的模型,并將訓(xùn)練好的參數(shù)寫入,以實(shí)現(xiàn)功能。
在LSTM的基礎(chǔ)上又衍生出了新的GRU(Gate Recurrent Unit,循環(huán)門單元)算法[9],運(yùn)算量相對(duì)少一些,考慮到硬件的計(jì)算能力和時(shí)間成本,也可以考慮GRU算法來(lái)實(shí)現(xiàn)對(duì)穩(wěn)定平臺(tái)控制的前饋預(yù)測(cè)。