張洋銘,萬定生
(河海大學(xué) 計算機與信息學(xué)院,江蘇 南京 211100)
在近年來數(shù)據(jù)驅(qū)動的預(yù)測方式準確度不斷提升,水文時間序列預(yù)測取得了較大進展。除了經(jīng)典的物理模型、BP、SVM等神經(jīng)網(wǎng)絡(luò)外,易云飛等[1]提出了結(jié)合時間序列分析和卡爾曼濾波的優(yōu)化方法,有效地預(yù)測水位短期內(nèi)趨勢。余洋等[2]采用WNN-SVM組合模型對流量進行預(yù)測,驗證了改進的SVM模型對水文時間序列預(yù)測的精度有所提高。
這些算法在數(shù)據(jù)量豐富、規(guī)律明顯的大江大河的預(yù)測上取得了成功,但中小河流數(shù)量眾多,研究期短,數(shù)據(jù)量少,規(guī)律特殊。長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)憑借其優(yōu)勢,在該領(lǐng)域表現(xiàn)突出。
Widiasari等[3]將LSTM模型應(yīng)用到小流域洪水預(yù)報中。Zhang等[4]研究了水位預(yù)報中LSTM的適用性,驗證了其準確度。Kratzert等[5]證實了LSTM在小流域水文時間序列預(yù)測上有較強的預(yù)報能力。Hu等[6]驗證了在降雨及徑流方面,LSTM的預(yù)報精度較高。馮鈞等[7]提出基于LSTM-BP的組合模型預(yù)測方法,提高了中小流域預(yù)報的準確度。
上述文獻在實驗中,LSTM參數(shù)選擇往往采用試錯法[7]與一些簡單的優(yōu)化,而忽略了模型參數(shù)的影響。中小河流水文時間序列具有復(fù)雜性高與不確定性的特點,且水文模擬優(yōu)化過程往往是強非線性的[8]。本文改進粒子群優(yōu)化算法(PSO),結(jié)合注意力機制與LSTM建立組合模型,使其在中小河流水文時間預(yù)測上產(chǎn)生更好的效果。
長短時記憶神經(jīng)網(wǎng)絡(luò)(long short-term memory,LSTM)作為一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN),其神經(jīng)元能夠?qū)?dāng)前時刻信息,傳遞到下一時刻[9]。循環(huán)神經(jīng)網(wǎng)絡(luò)的具體結(jié)構(gòu)請參見文獻[9]。
然而,梯度爆炸與消失是RNN在處理時間序列最容易出現(xiàn)的問題,因此導(dǎo)致對于時間周期稍長的序列特征難以學(xué)習(xí)[10]。為了解決這個問題,LSTM被提出。
圖1是LSTM神經(jīng)元的內(nèi)部結(jié)構(gòu)示意圖。當(dāng)前時刻為t,ht-1、ct-1分別為(t-1)時刻序列神經(jīng)元的隱藏狀態(tài)變量與細胞狀態(tài)變量,xt為當(dāng)前時刻的輸入序列。信息被輸入到神經(jīng)元,依次通過內(nèi)部遺忘門ft、輸入門it與輸出門ot,計算得到當(dāng)前時刻t序列的ht與ct。ht與ct繼續(xù)傳入下一時刻神經(jīng)元的同時,會傳入輸出層,生成時間序列在t時刻的預(yù)測結(jié)果yt,組成結(jié)果集
ft=σ(Wf*[ht-1,xt]+bf)
(1)
遺忘門決定了從當(dāng)前時刻狀態(tài)中遺忘什么內(nèi)容。根據(jù)上一時刻神經(jīng)元狀態(tài),遺忘門會讀取ht-1和xt,輸出一個在0(“完全拋棄”)到1(“完全保留”)之間的數(shù)值給每個在細胞狀態(tài)ct-1中的數(shù)字,決定遺忘程度。σ為Sigmoid激活函數(shù)
it=σ(Wi*[ht-1,xt]+bi)
(2)
(3)
輸入門決定讓多少新的信息加入到當(dāng)前時刻中。it根據(jù)式(2)決定哪些信息需要更新,式(3)通過激活函數(shù)tanh備選用來更新的內(nèi)容,共同對細胞狀態(tài)進行更新
ot=σ(Wo*[ht-1,xt]+bo)
(4)
ht=ot*tanh(ct)
(5)
輸出門首先通過式(4)決定細胞狀態(tài)哪個部分將被輸出,再通過式(5),tanh激活函數(shù)處理,輸出到下一層細胞。

