闞光遠,洪 陽,梁 珂
(1. 清華大學 水利系,北京 100084;2. 中國水利水電科學研究院 北京中水科工程總公司,北京 100048; 3. 中國水利水電科學研究院 水利部防洪抗旱減災工程技術研究中心,北京 100038)
機器學習基于仿生學發展而來,通過模擬人腦的功能解決實際問題。機器學習方法通常由一系列數值算式和數學變換組成,通過現代電子計算機及軟件程序實現其功能。眾多機器學習方法中,人工神經網絡(ANN)的關注度最高。近年來,隨著反向傳播訓練算法的提出以及現代圖形處理器(GPU)引發的高性能計算革命的興起,ANN技術迎來了第二春。以深度學習、強化學習等技術為代表的現代ANN已成功應用于多個領域,主要包括:計算機視覺、自然語言處理、文本識別、自動駕駛汽車、人工智能甚至圍棋對弈等領域[1-3]。
許多學者嘗試將ANN技術應用于洪水預報領域[4-7],取得了許多有益的成果。然而,由于洪水預報工作的高度復雜性,ANN的訓練和測試精度仍不能同時達到滿意的效果。因此,提升ANN的預報能力和穩定性需要進一步研究。ANN性能尚不能令人滿意的主要原因如下:①傳統ANN模型通常基于當前和前推若干時段的降雨和實測徑流量預測當前時刻的徑流量,這種建模方式導致模型的預見期只有一個計算時段長,給徑流滾動連續預報帶來了困難;②傳統ANN通常使用試算法來確定網絡拓撲結構(即隱含層神經元個數),網絡拓撲結構確定后,再進行參數的訓練。這種兩步式訓練方法不能同時優化網絡拓撲結構和參數,訓練得到的網絡往往不是最優結果。隱含層神經元個數取得很大時雖然可以得到很好的訓練精度,但進行預報時,網絡的泛化能力往往很差,預報精度衰減嚴重。減少隱含層神經元個數雖然對提升網絡的泛化能力有益,但可能導致訓練精度下降。因此,傳統的兩步式訓練方法費時費力,面臨上述難題;③由于試算拓撲結構和基于梯度下降的反向傳播訓練算法是局部優化方法,傳統兩步式訓練方法得到的網絡拓撲結構和參數往往不是全局最優的,局部極小問題嚴重;④實際應用中,單一的ANN往往不能取得滿意的效果,需要與其他機器學習方法相配合來提升精度。
為了解決ANN應用中面臨的以上4個問題,本文提出了一種耦合機器學習模型,并用于流域洪水預報。該模型通過獨特的建模方式將ANN與K最近鄰方法相耦合,利用多目標遺傳算法和Levenberg-Marquardt算法進行全局最優訓練。在屯溪流域小時尺度洪水預報中的應用表明,耦合機器學習模型的精度和可靠性較好,具有較好的應用前景。
本研究基于屯溪流域。屯溪流域的自然地理特征介紹如下:屯溪流域位于我國東南沿海的安徽省皖南山區,流域集水面積2 690 km2,是新安江水庫的重要入庫站。屯溪流域植被覆蓋良好,主要包括常綠針葉林、落葉闊葉林、混交林、林地、草地和牧草地等。土壤類型主要為黏壤土。流域位于亞熱帶季風氣候區,年平均溫度17 ℃,冬季干冷晴朗,盛行西北風;夏季高溫、濕度大、日照強烈,盛行東南風。春秋兩季臺風頻發,冷熱交替頻繁,春夏兩季多發鋒面雨,夏秋兩季多發臺風。季風風向與山嶺走向相垂直,山嶺阻擋臺風和北方冷空氣的推進。屯溪流域高程自西向東遞減,最大、最小和平均高程分別為1 398、116和380 m。
屯溪流域的降雨與產流特征介紹如下:流域年平均降水1 600 mm,降水年內年際變化劇烈。50%洪水發生在4-6月間,20%洪水發生在7-9月間。徑流年內年際變化劇烈。1996年6月30日,新安江流域發生新中國成立以來最大洪水,暴雨如注,河水驟漲,洪峰抵達中心城區適逢深夜,盡管水文部門做出了洪水預報,但警報不及時,洪魔肆虐,中心城區一片汪洋,屯溪老街商鋪淹沒水深2 m有余,沿河兩岸一片狼藉,損失慘重。在災后反思中,黃山市政府下決定建設“黃山市洪水預報預警系統”,系統于1997年5月建成,成為當時安徽唯一的集信息采集、數據處理、洪水預報為一體的綜合應用系統,在1998年、1999年、2001年和2006年洪水預報中發揮巨大作用。由此可見,洪水預報模型在防洪減災中的作用是十分關鍵的。
屯溪流域雨量站、河網和DEM見圖1。屯溪流域小時尺度降雨徑流預報基于29場場次洪水,其中20場用于模型率定,其余9場用于模型檢驗。場次洪水時間范圍從1982-2002年。流域具有11個雨量站,用于計算流域面平均雨量。

