劉 艷,張 婷,康愛卿,李建柱,雷曉輝
(1.天津大學(xué)水利工程仿真與安全國家重點(diǎn)實(shí)驗(yàn)室,天津 300072;2.中國水利水電科學(xué)研究院流域水循環(huán)模擬與調(diào)控國家重點(diǎn)實(shí)驗(yàn)室,北京 100038)
水位預(yù)測對水資源的合理開發(fā)、利用及優(yōu)化配置具有重要意義。由于河流水位受多方面因素的影響,變化頻繁,因此短期的精細(xì)化預(yù)測相對中長期的趨勢預(yù)測更有實(shí)際價(jià)值。目前,水位預(yù)測的研究方法可以歸納為兩類,即過程驅(qū)動(dòng)模型和數(shù)據(jù)驅(qū)動(dòng)模型。過程驅(qū)動(dòng)模型通過有物理依據(jù)及經(jīng)驗(yàn)性的公式,描述水流運(yùn)動(dòng)與影響因素的關(guān)系,由于影響水位的因素較多,考慮降雨、地形、水工建筑物等的物理模型會(huì)十分復(fù)雜,模型精度很難達(dá)到水位控制要求[1]。數(shù)據(jù)驅(qū)動(dòng)模型通過挖掘輸入與輸出數(shù)據(jù)之間的相關(guān)信息進(jìn)行預(yù)測,而不研究物理過程。常用的模型包括以數(shù)理統(tǒng)計(jì)為基礎(chǔ)的時(shí)間序列分析,以及以人工神經(jīng)網(wǎng)絡(luò)(artificial neural network,ANN)、支持向量機(jī)(support vector machine,SVM)為代表的機(jī)器學(xué)習(xí)。已有的研究采用一種或集合多種數(shù)據(jù)驅(qū)動(dòng)方法建立水位預(yù)測模型,并使用遺傳算法等優(yōu)化方法獲得最優(yōu)參數(shù)[2-5]。數(shù)據(jù)驅(qū)動(dòng)模型在水位預(yù)測方面取得了豐碩的成果,但仍存在很大的改進(jìn)空間,如傳統(tǒng)SVM模型只能單步輸出,以及淺層神經(jīng)網(wǎng)絡(luò)不足以充分挖掘數(shù)據(jù)的所有特征等。
近年來,人工智能和大數(shù)據(jù)驅(qū)動(dòng)技術(shù)給水文研究帶來了新的研究思路和技術(shù)方法,以深度學(xué)習(xí)為代表的新一代人工神經(jīng)網(wǎng)絡(luò)已經(jīng)在水文領(lǐng)域進(jìn)行探索性應(yīng)用[6]。深度學(xué)習(xí)是一種特殊的機(jī)器學(xué)習(xí)方法,從簡單的線性網(wǎng)絡(luò)發(fā)展到經(jīng)典的生成式對抗網(wǎng)絡(luò)(generative adversarial networks,GAN),經(jīng)歷了深度信念網(wǎng)絡(luò)(deep belief network,DBN)、稀疏編碼(sparse coding)、卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)、結(jié)構(gòu)遞歸神經(jīng)網(wǎng)絡(luò)(recursive neural network,RNN)的快速迭代[7]。長短期記憶網(wǎng)絡(luò)(long short-term memory,LSTM)是RNN的改進(jìn)版,通過引入記憶門控單元緩解梯度消失,是進(jìn)行時(shí)間序列數(shù)據(jù)仿真模擬及預(yù)測的首選。在水位預(yù)測方面,LSTM模型受到越來越多的關(guān)注,相關(guān)研究成果已表明LSTM模型預(yù)測精度較高,預(yù)測效果優(yōu)于SVM、RNN等模型[8-14]。然而,現(xiàn)有的大部分研究是預(yù)測未來某個(gè)時(shí)間的水位,而不是水位序列。有少數(shù)研究對多步水位進(jìn)行預(yù)測,但沒有考慮數(shù)據(jù)輸出的先后順序。
序列到序列(sequence-to-sequence,Seq2Seq)模型是一種由序列生成序列,且序列長度互不影響的模型,被廣泛應(yīng)用于機(jī)器翻譯、行為預(yù)測等任務(wù)中[15-17]。水位序列與語言上下文以及其他時(shí)間序列具有相似的特征,但Seq2Seq模型在水位預(yù)測方面的研究甚少。因此,本文提出了一種基于Seq2Seq模型的短期多步水位預(yù)測模型,以克服上述數(shù)據(jù)驅(qū)動(dòng)模型存在的不足。以流溪河的水位數(shù)據(jù)為例,對所提模型進(jìn)行驗(yàn)證,并與LSTM和ANN模型進(jìn)行比較,分析評(píng)價(jià)預(yù)測精度和計(jì)算效率。
流溪河位于廣東省廣州市北部,地理位置介于113°10′12″E~114°2′00″E,23°12′30″N~23°57′36″N之間。流溪河是廣州市轄區(qū)內(nèi)唯一的一條全流域河流,也是集雨面積最大的河流[18]。河流全長約為171 km,流域面積約為2 300 km2。該流域處于亞熱帶季風(fēng)氣候區(qū),氣候溫濕,雨量豐沛。年平均降雨量為1 800 mm,年徑流量約為28.4億m3。84%的降雨集中在汛期(4—9月),有較強(qiáng)的季節(jié)性。
流溪河梯級(jí)閘壩工程開發(fā)力度較大,從上至下共有11座攔河閘壩,依次為良口壩、青年壩、勝利壩、衛(wèi)東壩、人工湖壩、水廠壩、街口壩、大坳壩、牛心嶺壩、李溪壩和人和壩[19]。流溪河是廣州市最早的供水水源地,目前仍然是重要的工農(nóng)業(yè)和生活用水水源地,廣州市30%的自來水來自流溪河,被譽(yù)為廣州的“母親河”。攔河閘壩的修筑對于廣州市水資源開發(fā)利用發(fā)揮著重要作用。本文選取良口壩、大坳壩和李溪壩為研究對象,如圖1所示。
圖1 流溪河及攔河壩位置示意圖
本文采用的數(shù)據(jù)長度為2014年10月至2020年5月,監(jiān)測頻率為1h,其中,2014年10月至2018年2月為訓(xùn)練期,2018年3月至2020年5月為驗(yàn)證期。
數(shù)據(jù)質(zhì)量是影響數(shù)據(jù)驅(qū)動(dòng)模型效果的關(guān)鍵因素。在建模之前要對原始數(shù)據(jù)進(jìn)行預(yù)處理,包括數(shù)據(jù)整理和數(shù)據(jù)變換。針對水位數(shù)據(jù),數(shù)據(jù)整理主要是噪聲數(shù)據(jù)識(shí)別和空缺值填充。噪聲數(shù)據(jù)是指在測量和收集數(shù)據(jù)時(shí)由機(jī)器采集或者人為造成的誤差。噪聲數(shù)據(jù)遠(yuǎn)遠(yuǎn)超過或不及其他數(shù)據(jù),明顯偏離一般水平,一般將其剔除然后按照空缺值的方法填充。空缺值是指較少且不連續(xù)的數(shù)據(jù)缺失,一般采用平均值、眾數(shù)等進(jìn)行填充??紤]到研究對象水位時(shí)間間隔較短,對于空缺值采用線性插值的方式處理。數(shù)據(jù)變換是對數(shù)據(jù)進(jìn)行規(guī)范化,本文采用標(biāo)準(zhǔn)化算法對模型輸入數(shù)據(jù)進(jìn)行處理[20],處理后的序列均值為0,標(biāo)準(zhǔn)差為1。計(jì)算公式為
(1)
本文利用歷史水位作為輸入,預(yù)測未來一定時(shí)間內(nèi)的連續(xù)水位,因此選用處理時(shí)間序列的神經(jīng)網(wǎng)絡(luò)。LSTM是RNN的一種特殊類型,可以從隱藏的長期依賴信息中學(xué)習(xí)[21]。LSTM通過引入門控單元統(tǒng)籌并傳遞對當(dāng)前時(shí)刻重要的歷史信息,提升了循環(huán)神經(jīng)網(wǎng)絡(luò)的長時(shí)間記憶,并保持了訓(xùn)練過程中梯度下降的穩(wěn)定性。但LSTM的每一個(gè)輸入都對應(yīng)一個(gè)輸出,因此只能處理輸入輸出序列時(shí)序一致的數(shù)據(jù)。
Seq2Seq模型最初是因機(jī)器翻譯而誕生,隨后被廣泛用于處理輸出序列長度與輸入序列長度無關(guān)的相關(guān)任務(wù)。Seq2Seq模型由編碼器和解碼器組成,編碼器和解碼器本質(zhì)上是循環(huán)神經(jīng)網(wǎng)絡(luò)。編碼器將可變長度序列數(shù)據(jù)編碼為一個(gè)固定長度的中間向量,解碼器將固定長度的中間向量進(jìn)行解碼作為預(yù)測輸出,實(shí)現(xiàn)了任意長度的輸入序列可以映射到任意長度的輸出序列的目的。
在實(shí)際應(yīng)用中,編碼器和解碼器有多種選擇,本文選用兩個(gè)LSTM模塊組成Seq2Seq模型對水位進(jìn)行預(yù)測。當(dāng)輸入歷史時(shí)間序列的長度為n,預(yù)測輸出時(shí)間序列的長度為m時(shí),構(gòu)造的輸入向量X及輸出向量Y如下:
X=(X1,X2,X3,…,XN)
(2)
Y=(Y1,Y2,Y3,…,YN)
(3)
Xi=(x1+m(i-1),x2+m(i-1),x3+m(i-1),…,xn+m(i-1))
(4)
Yi=(xn+1+m(i-1),xn+2+m(i-1),xn+3+m(i-1),…,xn+mi)
(5)
式中:N為樣本總數(shù);Xi、Yi分別為第i個(gè)樣本的輸入和輸出(i=1,2,…,N)。此種輸入輸出向量構(gòu)造方法可同時(shí)得到一個(gè)預(yù)測長度的各步長預(yù)測結(jié)果,避免了使用前一步預(yù)測結(jié)果作為真實(shí)值輸入所造成的誤差累積。
將樣本(X1,Y1)代入Seq2Seq模型中,其中X1=(x1,x2,…,xn)表示輸入的歷史水位,Y1=(y1,y2,…,ym)表示輸出的預(yù)測水位。編碼器由單層LSTM單元組成,將輸入序列按照時(shí)間順序分步讀入,每一時(shí)刻的隱藏層狀態(tài)ht都由當(dāng)前時(shí)刻的輸入數(shù)據(jù)xt與上一時(shí)刻的隱藏層狀態(tài)ht-1和細(xì)胞狀態(tài)ct-1共同決定,即
ht=f(xt,ht-1,ct-1)
(6)
式中:ht、ht-1分別為t時(shí)刻、t-1時(shí)刻編碼層的LSTM神經(jīng)元隱藏層狀態(tài);xt為t時(shí)刻的輸入;ct-1為t-1時(shí)刻編碼層的LSTM神經(jīng)元細(xì)胞狀態(tài)。
LSTM單元內(nèi)部由輸入門、遺忘門和輸出門組成。首先,遺忘門決定舍棄多少細(xì)胞狀態(tài)ct-1;接下來,輸入門決定保留多少當(dāng)前外部信息(即輸入xt),并生成候選細(xì)胞狀態(tài)ct;然后,根據(jù)遺忘門和輸入門的結(jié)果更新細(xì)胞狀態(tài)ct;最后,輸出門決定輸出細(xì)胞狀態(tài)ct的哪些狀態(tài)特征,并生成隱藏層狀態(tài)ht。當(dāng)t=1時(shí),h0和c0對應(yīng)編碼層起始狀態(tài)隱藏層的輸出,采用0進(jìn)行初始化。上述過程對應(yīng)公式如下:
ft=σ(Wf(ht-1,xt)+bf)
(7)
it=σ(Wi(ht-1,xt)+bi)
(8)
(9)
(10)
ot=σ(Wo(ht-1,xt)+bo)
(11)
ot=ottanhct
(12)
(13)
(14)
式中yt為t時(shí)刻的輸出。經(jīng)過分步解碼,形成最終的輸出序列。
對良口壩、大坳壩和李溪壩的逐小時(shí)水位進(jìn)行連續(xù)6 h、12 h和24 h的預(yù)測,即模型輸出長度m分別是6 h、12 h、24 h。深度學(xué)習(xí)模型參數(shù)有兩類:一類是可訓(xùn)練參數(shù),通過訓(xùn)練集自動(dòng)率定,主要是研究方法中提到的權(quán)重和偏置;另一類是超參數(shù),根據(jù)訓(xùn)練過程中評(píng)價(jià)指標(biāo)的結(jié)果進(jìn)行經(jīng)驗(yàn)調(diào)參。Seq2Seq模型的計(jì)算步驟及參數(shù)設(shè)置如下:
步驟1對數(shù)據(jù)進(jìn)行預(yù)處理。
步驟2設(shè)置模型預(yù)測目標(biāo)及輸入數(shù)據(jù)。模型預(yù)測長度m分別為6 h、12 h、24 h,模型輸入長度n分別設(shè)為72 h、168 h、168 h。
步驟3建立編碼層與解碼層的網(wǎng)絡(luò)結(jié)構(gòu)。編碼層和解碼層均為單層LSTM,編碼層隱藏層單元數(shù)量分別為32、128、128,解碼層隱藏層單元數(shù)量分別為8、64、64。
步驟4利用訓(xùn)練集的樣本訓(xùn)練模型。訓(xùn)練過程以均方誤差為損失函數(shù),使用ADAM優(yōu)化模型參數(shù),學(xué)習(xí)率為0.001。由于數(shù)據(jù)集較大,將批量尺寸參數(shù)batch-size設(shè)置為256,最大訓(xùn)練次數(shù)設(shè)為200。
步驟5對模型輸出進(jìn)行反歸一化處理,得到水位預(yù)測結(jié)果。
步驟6結(jié)果分析。
本文采用納什效率系數(shù)(NSE)、均方根誤差(RMSE)和平均絕對誤差(MAE)定量評(píng)價(jià)模型的預(yù)測性能,NSE的變化范圍從-∞到1,越接近1,擬合越完美,模型可信度越高。同時(shí)采用RMSE和MAE衡量模擬值和實(shí)測值之間的偏差,變化范圍從0到+∞,越接近0,模型整體模擬效果越好。當(dāng)MAE相等時(shí),RMSE越大,數(shù)據(jù)離散度越高。
選擇NSE、RMSE和MAE對Seq2Seq模型在良口壩、大坳壩和李溪壩的短期水位預(yù)測結(jié)果進(jìn)行評(píng)價(jià),結(jié)果見表1。由表1可知:在所有預(yù)測時(shí)間,MAE均小于0.1 m;NSE均大于0.7,最大值為0.98;RMSE最大值為0.17 m;Seq2Seq模型取得了較好的預(yù)測效果。對比同一站點(diǎn)不同預(yù)測長度的評(píng)價(jià)指標(biāo)結(jié)果可以發(fā)現(xiàn),當(dāng)預(yù)測長度為6 h時(shí),NSE均大于0.9,模型的預(yù)測效果最佳。隨著預(yù)測長度的增加,RMSE和MAE不斷增大,而NSE不斷減小。以良口壩為例,預(yù)測長度從6 h增加到24 h時(shí),測試集的NSE降低了0.08,RMSE和MAE分別增加了0.06 m、0.02 m。
表1 各站點(diǎn)預(yù)測結(jié)果對比
圖2給出了3種不同預(yù)測長度下各站點(diǎn)測試集的預(yù)測與實(shí)測水位對比,從中可以看出,Seq2Seq模型能夠較好地反映壩上水位隨時(shí)間的波動(dòng)趨勢。各個(gè)站點(diǎn)連續(xù)6 h的預(yù)測水位與實(shí)測水位最接近,連續(xù)24 h的預(yù)測水位不能很好地再現(xiàn)實(shí)測水位漲落過程。Seq2Seq模型對于高水位或低水位(極值)的預(yù)測效果相對較差。為了定量分析預(yù)測誤差大小,計(jì)算良口壩水位小于64 m,大坳壩水位大于24 m以及李溪壩水位小于10 m范圍內(nèi)水位預(yù)測的最大誤差、最小誤差和MAE,結(jié)果如表2所示。由表2可知,總體上MAE隨預(yù)測長度的增大而增大。與表1相比,極值預(yù)測的MAE遠(yuǎn)高于全過程的MAE,說明模型整體預(yù)測性能較好,但對極值的預(yù)測略有不足。這主要是由于影響水位的因素較多,比如閘壩調(diào)度、灌溉取水等,只考慮歷史水位數(shù)據(jù)不能很好地呈現(xiàn)水位突變的趨勢。
圖2 基于Seq2Seq的水位預(yù)測對比
表2 各站點(diǎn)極值的預(yù)測誤差對比
此外,對于測試集,在預(yù)測長度分別為6 h、12 h、24 h的情況下,大坳壩的NSE比良口壩的NSE依次小0、0.07和0.07,李溪壩的NSE比良口壩的NSE依次小0.01、0.08和0.12。結(jié)合NSE和水位過程對比可以看出,良口壩的水位預(yù)測效果最好,大坳壩次之,李溪壩較差。這是由于從河流上游至下游,隨著預(yù)測站點(diǎn)到河源的距離增大,影響水位的因素增加;同時(shí),當(dāng)預(yù)測長度增大時(shí),上下游站點(diǎn)之間差異有增大的趨勢。
為了便于模型之間的比較,除Seq2Seq模型外,本文還構(gòu)建了LSTM模型和ANN模型。ANN模型采用的是最基本的3層結(jié)構(gòu),即輸入層、隱藏層、輸出層,又稱為全連接神經(jīng)網(wǎng)絡(luò)(full connected neural networks, FCNN)[22]。LSTM模型和ANN模型隱藏層的神經(jīng)元數(shù)量與Seq2Seq模型的編碼層神經(jīng)元數(shù)量一致,其他參數(shù)也與Seq2Seq模型相同?;跍y試集,對比分析Seq2Seq、LSTM和ANN模型的預(yù)測結(jié)果。
圖3~5為3種模型在不同預(yù)測長度下的評(píng)價(jià)指標(biāo)。從圖3~5可以看出,ANN模型的NSE均小于0.9,最小值為0.67,RMSE和MAE的最大值分別超過了0.20 m和0.10 m。LSTM和Seq2Seq模型的NSE最小值分別為0.70和0.73,MAE最大值分別為0.09 m和0.08 m,可見這兩個(gè)深度學(xué)習(xí)模型各項(xiàng)指標(biāo)均優(yōu)于簡單神經(jīng)網(wǎng)絡(luò)模型。當(dāng)預(yù)測長度為6 h時(shí),Seq2Seq和LSTM模型的各項(xiàng)指標(biāo)基本相等;當(dāng)預(yù)測長度為12 h時(shí),在良口壩的水位預(yù)測中,Seq2Seq模型相對LSTM模型來說,NSE提高了大約0.05,RMSE和MAE分別降低了大約0.03 m和0.01 m,其他站點(diǎn)的各項(xiàng)指標(biāo)值較為接近;當(dāng)預(yù)測長度為24 h時(shí),Seq2Seq模型在3個(gè)站點(diǎn)的各項(xiàng)指標(biāo)結(jié)果均有不同程度的改進(jìn)。
圖3 不同模型預(yù)測結(jié)果的NSE對比
圖4 不同模型預(yù)測結(jié)果的RMSE對比
圖5 不同模型預(yù)測結(jié)果的MAE對比
LSTM模型和ANN模型預(yù)測結(jié)果同Seq2Seq模型一樣,都表現(xiàn)出隨著預(yù)測長度的增加,預(yù)測性能逐漸下降的特性。對于評(píng)價(jià)指標(biāo)值的變化幅度,當(dāng)預(yù)測長度增加到12 h時(shí),Seq2Seq模型預(yù)測結(jié)果最小,LSTM模型預(yù)測結(jié)果和ANN模型接近;當(dāng)預(yù)測長度增加到24 h時(shí),ANN模型預(yù)測結(jié)果最大,Seq2Seq模型在大坳壩和李溪壩預(yù)測結(jié)果最小,而LSTM模型在良口壩預(yù)測結(jié)果最小。此外,LSTM和ANN模型受站點(diǎn)位置的影響規(guī)律與Seq2Seq模型一致,即中上游站點(diǎn)的預(yù)測效果優(yōu)于下游站點(diǎn),且下游站點(diǎn)與中上游站點(diǎn)之間的評(píng)價(jià)指標(biāo)值差距隨著預(yù)測長度的增大而增大。
由于ANN模型的預(yù)測效果較差,僅對Seq2Seq與LSTM模型的計(jì)算效率進(jìn)行比較。以良口壩為例,在相同環(huán)境下兩模型完成一次計(jì)算的時(shí)間如表3所示。由表3可以看出,預(yù)測長度為12 h的計(jì)算時(shí)間大于預(yù)測長度為24 h的計(jì)算時(shí)間,表明神經(jīng)元數(shù)量相同時(shí),樣本數(shù)越多運(yùn)行時(shí)間越長;預(yù)測長度為6 h的計(jì)算時(shí)間小于預(yù)測長度為12 h的計(jì)算時(shí)間,表明樣本數(shù)雖多,但神經(jīng)元數(shù)量減少,模型運(yùn)行時(shí)間依然較短。由以上分析可知,樣本數(shù)和神經(jīng)元數(shù)量都影響計(jì)算效率,且神經(jīng)元數(shù)量的影響較大。對比同一預(yù)測長度下兩模型的計(jì)算時(shí)間可以發(fā)現(xiàn)LSTM模型計(jì)算時(shí)間更短。圖6給出了不同預(yù)測長度下兩模型的訓(xùn)練過程。由圖6可知,Seq2Seq模型的RMSE均小于LSTM。當(dāng)預(yù)測長度為6 h和12 h時(shí),LSTM先收斂;當(dāng)預(yù)測長度為24 h時(shí),Seq2Seq模型的收斂速度較快。大坳壩和李溪壩計(jì)算效率的對比結(jié)果與良口壩相似。以上對預(yù)測精度和計(jì)算效率的對比表明,在實(shí)際應(yīng)用中,需根據(jù)對精度和效率的要求選擇合適的預(yù)測模型。
表3 不同模型的計(jì)算時(shí)間對比
圖6 不同模型的訓(xùn)練過程對比
a.基于Seq2Seq模型建立了未來6 h、12 h和24 h的逐小時(shí)水位預(yù)測模型,使輸入與輸出的長度設(shè)置不受限制,模型訓(xùn)練過程平穩(wěn),預(yù)測效果較好。
b.當(dāng)預(yù)測長度為6 h、12 h和24 h時(shí),Seq2Seq模型的MAE均小于0.1 m,NSE均大于0.7,表明該模型具有較高的預(yù)測精度。同時(shí)表現(xiàn)出預(yù)測長度越小,評(píng)價(jià)指標(biāo)越優(yōu)的趨勢;相同預(yù)測長度下,上游水位比中下游水位的預(yù)測效果更好。
c.本文測試集ANN模型、LSTM模型和Seq2Seq模型的NSE最小值分別為0.67、0.70和0.73,MAE最大值分別為0.12 m、0.09 m和0.08 m,可見Seq2Seq模型整體效果優(yōu)于LSTM模型和ANN模型。LSTM模型的計(jì)算時(shí)間較Seq2Seq模型短,但當(dāng)預(yù)測長度為24 h時(shí),Seq2Seq模型收斂速度更快。