圖1 LSTM內(nèi)部結(jié)構(gòu)
神經(jīng)元的細胞狀態(tài)變量ct在與其它單元傳遞信息中,保持線性交互,能夠保持長時序列特征不變,因此使得模型在訓(xùn)練過程中避免出現(xiàn)梯度爆炸與消失的問題,保證了LSTM具有長時記憶能力。使得神經(jīng)網(wǎng)絡(luò)大大提升了對時間序列的記憶能力,更適用于處理時間序列。
粒子群優(yōu)化算法(particle swarm optimization,PSO)定義請參見文獻[11]。作為一種進化計算技術(shù),通過種群中的個體間協(xié)作和相互之間信息傳遞,讓群體求解空間不斷更新,在問題的演化中產(chǎn)生從無序到有序的過程,從而得到最優(yōu)解。原理描述如下:
首先在需要求解的一個d維搜索空間中,初始化m個粒子。求解過程中算法迭代n次。假設(shè)在第t次迭代中,第i個粒子 (i=1,2,…,m) 的位置向量為xi=(xi,1,xi,2,…,xi,t), 速度向量為vi=(vi,1,vi,2,…,vi,t), 第i個粒子至今為止搜索到的最優(yōu)位置為pbesti,整個種群至今為止搜索到的最優(yōu)位置為gbesti。
那么,在尋找最優(yōu)解的過程中,每個粒子在第t次迭代后下一時刻的速度和位置,分別按照式(6)、式(7)進行更新
vi,t+1=w*vi,t+c1*rand*(pbesti-xi,t)+c2*rand*(gbesti-xi,t)
(6)
xi,t+1=xi,t+λ*vi,t+1
(7)
其中,w為慣性權(quán)重,影響粒子收斂速度;c1和c2為學(xué)習(xí)因子,用來調(diào)整個體與群體最優(yōu)解的比例;rand為[0,1]之間的隨機數(shù);λ為速度系數(shù)。
由公式原理可知,粒子速度更新的過程,有3個影響因子:粒子自身之前時刻對目前狀態(tài)變化的影響、粒子自身迭代過程中的變化、群體搜索結(jié)果對個體粒子的影響。
針對PSO與LSTM的原理,結(jié)合中小河流水文數(shù)據(jù)的特點,本文對算法進行以下改進,構(gòu)建改進的PSO-LSTM組合模型。
粒子群算法在尋找最優(yōu)解的過程中容易陷入早熟和收斂速度慢的缺陷。針對此問題,本文引入變異算子,將粒子群體趨于一致性與粒子變異結(jié)合,增加粒子多樣性和尋優(yōu)能力。同時對慣性權(quán)重進行調(diào)整,將固定權(quán)重改為非線性變化權(quán)重,改善了收斂精度和速度。在此基礎(chǔ)上,加入對收斂標準的優(yōu)化,使算法在全局尋優(yōu)過程中保證效率。
2.1.1 改進慣性權(quán)重
由PSO算法計算公式可知,粒子變化速度公式中w為慣性權(quán)重,是維持著上一時刻速度趨勢的系數(shù)。w系數(shù)大,全局尋優(yōu)能力強,w系數(shù)小,局部尋優(yōu)能力較強。因此,固定的w減弱了算法的全局尋優(yōu)能力,并減慢算法的收斂速度。本文提出利用非線性變化慣性權(quán)重來提高PSO的性能。將w改為如下形式
(8)
其中,wmax和wmin分別為w的最大值和最小值;t為當(dāng)前代次數(shù);tmax為最大迭代次數(shù)。w隨迭代次數(shù)變化圖像如圖2所示。