圖1 屯溪流域圖Fig.1 Map of the Tunxi watershed
流域出口徑流的模擬與預報基于多個預報因子,包括:降雨和前期徑流。降雨是產流的主要驅動因子,包括當前時刻降雨和前推若干時刻的降雨組成的序列。流域干濕狀態(主要由土壤濕度反應)是產流的另一個關鍵影響因子,由于數據驅動模型無法計算土壤濕度,因此采用前期徑流來表征流域的干濕程度。前期徑流由前推若干時刻的徑流序列組成。以上預報因子作為模型輸入,驅動模型進行徑流預報,具體建模方式見2.2小節。
降雨和前期徑流需要前推的時段數稱為模型的階數。階數對于模型預報精度和穩定性十分重要,階數過小,模型能夠獲取的信息量有限,導致預報精度下降;階數過大,會引入冗余信息,導致率定期精度高而檢驗期精度低的“過擬合”問題。本研究采用基于偏互信息的特征選擇算法辨識模型階數,許多研究表明,該方法適用于非線性模型輸入變量選擇,具有精度高、冗余信息少的優點,是一種非常優秀、成熟的輸入變量和階數識別算法[8-10],該算法的具體細節詳見相關參考文獻。階數識別的具體步驟為:
(1)確定降雨和前期徑流階數的上限。基于對流域歷史降雨-徑流資料特性的分析,估計出降雨形心至洪峰之間的滯后時段數,階數上限取稍大于該滯后時段數的數值。
(2)根據2.2小節中的建模方式,將當前時刻降雨、前推若干時刻降雨及前推若干時刻徑流作為候選輸入變量,前推時段數的最大值設置為階數的上限。
(3)將候選輸入變量作為輸入,對應時刻的徑流量作為輸出,采用基于偏互信息的輸入變量篩選方法進行迭代計算,求出候選輸入變量,即確定了階數。
耦合機器學習模型基于降雨序列和前期徑流序列實現流域出口徑流過程的預報,其建模方式如下:
(2)
Q(t)=Qest(t)+Eest(t)
(3)
式中:Qest和Eest分別為徑流量和徑流量誤差的估計值;FANN和FKNN分別為基于ANN和K最近鄰(KNN)算法的徑流量和徑流量誤差估計方法;P和Qant分別為降雨和前期徑流;nP和nQ分別為降雨和前期徑流的階數;Q為預報的徑流量。
徑流預報的流程為:首先,估計Qest;然后計算Eest;最后,將Qest和Eest相加求得預報徑流量。第一時段計算時,前期徑流采用實測值,隨著計算時段的步步推進,將新求得的Qest值作為后續計算的前期徑流帶入以上公式,就實現了不需要實測前期徑流,而利用模型輸出的預報徑流量作為前期徑流的連續預報功能。由于這種建模方式利用了前期徑流的信息,且不需要前期徑流的實測值(而是用模型預報值代替),通過耦合ANN和KNN兩種算法,相互取長補短,實現了高精度連續預報[11-15]功能,有效延長了預見期,克服了傳統ANN模型只能提前一個計算時段進行徑流預報的不足。
為了實現網絡拓撲結構和參數同時全局優化的目的,利用一種能夠將網絡拓撲結構和參數同時編碼為一個實數序列的編碼方式[5],將實數序列作為多目標非制約排序遺傳算法(NSGA-II)的決策變量進行全局優化,獲取網絡拓撲結構和初始參數。然后通過Levenberg-Marquardt反向傳播算法對網絡進行進一步精細訓練,獲取最終的參數。多目標遺傳算法的目標函數采用預報精度和網絡復雜度兩個目標,可在訓練精度和網絡復雜度間取得良好折中,在保證訓練精度的前提下,有效提高了網絡的泛化和預報能力。在獲取的帕累托(Pareto)解集中選擇具有最佳預報精度的網絡結構作為最優網絡結構。ANN訓練完畢后,通過留一交叉驗證方法對KNN算法參數(最近鄰個數)進行優選。
實測和預報徑流散點圖見圖2。由圖2可知,率定和驗證精度均令人滿意。率定期和驗證期的回歸系數R2分別可達0.963 5和0.951 5。率定期散點圖中點據分布均勻。檢驗期散點圖中點據分布較率定期稍差,點據分布較為離散,其R2值比率定期稍差。盡管檢驗期結果比率定期稍差,耦合機器學習模型在檢驗期的精度也是令人滿意的。率定期至檢驗期精度衰減比率為0.951 5/0.963 5≈0.987 5,衰減程度較小,可以滿足洪水預報精度需求。由圖2(b)可以發現,檢驗期預報徑流與實測徑流相比,有所低估。

