華一暢,黃 杰,姚衛(wèi)星,3
(1.上海機(jī)電工程研究所,上海 201109) (2.南京航空航天大學(xué)機(jī)械結(jié)構(gòu)力學(xué)及控制國(guó)家重點(diǎn)實(shí)驗(yàn)室,江蘇 南京 210016) (3.南京航空航天大學(xué)飛行器先進(jìn)設(shè)計(jì)技術(shù)國(guó)防重點(diǎn)學(xué)科實(shí)驗(yàn)室,江蘇 南京 210016)
隨著軍事技術(shù)的不斷發(fā)展,飛行器飛行馬赫數(shù)越來(lái)越高。高超聲速飛行器由于具有遠(yuǎn)距離巡航、高空高速等特點(diǎn)以及快速反應(yīng)、有效攔截和打擊目標(biāo)的能力,越來(lái)越受到各軍事大國(guó)的重視。高超聲速飛行器在稠密大氣層內(nèi)飛行時(shí),空氣受到強(qiáng)烈壓縮和劇烈摩擦,飛行器大部分動(dòng)能轉(zhuǎn)化為熱能,致使壁面溫度急劇升高[1],因此對(duì)防熱技術(shù)的要求很高。熱環(huán)境計(jì)算是結(jié)構(gòu)熱防護(hù)的出發(fā)點(diǎn),因此對(duì)高超聲速飛行器進(jìn)行熱環(huán)境分析具有重要意義。
高超聲速飛行器熱環(huán)境分析是一個(gè)典型的多學(xué)科問(wèn)題,目前研究方法主要包括數(shù)值方法和工程方法。數(shù)值方法直接求解N-S方程或者其近似形式,對(duì)網(wǎng)格質(zhì)量、計(jì)算方法有很高要求,計(jì)算量大[2]。工程方法計(jì)算效率高,但是僅適用于簡(jiǎn)單結(jié)構(gòu),難以拓展到復(fù)雜外形[3]。因此有必要構(gòu)建一個(gè)基于已有試驗(yàn)數(shù)據(jù)的預(yù)測(cè)模型,在給定飛行參數(shù)時(shí)能對(duì)飛行器壁面熱環(huán)境進(jìn)行快速評(píng)估。
本文以深度學(xué)習(xí)為基礎(chǔ)[4-5],采用tensorflow的kerasAPI構(gòu)建一個(gè)深度神經(jīng)網(wǎng)絡(luò)(deep neural networks,DNN)的回歸預(yù)測(cè)模型,提出了一種基于反向傳播算法的模型訓(xùn)練方法。
深度神經(jīng)網(wǎng)絡(luò)是通過(guò)模擬信號(hào)在生物神經(jīng)元之間的傳遞構(gòu)建的,可以用來(lái)反映人腦的思維方式。按不同層的位置劃分,DNN內(nèi)部的神經(jīng)網(wǎng)絡(luò)層可以分為3類:輸入層、隱藏層和輸出層,基本結(jié)構(gòu)如圖1所示。輸入層接受輸入數(shù)據(jù)x,中間隱藏層對(duì)輸入數(shù)據(jù)進(jìn)行處理,輸出層產(chǎn)生輸出數(shù)據(jù)y。神經(jīng)網(wǎng)絡(luò)的復(fù)雜程度以及表達(dá)能力取決于隱藏層的層數(shù)和每層的節(jié)點(diǎn)數(shù)。DNN相鄰層之間是全連接的,對(duì)于一個(gè)隱藏層總層數(shù)為L(zhǎng)的神經(jīng)網(wǎng)絡(luò),第l層的任意一個(gè)神經(jīng)元一定與第(l-1)層的任意一個(gè)神經(jīng)元相連,用Wl表示第l層和第(l-1)層各神經(jīng)元之間的權(quán)重系數(shù)矩陣,bl表示第l層神經(jīng)元輸入對(duì)應(yīng)的偏置向量,第l層神經(jīng)元的輸入zl和第(l-1)層神經(jīng)元的輸出al-1之間存在線性關(guān)系(zl=Wlal-1+bl)。第l層神經(jīng)元通過(guò)激活函數(shù)σ對(duì)該層的輸入zl和輸出al進(jìn)行變換,即al=σ(zl)。激活函數(shù)向神經(jīng)網(wǎng)絡(luò)中引入非線性,提高了神經(jīng)網(wǎng)絡(luò)對(duì)于復(fù)雜問(wèn)題的表達(dá)能力,激活函數(shù)的選擇一般根據(jù)實(shí)際問(wèn)題的性質(zhì)確定。
圖1 深度神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)
本文選擇線性整流函數(shù)(rectified linear unit,ReLU)作為激活函數(shù),其表達(dá)式為σ(x)=max(0,x),其中的x為本層神經(jīng)網(wǎng)絡(luò)的輸入向量。相比于傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)激活函數(shù),線性整流函數(shù)計(jì)算過(guò)程簡(jiǎn)單,在訓(xùn)練中梯度下降以及反向傳播更加高效,同時(shí)可以避免梯度爆炸和梯度消失的問(wèn)題[6]。
對(duì)于k個(gè)訓(xùn)練樣本{(x1,y1),(x2,y2),…,(xk,yk)},樣本的輸入輸出分別為x,y。通過(guò)反向傳播算法訓(xùn)練DNN模型,目的是找到合適的隱藏層對(duì)應(yīng)的權(quán)重系數(shù)矩陣W和偏置向量b,讓所有訓(xùn)練樣本的預(yù)測(cè)值盡可能接近真實(shí)值。
損失函數(shù)用來(lái)計(jì)算模型預(yù)測(cè)值與樣本真實(shí)值之間的誤差,本文采用最常見(jiàn)的均方誤差來(lái)度量損失,對(duì)于一個(gè)輸出參數(shù),定義其損失函數(shù)J為:
(1)
通過(guò)反向傳播算法逐層求出損失函數(shù)對(duì)各層神經(jīng)元Wl,bl的偏導(dǎo)數(shù),構(gòu)成損失函數(shù)對(duì)Wl和bl的梯度,作為修改權(quán)重的依據(jù)。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)在權(quán)重修改過(guò)程中完成。誤差達(dá)到所期望值時(shí),神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)結(jié)束。通過(guò)以下4個(gè)公式可以完整地更新每一層Wl和bl的對(duì)應(yīng)梯度:
(2)
δl=(Wl+1)Tδl+1*σ′(zl)
(3)
(4)
(5)
梯度下降是迭代法的一種,可以用于求解最小二乘問(wèn)題。在求解機(jī)器學(xué)習(xí)算法的模型參數(shù),即無(wú)約束優(yōu)化問(wèn)題時(shí),梯度下降(gradient descent)是最常采用的方法之一。梯度下降的本質(zhì)是逐步逼近最優(yōu),其迭代公式為:
θi=θi-1-ηJ(θi-1)
(6)
(7)
式中:θi代表第i次學(xué)習(xí)時(shí)模型系數(shù)W,b,其梯度可以通過(guò)式(2)~式(5)計(jì)算;η為學(xué)習(xí)律;Jr為第r個(gè)訓(xùn)練樣本的損失函數(shù);R為訓(xùn)練樣本總數(shù)。
傳統(tǒng)梯度下降方法使用所有訓(xùn)練樣本計(jì)算梯度,每次學(xué)習(xí)都使用整個(gè)訓(xùn)練集。使用所有訓(xùn)練樣本計(jì)算梯度,其優(yōu)點(diǎn)是梯度下降的方向會(huì)穩(wěn)定朝著極值方向并收斂,不容易受噪聲影響。但是因?yàn)榭紤]了所有樣本所以收斂慢,同時(shí)容易陷入局部最優(yōu)。由于每次更新參數(shù)都需要計(jì)算所有訓(xùn)練樣本的損失函數(shù),隨著輸入樣本數(shù)的增加,每次更新計(jì)算量都會(huì)大幅增加。
隨機(jī)梯度下降(stochastic gradient descent,SGD)算法每次只隨機(jī)抽取一個(gè)樣本做梯度下降,訓(xùn)練后按梯度更新一次,然后再抽取一組,再更新一次,在樣本量大的情況下,不用訓(xùn)練完所有樣本就可以獲得一個(gè)損失值在可接受范圍之內(nèi)的模型。在每輪迭代中隨機(jī)優(yōu)化某一條訓(xùn)練數(shù)據(jù)上的損失函數(shù),參數(shù)的更新速度都會(huì)大大加快。此外,隨機(jī)梯度下降每次更新可能并不會(huì)按照極值方向進(jìn)行,因此會(huì)帶來(lái)優(yōu)化波動(dòng),這個(gè)波動(dòng)可能會(huì)使得損失函數(shù)從當(dāng)前局部極小值點(diǎn)跳到另一個(gè)更優(yōu)的局部極小值點(diǎn),對(duì)于非凸函數(shù),可能最終收斂于一個(gè)較優(yōu)的局部極小值點(diǎn),甚至全局極小值點(diǎn)[7]。SGD算法更新規(guī)則如下:
θi=θi-1-ηJr(θi-1)
(8)
SGD算法的一個(gè)關(guān)鍵參數(shù)是學(xué)習(xí)率,學(xué)習(xí)率太小會(huì)導(dǎo)致收斂速度非常緩慢,而學(xué)習(xí)率太大會(huì)阻礙收斂,容易引起權(quán)重在最優(yōu)解附近震蕩,甚至可能引起發(fā)散[8-9]。在實(shí)際計(jì)算時(shí),隨著迭代次數(shù)的增加,通常需逐漸降低學(xué)習(xí)率。學(xué)習(xí)率可以通過(guò)試驗(yàn)來(lái)選取。
隨機(jī)梯度下降學(xué)習(xí)過(guò)程有時(shí)會(huì)很慢,使用動(dòng)量方法可以加快學(xué)習(xí)速度,特別是處理高曲率、小但一致的梯度時(shí)[10]。動(dòng)量方法每次學(xué)習(xí)的步長(zhǎng)不僅取決于學(xué)習(xí)率,還取決于梯度序列的大小和順序。動(dòng)量方法引入變量vi代表第i次迭代時(shí)參數(shù)在參數(shù)空間移動(dòng)的方向和速率,動(dòng)量參數(shù)α∈(0,1]決定前一次訓(xùn)練梯度對(duì)本次訓(xùn)練的影響。動(dòng)量方法中,更新規(guī)則如下:
vi=αvi-1-ηJr(θi-1)
(9)
θi=θi-1+vi
(10)
本文基于Python平臺(tái)構(gòu)建一個(gè)深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和預(yù)測(cè)程序,該程序能夠?qū)σ唤M多輸入、多輸出的訓(xùn)練樣本進(jìn)行學(xué)習(xí),生成預(yù)測(cè)模型。在預(yù)測(cè)程序中加載模型,接受輸入?yún)?shù)并進(jìn)行預(yù)測(cè)。程序的主要流程如下:
1)讀入訓(xùn)練樣本,計(jì)算各參數(shù)的最小值與極差,將訓(xùn)練參數(shù)歸一化。隨機(jī)選擇80%的樣本作為訓(xùn)練集,用于參數(shù)的訓(xùn)練,另外20%的樣本作為測(cè)試集,不參加訓(xùn)練,用于測(cè)試訓(xùn)練情況。
2)建立一個(gè)具有3個(gè)隱藏層,每層32個(gè)單元的深度神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,模型的激活函數(shù)采用ReLU函數(shù)。
3)初始化神經(jīng)網(wǎng)絡(luò),隨機(jī)給預(yù)測(cè)模型中的權(quán)重系數(shù)矩陣W和偏置向量b賦予一組較小的非零數(shù)值。
4)構(gòu)建隨機(jī)梯度下降優(yōu)化器,學(xué)習(xí)率為0.01,學(xué)習(xí)衰減率為1×10-6,動(dòng)量參數(shù)為0.9,選取均方誤差函數(shù)作為損失函數(shù)。
5)開(kāi)始訓(xùn)練預(yù)測(cè)模型,輸入訓(xùn)練樣本,得到模型的預(yù)測(cè)值,與真實(shí)值進(jìn)行比較,根據(jù)反向傳播算法,計(jì)算模型的損失函數(shù)以及隱藏層權(quán)重系數(shù)矩陣W和偏置向量b的梯度。
6)采用隨機(jī)梯度下降優(yōu)化器,修正網(wǎng)絡(luò)權(quán)重,完成一次訓(xùn)練過(guò)程。
7)重復(fù)步驟5)、6),對(duì)權(quán)重系數(shù)矩陣W和偏置向量b進(jìn)行反復(fù)迭代,若訓(xùn)練次數(shù)或者均方誤差滿足要求,則結(jié)束訓(xùn)練。
8)使用測(cè)試集檢驗(yàn)?zāi)P皖A(yù)測(cè)精度,確保無(wú)過(guò)擬合現(xiàn)象的發(fā)生。預(yù)測(cè)程序通過(guò)調(diào)用訓(xùn)練結(jié)果完成預(yù)測(cè)。
為驗(yàn)證程序的有效性以及預(yù)測(cè)精度,以典型高超聲速飛行器飛行過(guò)程中時(shí)間、馬赫數(shù)、攻角、高度作為輸入?yún)?shù),對(duì)應(yīng)的壁面熱流和壁面溫度峰值作為輸出參數(shù)。在3 851—6 194 s,以間隔3 s的方式選取782個(gè)樣本數(shù)據(jù)進(jìn)行訓(xùn)練。隨機(jī)劃分80%的樣本數(shù)據(jù)為訓(xùn)練集,20%的樣本數(shù)據(jù)為測(cè)試集。測(cè)試集用于在完成神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程后,客觀評(píng)價(jià)模型對(duì)于新樣本的預(yù)測(cè)能力。
圖2和圖3給出了部分測(cè)試集的預(yù)測(cè)精度。圖中數(shù)據(jù)點(diǎn)近似分布于對(duì)角線上,測(cè)試集的預(yù)測(cè)值和真實(shí)值相對(duì)誤差很小。經(jīng)計(jì)算,測(cè)試集壁面熱流峰值和溫度峰值的平均誤差分別為3.16%和2.02%。表明該模型對(duì)于給定訓(xùn)練數(shù)據(jù)之外的點(diǎn)泛化能力較好,無(wú)明顯的過(guò)擬合。
圖2 測(cè)試集壁面熱流峰值預(yù)測(cè)值與真實(shí)值比較
圖3 測(cè)試集壁面溫度峰值預(yù)測(cè)值與真實(shí)值比較
圖4和圖5為整個(gè)飛行過(guò)程中壁面熱流峰值1溫度峰值的預(yù)測(cè)值和真實(shí)值的對(duì)比曲線。壁面熱流峰值和溫度峰值的平均誤差分別為3.03%和1.86%。預(yù)測(cè)值和真實(shí)值在5 500 s前輸出參數(shù)變化相對(duì)平緩的區(qū)域擬合效果較好,5 500 s后壁面熱流峰值和溫度峰值變化十分劇烈,預(yù)測(cè)精度有所下降。圖4中預(yù)測(cè)值最大值比真實(shí)值小5.93%,圖5中預(yù)測(cè)值最大值比真實(shí)值大2.56%。
圖4 壁面熱流峰值預(yù)測(cè)值與真實(shí)值比較
圖5 壁面溫度峰值預(yù)測(cè)值與真實(shí)值比較
本文構(gòu)建了一個(gè)由輸入層、隱藏層和輸出層組成的深度神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)模型,采用深度神經(jīng)網(wǎng)絡(luò)反向傳播算法以及隨機(jī)梯度下降方法,以損失函數(shù)最小為訓(xùn)練目標(biāo),形成一種機(jī)器學(xué)習(xí)的訓(xùn)練方法。對(duì)該模型進(jìn)行的算例分析表明,該模型預(yù)測(cè)精度高、非線性能力強(qiáng)、訓(xùn)練方法快速高效,達(dá)到了工程中預(yù)測(cè)熱環(huán)境參數(shù)的要求。