圖2 慣性權(quán)重變化曲線
圖2為改進后的慣性權(quán)重變化曲線,當(dāng)t較小時,w接近于wmax,并且w的減少速度也較慢,保證了算法的全局尋優(yōu)能力;隨著t增大,w以非線性遞減,并且w的減少速度逐漸增加,保證了算法的局部尋優(yōu)能力。通過改進慣性權(quán)重,從而使原來較弱尋優(yōu)能力的算法能夠在前期快速搜索全局最優(yōu)解,后期增加局部解的尋找,尋優(yōu)能力更強。
2.1.2 改進粒子種群
除了對慣性權(quán)重的改進,為了使粒子更加豐富,本文提出對粒子種群進行改進。
在遺傳算法中有一個重要的概念:變異算子,基本思想是模擬基因突變,產(chǎn)生更加多樣的種群,在求解全局最優(yōu)問題上保證了良好的魯棒性。本文參考了該算法中變異算子的思想,在粒子群算法中增加改進粒子種群的自適應(yīng)變異操作,主要目的在于維持種群的多樣性,減小粒子在搜索過程中同化的概率。可以有效地防止算法過早收斂于局部最優(yōu)解,從而增強算法的全局尋優(yōu)能力。自適應(yīng)變異的概率公式為
(9)
其中,t為當(dāng)前迭代次數(shù),tmax為最大迭代次數(shù)。該方法在實驗過程的實現(xiàn)如算法1所示。
算法1:
(1) For i in range(粒子數(shù))
(2) 根據(jù)自適應(yīng)變異公式判斷是否rand>σ
/*rand為[0,1]之間生成隨機數(shù)*/
(3) For j in range(搜索緯度)
(4) Do 更新最優(yōu)解
(5) End for
(6) Do 記錄gbest, pbest
/*pbest:個體最優(yōu), gbest:全局最優(yōu)*/
(7) End for
(8) For t in range(最大迭代次數(shù))
(9) Do 更新gbest, pbest
(10) End for
在該算法中,往單個粒子搜索最優(yōu)解時加入自適應(yīng)變異公式,隨機rand數(shù)在緯度搜索前對全局最優(yōu)解更新做出限制。隨著迭代次數(shù)增加,自適應(yīng)變異公式呈非線性增加,隨機rand數(shù)大于自適應(yīng)變異公式σ的概率減小,從而隨著粒子數(shù)增加,粒子群變異的幾率減小。從而可以保證粒子群的多樣性,減少粒子受其它粒子影響,逐漸同化,陷入局部最優(yōu)的風(fēng)險。
2.1.3 極值擾動
由粒子群算法的原理可知,單個粒子更新的狀態(tài)會受到當(dāng)前群體最優(yōu)值和個體最優(yōu)值的雙重吸引。這促使粒子向由個體當(dāng)前位置、個體歷史最優(yōu)位置與群體當(dāng)前最優(yōu)位置所構(gòu)成的扇形區(qū)域內(nèi)移動。使得搜索范圍得不到擴散,粒子陷入“早熟”。
在粒子的收斂判斷中,種群適應(yīng)度方差δ2反映了種群個體的聚集程度,δ2越小,則種群個體的聚集程度越小。因此,在標準的粒子群算法中,δ2會隨著迭代次數(shù)越來越小,粒子群可能會過快由分散變密集。
本文對群體最優(yōu)值進行擾動操作,擾動公式為
Gbest=gbest+ε
(10)
其中,gbest是群體的全局極值在第d維的分量,ε為隨機擾動量,是第t次迭代,粒子在第d維位置的平均值,乘隨機數(shù)rand得到的。Gbest為擾動后的全局極值。對極值進行擾動之后效果如圖3所示。