圖2 實測和預報徑流散點圖Fig.2 Scatter plots of observed and forecasted discharges
圖3中展示的是率定期和檢驗期典型洪水場次模擬與實測過程線。通過觀察所有場次洪水預報過程線可知,耦合機器學習模型的預報精度較好,過程線比較光滑,取得了滿意的預報效果。良好預報效果得益于新型建模方式和新型模型更強的預報能力。經過階數優選的降雨輸入序列為模型提供了充足的水量信息,可以取得更好的水量平衡結果。光滑的過程線和良好的預報精度得益于前期徑流序列的貢獻。前期徑流序列確保了模型計算的連續性,提高了模型預報的穩定性。
場次洪水誤差統計結果見表1。由表中結果可知,率定期和檢驗期精度均令人滿意。實測洪峰范圍為633~6 490 m3/s。


圖3 率定期和檢驗期徑流過程線圖Fig.3 Hydrographs of calibration and validation periods

洪號率定/檢驗降雨/mm實測洪峰/(m3·s-1)徑流相對誤差/%洪峰相對誤差/%峰現時間誤差/h納什效率系數19820501081983051108198305142219830609061984082620198606110819870501081987061908198805070419880611011989050108198906120619890630231989072208199005010819900611081991051800199106300819920620001993052700率定512.04 280-0.08-0.70-10.9875.51 3001.813.2000.9679.91 510-6.948.3000.98119.42 170-0.38-8.7030.92172.72 5131.99-4.50-40.98511.62 260-3.10-8.2000.9474.26337.4159.60-10.52110.4945-22.36-21.10-60.79154.61 3903.689.5010.91191.91 000-10.59-8.2010.87312.91 740-12.42-7.0000.97197.92 274-3.887.4000.98161.61 740-4.65-6.9000.97132.01 4703.88-5.6020.9089.51 7007.65-18.4010.96355.52 500-7.379.70-30.94504.22 220-10.7019.7030.91355.12 060-4.58-30.3010.87357.53 150-10.780.7010.961 074.44 700-2.7918.3000.961994050100779.04 160-9.16-0.3010.9719950515001 010.94 070-7.97-13.7030.8919960601001 199.96 490-5.35-14.10-10.961997060600552.52 7303.81-3.5030.961999052108檢驗208.42 9600.10-6.10-10.981999062215617.03 780-14.47-10.2000.92200105010898.11 41024.2418.1000.912001062008297.23 6407.090.5060.902002051308536.22 1205.890.4000.89
實測總降雨范圍為74.2~1 199.9 mm。率定期最大和最小洪峰為4 700 m3/s和633 m3/s。檢驗期最大和最小洪峰為6 490 m3/s和1 410 m3/s。檢驗期洪峰流量值范圍超越了率定期數據集,便于對模型泛化能力進行進一步的檢驗。以下從徑流深相對誤差、洪峰相對誤差、峰現時間誤差和納須效率系數4個方面開展誤差分析。
3.3.1 徑流深相對誤差
率定期中,出現14個負誤差值和6個正誤差值,表明模型率定結果傾向于低估徑流深。檢驗期中,出現4個負誤差值和5個正誤差值,表明檢驗期并未顯著高估或低估徑流深。率定期中,僅有一場洪水(1987061908)的徑流深相對誤差的絕對值超過20%。檢驗期中,僅有一場洪水(2001050108)的徑流深相對誤差的絕對值超過20%。以上結果表明,耦合機器學習模型的徑流深預報精度較好,檢驗期精度更優,具有很好的泛化能力。
3.3.2 洪峰相對誤差
率定期洪峰相對誤差范圍為-30.3%~59.6%。有三場洪水的洪峰相對誤差絕對值超過20%,分別為1987050108、1987061908和1991063008。檢驗期所有洪水的洪峰相對誤差絕對值均低于20%。率定期中,有11個負誤差值和9個正誤差值。檢驗期中,有6個負誤差值和3個正誤差值。以上結果表明,率定期結果并未明顯高估或低估洪峰流量,但檢驗期對洪峰流量有所低估。場次洪水1996060166的洪峰流量為率定期和檢驗期的最大洪峰,耦合機器學習模型的預報精度很好,洪峰相對誤差小于20%。盡管該場洪水超過了率定期數據集的范圍,模型在率定期并未學習過如此大的洪峰流量,在檢驗期仍取得了很好的預報結果,說明耦合機器學習模型具有很好的泛化能力。
3.3.3 峰現時間誤差
率定期和檢驗期分別有兩場和一場洪水的峰現時間誤差超過了3 h。總體來講,耦合機器學習模型的峰現時間誤差預報結果較好。率定期中有5個負誤差值和8個正誤差值。檢驗期中有2個負誤差值和4個正誤差值。耦合機器學習模型預報的洪峰比實測洪峰總體上略有提前。
3.3.4 納什效率系數
從納什效率系數結果來看,耦合機器學習模型精度很好。大部分場次洪水的納什效率系數可達0.9以上。只有1987050108和1987061908兩場洪水的納什效率系數較低,分別為0.52和0.79。這兩場洪水屬于小量級洪水,洪峰流量分別為633 m3/s和945 m3/s。由于洪水量級較小,因此洪水非線性較強[16],導致模擬結果略差。
對所有29場洪水資料進行了代表性與可靠性分析,具體介紹如下:
(1)率定期洪水。率定期洪水總降雨量與洪峰流量關系圖見圖4。由圖4可知,場次洪水總降雨量的范圍是74.2~1 074.4 mm,洪峰流量的范圍是633~4 700 m3/s。最小總降雨量對應的場次洪水恰好具有最小洪峰流量,最大總降雨量對應的場次洪水恰好具有最大洪峰流量。隨著洪峰流量由小變大,雖然存在幾場洪水的總降雨量有所波動,但總降雨量的變化趨勢總體上是增加的。這表明率定期洪水降雨-徑流資料的量級變化趨勢是合理、一致、可靠的。