圖3 Rastrigin適應(yīng)度曲線
圖3為采用Rastrigin函數(shù)的結(jié)果驗證對比圖,PSO為未改進的效果,Pre_PSO為改進之后的效果。根據(jù)結(jié)果來看,粒子在更新自己狀態(tài)過程中,加入了隨機擾動變量,根據(jù)擾動后的全局狀態(tài)Gbest進行更新,使得單個粒子在運動過程中受群體最優(yōu)位置影響情況減小,粒子會向未搜索到的方向傾斜,有效地擴大了粒子本身搜索范圍。在群體中防止過早早熟收斂現(xiàn)象。從圖像表現(xiàn)可以看出減緩收斂的趨勢以及跳出局部最優(yōu)的能力。
LSTM在長時間序列處理上表現(xiàn)良好,但序列中不同特征重要程度具有差異,影響信息選擇。針對此問題,本文引入注意力機制(attention mechanism)對LSTM模型進行改進。
采用注意力機制目的是實現(xiàn)LSTM中資源應(yīng)用高效,一般步驟如下:信息輸入;計算注意力分布α;由α計算出輸入信息xi的加權(quán)平均作為輸出結(jié)果輸入到分類器。本文基于縮放點積模型(scaled dot-product attention),在實驗過程中與LSTM模型結(jié)合計算如下
αi=softmax(s(xi,q))
(11)
(12)
式中:αi為注意力分布,xi為輸入信息,q為序列向量,d為縮放系數(shù),引入注意力機制與LSTM的記憶單元結(jié)合,模型如圖4所示。