圖4 率定期洪水分析Fig.4 Flood analysis of calibration period
(2)檢驗期洪水。檢驗期洪水總降雨量與洪峰流量關系圖見圖5。由圖5可知,場次洪水總降雨量的范圍是98.1~1 199.9 mm,洪峰流量的范圍是1 410~6 490 m3/s。最小總降雨量對應的場次洪水恰好具有最小洪峰流量,最大總降雨量對應的場次洪水恰好具有最大洪峰流量。隨著洪峰流量由小變大,雖然存在幾場洪水的總降雨量有所波動,但總降雨量的變化趨勢總體上是增加的。這表明檢驗期洪水降雨-徑流資料的量級變化趨勢是合理、一致、可靠的。

圖5 檢驗期洪水分析Fig.5 Flood analysis of validation period
(3)率定期和檢驗期洪水代表性。率定期洪水總降雨量的范圍是74.2~1 074.4 mm,檢驗期洪水總降雨量的范圍是98.1~1 199.9 mm,率定期和檢驗期降雨量的量級和范圍基本一致,率定期和檢驗期降雨資料的代表性和一致性較好。率定期洪水洪峰流量的范圍是633~4 700 m3/s,檢驗期洪水洪峰流量的范圍是1 410~6 490 m3/s。檢驗期洪水的洪峰流量大于率定期洪水的洪峰流量,這是為了考察模型對于率定期數據范圍外的洪水的預報能力,即考察模型的外推預報能力而進行的設置。這種設置能夠考察預報模型對于未曾訓練過的大洪水是否具有較好的預報能力,對于模型的實際應用十分有益。
基于ANN和KNN算法,本文構建了一種新型耦合機器學習模型,并用于洪水預報。該模型通過獨特的建模方式將ANN與KNN方法相耦合,利用多目標遺傳算法和Levenberg-Marquardt算法進行訓練,較好地解決了傳統ANN模型預見期僅為一個計算時段長、ANN拓撲結構和參數難以同時優化、ANN訓練局部極小、單個ANN預報能力不佳等問題。在屯溪流域洪水預報中的應用表明,耦合機器學習模型的精度和可靠性較好,具有較好的應用前景。主要結論如下:
(1)耦合機器學習模型獨特的建模方式避免了使用實測前期徑流量數據,轉而使用模擬前期徑流量進行替代,在保證預報精度沒有明顯衰減的前提下有效增長了模型外推預報的時段數,給延長數據驅動模型預見期提供了新的手段,解決了傳統數據驅動模型僅能進行一個時段外推預報的問題。
(2)通過采用特殊的編碼方式將網絡結構和參數編碼為一組決策變量,實現了同時優化網絡結構和參數,與多目標全局優化算法的結合改善了網絡訓練的局部極小問題。
(3)通過耦合ANN和KNN算法,進行取長補短,有效提升了模型預報能力,對于訓練期未接觸過的大洪水,在檢驗期預報中仍能取得較為理想的預報精度。
(4)因模型結構較為復雜,計算流程繁多,還存在計算量過大,訓練速度較慢的不足,考慮未來采用并行計算技術進行加速,是下一步研究的目標。
□