圖4 基于注意力機制的LSTM模型
圖4為基于注意力機制的LSTM模型原理圖,將一個預(yù)測序列元素q,計算鍵(Key)的概率分布并傳遞到值(Value)上(Key與Value是Source構(gòu)成元素),得到每個Key對應(yīng)Value的權(quán)重系數(shù),加權(quán)求和后,從而輸入到LSTM網(wǎng)絡(luò)實現(xiàn)時間序列預(yù)測,不斷循環(huán)訓(xùn)練。這個過程體現(xiàn)了注意力機制對差異特征進行選擇的特性:從大量信息中選擇出關(guān)鍵部分,不用將所有特征都輸入到神經(jīng)網(wǎng)絡(luò)模型中計算。根據(jù)訓(xùn)練好的權(quán)重對序列進行預(yù)測,使多變量輸入的LSTM模型對時間序列的處理能力更強,預(yù)測準確率更高。
引入注意力機制可以提高對時間序列特征的細粒度提取能力,實現(xiàn)高效信息優(yōu)化與神經(jīng)網(wǎng)絡(luò)訓(xùn)練能力。
將改進后的粒子群算法與基于注意力機制的LSTM結(jié)合建立組合模型,將其稱之為Pre_PSO-LSTM模型,實現(xiàn)過程描述如下:
步驟1 對原始數(shù)據(jù)進行去噪、均值歸一化、劃分數(shù)據(jù)集等預(yù)處理;
步驟2 初始化參數(shù)。確定粒子種群規(guī)模、迭代次數(shù)、學(xué)習(xí)因子以及位置和速度取值的限定區(qū)間;
步驟3 初始化粒子的位置和速度。隨機生成一個種群粒子xi,0(α,ε,h1,h2),i為粒子個數(shù),優(yōu)化的超參數(shù)為α,為LSTM的學(xué)習(xí)率,ε為LSTM的epochs,h1,h2為雙層隱含層神經(jīng)元數(shù)。
步驟4 初始化LSTM。根據(jù)式(11),引入注意力機制,對Dense進行處理,轉(zhuǎn)換維度后與神經(jīng)網(wǎng)絡(luò)相結(jié)合。
步驟5 確定粒子的評價函數(shù)。將步驟2中得到的粒子xi,0對LSTM的參數(shù)賦值。將個體xi的適應(yīng)度定義為
(13)
將訓(xùn)練集與測試集的評價指標融合作為適應(yīng)度函數(shù)。防止只利用訓(xùn)練樣本的擬合誤差作為適應(yīng)度值,得到的模型預(yù)測效果是過擬合的。
步驟6 標記每個粒子當(dāng)前位置xi并計算對應(yīng)的適應(yīng)度值,確定極值并標記歷史最佳位置。
步驟7 在循環(huán)迭代中,采用算法1更新粒子速度和位置并計算新的適應(yīng)度值,根據(jù)式(10)對極值進行擾動更新粒子個體極值和群體極值。
步驟8 滿足算法最大迭代次數(shù)后,將測試集輸入利用最優(yōu)粒子訓(xùn)練好的改進后的LSTM模型,輸出預(yù)測結(jié)果。
改進的PSO-LSTM模型針對于水文時間序列預(yù)測具有以下優(yōu)勢:
水文時間序列具有非線性、非平穩(wěn)性和多時間尺度變化的特征,針對水文時間序列數(shù)據(jù)復(fù)雜且高維的問題,組合模型通過改進LSTM模型將其與注意力機制相結(jié)合,能夠更好地挖掘出各組信息對序列預(yù)測的影響,篩選出有效的特征,提高水文數(shù)據(jù)預(yù)測的精度。由于水文領(lǐng)域的特殊性,中小河流觀測數(shù)據(jù)的完整性無法保證,連續(xù)的數(shù)據(jù)記錄往往存在異常點,這些噪音對模型訓(xùn)練產(chǎn)生影響,上述提出的變異算子算法與極值擾動方法能較好地減少異常點對粒子群算法的干擾。同時,水文數(shù)據(jù)變化幅度大,時變速率快,預(yù)見期短,改進慣性權(quán)重的方法不僅提高了PSO算法的尋優(yōu)能力,也更適用于組合模型預(yù)測具備此特征的中小河流水文時間序列。
實驗基于TensorFlow2.0.0框架進行編碼,所用平臺為PyCharm2018.2.2x64,搭載的操作系統(tǒng)為Windows 10。
采用的數(shù)據(jù)集為屯溪流域從2016年1月1日至2016年8月31日共計5800個小時雨量及水位數(shù)據(jù)。屯溪水文站位于屯溪流域的匯流出口處,根據(jù)屯溪流域的雨量站點情況,依據(jù)相關(guān)性分析法,將該流域劃分為11個單元流域,對應(yīng)11個關(guān)鍵雨量站,分別為黟縣、儒村、巖前、呈村、上溪口、五城、屯溪、大連、左龍、休寧和石門。出口斷面水位主要與該11個雨量站的雨量有關(guān),因此采用雨量站雨量作為模型自變量之一。圖5為屯溪流域相關(guān)雨量站分布圖。

圖5 屯溪流域相關(guān)測站分布
數(shù)據(jù)集被分為兩部分,一部分是訓(xùn)練數(shù)據(jù)共4060條,用于訓(xùn)練調(diào)整模型權(quán)值和系數(shù);另一部分是測試數(shù)據(jù)共1740條,為汛期數(shù)據(jù),用于測試預(yù)測效果。預(yù)熱期為6小時,預(yù)見期為3小時,運用前6小時11個站點的面雨量以及當(dāng)前小時屯溪的水位來預(yù)測未來水位。
根據(jù)《水文情報預(yù)報規(guī)范》,對水文時間序列預(yù)測的評價指標可以采用絕對誤差、相對誤差、均方根誤差、決定系數(shù)等,本文采用均方根誤差與決定系數(shù)。
3.2.1 均方根誤差
均方根誤差(RMSE),在整個預(yù)報的過程中,預(yù)測值與真實值之間的偏差的程度,值越小表明結(jié)果與真實值相差越小,其計算公式如下。其中,ytest為測試樣本真實值,ypre為預(yù)測值,n為測試樣本數(shù)
(14)
3.2.2 決定系數(shù)
決定系數(shù)(R2),反映因變量的全部變異能通過回歸關(guān)系被自變量解釋的比例。值越接近1,表示模型擬合效果越好。計算公式如式(15)所示。其中,ytest為測試樣本真實值,ypre為預(yù)測值,ymean為平均值
(15)
為了驗證改進粒子群算法的效果,采用原始PSO算法以及改進后的Pre_PSO算法分別對5維sphere測試函數(shù)尋優(yōu),進行對比實驗,兩種算法各迭代1000次。將其結(jié)果進行處理放大呈現(xiàn),得到適應(yīng)度曲線如圖6所示。

圖6 算法改進尋優(yōu)能力對比
由圖6中曲線走勢可以看出,傳統(tǒng)的PSO算法迭代時很早陷入了局部最優(yōu)解,不再具備尋優(yōu)能力。而改進后的Pre_PSO算法展現(xiàn)了強大的跳出局部最優(yōu)能力,在1000次迭代后,依然有能力繼續(xù)尋找最優(yōu)解。驗證了改進后粒子群算法的優(yōu)勢。
對屯溪流域雨量水位數(shù)據(jù)進行處理后,用傳統(tǒng)LSTM模型、未改進的PSO-LSTM模型與本文改進的Pre_PSO-LSTM模型分別對水位進行預(yù)測,3種模型的對真實值、預(yù)測值、絕對誤差比情況見表1。

表1 3種模型預(yù)測結(jié)果對比

表1(續(xù))
將PSO-LSTM與改進后的Pre_PSO-LSTM組合模型進行預(yù)測結(jié)果對比。從真實值與預(yù)測值的絕對誤差可以看出,未改進的模型沒有引入注意力機制,且容易陷入局部最優(yōu)解,在模型預(yù)測效果上稍差。在實驗條件相同的情況下,預(yù)測精度與改進后的算法相比有一定差距。
在屯溪流域數(shù)據(jù)集上,對傳統(tǒng)BP模型、SVM模型進行訓(xùn)練,將幾種模型訓(xùn)練后最好的結(jié)果進行對比實驗,預(yù)測結(jié)果評價指標見表2。

表2 各模型預(yù)測效果對比
通過實驗驗證,BP、SVM在屯溪流域樣本數(shù)據(jù)預(yù)測中表現(xiàn)不盡如人意,LSTM表現(xiàn)相對較好,符合預(yù)期的更適用于中小河流水文時間序列預(yù)測的猜想。本文在對粒子群算法進行改進并引入注意力機制與LSTM結(jié)合后,有效地提高了模型擬合效果,預(yù)測精度有一個明顯提升,改進后的Pre_PSO-LSTM模型表現(xiàn)較為突出。
為了讓實驗對比結(jié)果更為直觀明顯,選取了測試集中部分水位變化有代表性的樣本數(shù)據(jù)作為實驗結(jié)果,展示真實值與預(yù)測值的對比效果。圖7、圖8分別為不同時間段24小時的水位變化,LSTM、PSO-LSTM、Pre_PSO-LSTM這3種模型對比實驗的預(yù)測效果,結(jié)果如下。

圖7 各模型預(yù)測效果對比1

圖8 各模型預(yù)測效果對比2
將該模型用于東山、漳州等中小流域進行水位預(yù)測,效果同樣顯著。驗證該模型在中小河流水文預(yù)測方面預(yù)測效果符合預(yù)期。
本文提出基于改進粒子群算法,結(jié)合注意力機制優(yōu)化LSTM的中小流域水文時間序列預(yù)測模型。改進后的算法與單一的優(yōu)化算法相比,擴大了全局搜索能力,更能克服尋優(yōu)過程中陷入局部最優(yōu)的狀態(tài),并大大增加了局部尋優(yōu)效率。組合模型與單一LSTM模型預(yù)測相比,能較好地解決參數(shù)選擇問題,特征選擇能力明顯提升。通過對屯溪等流域水位數(shù)據(jù)進行應(yīng)用分析。實驗驗證,相比于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型,該組合模型更加適用于復(fù)雜樣本的中小流域水文時間序列的預(yù)測規(guī)律,有效提高預(yù)測準確度。