高金蘭, 李 豪, 段玉波, 王宏建
(東北石油大學(xué) 電氣信息工程學(xué)院, 黑龍江 大慶 163318)
據(jù)中國可再生能源學(xué)會風(fēng)能專業(yè)委員會(CWEA: Chinese Wind Energy Association)的數(shù)據(jù)統(tǒng)計, 截至2018年末, 我國成為全球首個風(fēng)電裝機容量超過200 GW的國家。近年來風(fēng)力發(fā)電發(fā)展迅速, 但由于受到氣象及地形等因素的影響, 風(fēng)電場出力具有很強的波動性。風(fēng)電大規(guī)模的并網(wǎng)也給電力電網(wǎng)的穩(wěn)定性帶來了挑戰(zhàn)。通過對風(fēng)電場的歷史數(shù)據(jù)進行分析, 獲取未來短時間內(nèi)風(fēng)電場出力的變化趨勢, 能為電網(wǎng)的調(diào)度計劃提供依據(jù), 提高電網(wǎng)運行的安全性、 穩(wěn)定性和可靠性[1]; 同時根據(jù)國家能源局統(tǒng)計顯示, 我國2018年全年棄風(fēng)電量達到9.972×1016J, 而利用這些電量可以減少30 Gkg二氧化碳的排放。因此, 風(fēng)電功率預(yù)測問題如果無法得到解決, 將影響風(fēng)電并網(wǎng), 造成能源浪費, 使我國政府為節(jié)能減排所作的努力大打折扣。
近年來, 對風(fēng)電場短期輸出功率進行預(yù)測成為學(xué)者們研究的焦點, 越來越多的新理論新方法也相繼被提出。長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM: Long Short-Term Memory)模型在處理時序數(shù)據(jù)的特征信息時有很好的效果。3個門式結(jié)構(gòu)的加入使LSTM神經(jīng)網(wǎng)絡(luò)在處理問題時能選擇性忘記其中一部分不關(guān)鍵信息而把一些重要的信息關(guān)聯(lián)在一起, 從而記憶起更長的序列。同時這種結(jié)構(gòu)也解決了傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN: Recurrent Neural Network)處理問題時梯度消失以及梯度爆炸的問題[2-3]。文獻[4]提出了利用長短期記憶神經(jīng)網(wǎng)絡(luò)建立模型進行風(fēng)電的功率預(yù)測, 與傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)模型的預(yù)測方法相比, 該模型在風(fēng)功率預(yù)測過程中解決了處理時序問題時所產(chǎn)生的長期依賴性問題。文獻[5]采用通過建立門控循環(huán)單元(GRU: Gated Recurrent Unit)網(wǎng)絡(luò)預(yù)測模型實現(xiàn)短期風(fēng)電功率預(yù)測, 該方法具有訓(xùn)練速度更快、 系統(tǒng)占用內(nèi)存更少的優(yōu)點。文獻[6]引入BiLSTM(Bi-directional Long Short-Term Memory)算法建立模型對風(fēng)電場輸出功率進行預(yù)測, 該方法憑借雙向循環(huán)結(jié)構(gòu), 有效減少了陷入局部最優(yōu)情況的發(fā)生。
深度學(xué)習(xí)的快速發(fā)展為風(fēng)電場的功率預(yù)測提供了更多的思路和方法。GRU神經(jīng)網(wǎng)絡(luò)是LSTM神經(jīng)網(wǎng)絡(luò)的一個變體, GRU保持了LSTM的預(yù)測效果, 且結(jié)構(gòu)更加簡單, 此外通過堆疊的設(shè)計能增加網(wǎng)絡(luò)的深度, 提升模型預(yù)測的準確度。Stacking算法是一種集成算法, 可通過聚合多個回歸模型提升預(yù)測精度[7]。筆者在GRU模型的基礎(chǔ)上建立多個多層GRU作為第1級預(yù)測模型, 然后再以GRU為基礎(chǔ)建立第2級預(yù)測模型, 最終在Stacking集成框架下對二者進行融合, 利用其實現(xiàn)風(fēng)電場短期功率預(yù)測。筆者將Stacking集成融合模型引入風(fēng)電場短期功率預(yù)測領(lǐng)域, 并探索該模型在風(fēng)電場短期功率預(yù)測中的可行性。
LSTM神經(jīng)網(wǎng)絡(luò)因為獨有的門式結(jié)構(gòu), 使其被廣泛應(yīng)用于時間序列預(yù)測任務(wù)。然而因其復(fù)雜的內(nèi)部結(jié)構(gòu), LSTM神經(jīng)網(wǎng)絡(luò)的訓(xùn)練通常需花費很長時間。GRU是由Chung等[8]提出的LSTM的一種變體, 它較LSTM的結(jié)構(gòu)更加簡單, 并且在保留LSTM性能的前提下其訓(xùn)練速度也更快。GRU的結(jié)構(gòu)如圖1所示。
圖1 GRU的單元結(jié)構(gòu)Fig.1 GRU unit structure
GRU將LSTM單元結(jié)構(gòu)中的遺忘門和輸入門合并成了一個重置門, 因此GRU單元相比LSTM單元結(jié)構(gòu)只有兩個門, 分別是重置門和更新門, 既圖中的rt和zt。重置門有助于捕捉時間序列的短期依賴關(guān)系, 更新門有助于捕捉時間序列的長期依賴關(guān)系[9], GRU的前向傳播公式如下
rt=σ(Wr·[hbt-1,xbt]+br)
(1)
zt=σ(Wz·[ht-1,xt]+bz)
(2)
(3)
(4)
為提升預(yù)測模型對時間序列信息的提取能力, 筆者在此引入了多層GRU神經(jīng)網(wǎng)絡(luò)模型。通過搭建多層GRU神經(jīng)網(wǎng)絡(luò), 使單個GRU單元的輸出不僅到達本層的下一個GRU單元, 而且到達下一個堆疊層的GRU單元, 從而增加了網(wǎng)絡(luò)深度, 提高運算效率, 最終獲得更好的準確性。多層GRU模型的結(jié)構(gòu)如圖2所示。
圖2 多層GRU模型的結(jié)構(gòu)圖Fig.2 Structure diagram of a multilayer GRU model
在多層GRU模型中特征信息的提取部分由3層堆疊的GRU層完成, 而預(yù)測回歸部分則由全連接層完成。圖2中每個節(jié)點代表一個GRU單元, 對于時間序列T的特征序列{x1,x2,…,xT}, 輸入到第1層GRU網(wǎng)絡(luò){a1,a2,…,aT}, 從低維的時間層面分析數(shù)據(jù)的時序關(guān)系, 之后令第1層的輸出進入第2層GRU{b1,b2,…,bT}以及第3層GRU{c1,c2,…,cT}, 2、 3層的特征信息處理包含了上一層的學(xué)習(xí)輸出以及高維的時間關(guān)系。最后利用全連接層將特征樣本進行映射得最終的預(yù)測值, 模型的訓(xùn)練利用Adam優(yōu)化算法調(diào)整每個GRU單元的權(quán)重以及偏置向量, 經(jīng)幾個循環(huán)迭代后, GRU的輸出值在訓(xùn)練集上逐漸接近真實值, 得到最終的多層GRU預(yù)測模型。
在預(yù)測模型中, 筆者的目標是訓(xùn)練出在各個方面都穩(wěn)定且性能良好的模型, 但實際情況通常并不理想, 有時只能獲得具有某些偏好的模型。集成學(xué)習(xí)通過組合幾種模型以提高預(yù)測能力, Stacking算法是集成算法中最為典型的一種[12]。Stacking算法的集成學(xué)習(xí)方式如圖3所示。
圖3 Stacking算法的集成學(xué)習(xí)方式Fig.3 Integrated learning method of Stacking algorithm
Stacking集成學(xué)習(xí)算法首先將原始訓(xùn)練集劃分為若干子訓(xùn)練集, 之后通過各子集訓(xùn)練初學(xué)習(xí)器, 將初學(xué)習(xí)器的學(xué)習(xí)結(jié)果作為輸入使第2級的元學(xué)習(xí)器進行學(xué)習(xí), 第2級的元學(xué)習(xí)器能發(fā)現(xiàn)并且糾正第1級初學(xué)習(xí)器中的預(yù)測誤差, 提升整體的預(yù)測效果。其算法表示如下。
輸入: 訓(xùn)練集D=(x1,y1),…,(xm,ym), 其中xi∈Rn,yi∈{-1,+1}; 初級學(xué)習(xí)算法ζt,t=1,2,…,T; 次級學(xué)習(xí)算法ξ。
2)初始化次級訓(xùn)練集:D′=?。
5) 訓(xùn)練次級學(xué)習(xí)器:h′=ξ(D′)。
筆者在Stacking的集成學(xué)習(xí)框架下融合多個GRU預(yù)測模型, 在Stacking融合模型的第1級中選擇3個多層GRU預(yù)測模型, 模型的第2級選用單層GRU模型糾正第1級中3個多層GRU模型的預(yù)測偏差, 并防止過擬合情況產(chǎn)生?;赟tacking集成融合多層GRU模型的整體結(jié)構(gòu)如圖4所示。
圖4 Stacking集成融合多個GRU模型Fig.4 Stacking integration integrates multiple GRU models
首先利用交叉法, 將原始數(shù)據(jù)集劃分為3個子數(shù)據(jù)集, 并確保每個數(shù)據(jù)集相互獨立, 對第1級的每個3層GRU預(yù)測模型, 用兩個子數(shù)據(jù)集作為訓(xùn)練集, 另外一個子數(shù)據(jù)集作為驗證集。第1級中的3個不同的3層GRU預(yù)測模型都可生成一個預(yù)測結(jié)果, 將這3個預(yù)測結(jié)果重新合并為新的數(shù)據(jù)集。之后再利用第2級的GRU預(yù)測模型對新生成的數(shù)據(jù)集進行學(xué)習(xí), 生成最終的預(yù)測結(jié)果。模型經(jīng)過反向傳播訓(xùn)練調(diào)整GRU單元的權(quán)重以及偏置向量, 最終生成Stacking集成融合的多層GRU預(yù)測模型。Stacking框架中的每個模型的訓(xùn)練方式統(tǒng)一采用Adam算法進行優(yōu)化, Adam是一種自適應(yīng)學(xué)習(xí)率的方法, 它利用梯度的1階矩估計和2階矩估計動態(tài)調(diào)整GRU模型中每個參數(shù)的學(xué)習(xí)率。Adam算法優(yōu)化GRU模型的過程為
通常, 訓(xùn)練任何基于學(xué)習(xí)的模型, 最終的訓(xùn)練過程都可看作是一個優(yōu)化問題。使損失函數(shù)最小化是序列預(yù)測任務(wù)中重要的一步。損失函數(shù)
(11)
Stacking集成融合模型的風(fēng)電場短期功率預(yù)測步驟如下。
首先對數(shù)據(jù)進行預(yù)處理。風(fēng)力發(fā)電輸出功率的歷史數(shù)據(jù)由于設(shè)備監(jiān)測、 風(fēng)機檢修等原因, 導(dǎo)致獲取的數(shù)據(jù)有缺失, 如風(fēng)電場在有風(fēng)正常運行過程中輸出功率是不可能為零的, 這時如果數(shù)據(jù)中出現(xiàn)了0即為數(shù)據(jù)缺失。目前針對風(fēng)功率數(shù)據(jù)集缺失數(shù)據(jù)處理的方法有很多, 如刪除法、 加權(quán)調(diào)整法, 筆者采用滑動平均法對原始數(shù)據(jù)進行預(yù)處理。
其次對歸一化的數(shù)據(jù)集Xm進行處理構(gòu)建輸入數(shù)據(jù)。對時間序列數(shù)據(jù)集, 以指定步長L為截取單位將數(shù)據(jù)集分割成多個片段, 建立訓(xùn)練樣本XT={Xj|(n-1)l+1≤j≤nl},T∈{1,2,3,…,p}, 其中p表示分割成的片數(shù), 將分割成的片數(shù)建立輸入層作為模型的輸入, 利用風(fēng)電場歷史數(shù)據(jù)劃分的訓(xùn)練樣本集對Stacking融合模型進行訓(xùn)練。
最后將風(fēng)電場功率的預(yù)測樣本的特征數(shù)據(jù)輸入至Stacking融合模型, 數(shù)據(jù)將依次進行第1級多層GRU模型以及第2級GRU模型的處理。第1級模型中的多層GRU模型能深度提取風(fēng)電場歷史數(shù)據(jù)的特征信息, 第2級GRU模型能糾正第1級中多個GRU模型的預(yù)測偏差, Stacking融合模型將匯總兩級模型的輸出結(jié)果, 得到最終風(fēng)電場的功率輸出值。
Stacking融合模型的預(yù)測流程如圖5所示。
圖5 Stacking融合模型的預(yù)測流程Fig.5 The prediction process of the Stacking fusion model
在回歸類預(yù)測問題中經(jīng)常采用平均絕對誤差(MAE: Mean Absolute Error)、 均方差(MSE: Mean Squared Error)、 決定系數(shù)(R2)、 平均絕對百分比誤差(MAPE: Mean Absolute Percentage Error)進行預(yù)測評價, 其計算公式分別如下
實驗數(shù)據(jù)來自寧夏太陽山發(fā)電場2017年全年的發(fā)電數(shù)據(jù)。采樣分辨率為15 min, 每日的采樣點為96個時刻。實驗以Stacking融合模型進行建模實現(xiàn)風(fēng)電場短期功率預(yù)測, 同時分別以LSTM、 多層GRU、 XGBoost及Stacking融合模型進行風(fēng)電場功率預(yù)測實驗, 并對幾組模型的預(yù)測效果進行比較分析。實驗應(yīng)用的軟件平臺為Python3.7, 運行環(huán)境為Keras以及谷歌第2代人工智能學(xué)習(xí)系統(tǒng)TensorFlow, 利用的Python庫為Pandas庫、 Matplotlib庫和Numpy庫等。
Stacking融合模型的具體參數(shù)設(shè)置如表1所示。
表1 Stacking融合模型中參數(shù)的設(shè)置
Stacking融合模型中第1級的3個多層GRU模型采用3+1結(jié)構(gòu)(3層GRU和1層全連接層)。第1級模型中的3個多層GRU中每層的激活函數(shù)選擇tanh, 第1個3層GRU模型中每層的細胞個數(shù)選為64, 第2個3層GRU模型中每層的細胞個數(shù)選為128, 第3個3層GRU模型中每層的細胞個數(shù)選為256; 第2級單層GRU模型的細胞個數(shù)選為128, 激活函數(shù)tanh。每個GRU模型的全連接層細胞個數(shù)為1, 激活函數(shù)選擇Linear。網(wǎng)絡(luò)的優(yōu)化器選擇Adam, 損失函數(shù)采用均方誤差。
衡量模型的好壞最重要的一個因素就是其損失值。通過風(fēng)電場歷史數(shù)據(jù)構(gòu)建訓(xùn)練集對模型進行訓(xùn)練, Stacking融合模型的損失函數(shù)曲線如圖6所示。
圖6中的損失值都是經(jīng)過50次迭代訓(xùn)練, 使用訓(xùn)練集與驗證集測試模型的損失值, 損失值越小、 越平穩(wěn)代表當前模型訓(xùn)練得越好。
圖6 訓(xùn)練集與驗證集損失值對比曲線 圖7 晴天發(fā)電功率預(yù)測對比曲線 Fig.6 Comparison curve of loss between Fig.7 Comparison curve of power training set and validation set generation forecast on sunny days
為研究所采用模型的預(yù)測性能, 首先選用晴天和雨天作為兩種測試對象, 將Stacking融合模型的預(yù)測結(jié)果與單層LSTM模型、 多層GRU模型結(jié)果以及真實值做對比。
針對預(yù)測日為晴天, 從2017年8月24日12時起, 利用以上3組模型對未來35 h的風(fēng)電場輸出功率進行預(yù)測, 結(jié)果如圖7所示。
由圖7可看出, 基于Stacking融合模型預(yù)測得到的風(fēng)電場輸出功率曲線與真實的輸出功率相比較, 曲線變化趨勢基本相同。在風(fēng)電場輸出功率比較平緩時, 各個模型的預(yù)測效果差別不大, 但當風(fēng)電場的輸出功率變化比較大時, Stacking融合模型的預(yù)測曲線更接近真實值。
在預(yù)測日為晴天時, 各模型的性能評估指標如表2所示。
表2 晴天Stacking融合模型與其他模型的性能評估指標
在晴天的35 h的預(yù)測過程中, 由表2可看出, 單層LSTM的決定系數(shù)為0.90, 多層GRU的決定系數(shù)為0.97, Stacking融合模型擁有最高的判定系數(shù)0.98, Stacking融合模型預(yù)測的平均絕對誤差相比較單層LSTM模型和多層GRU模型分別降低了2.66和0.90, 均方差指標相比較前兩者也分別降低了39.39和12.51, 展示了其有效的風(fēng)電場短期功率預(yù)測能力。
針對預(yù)測日為雨天, 從2017年8月7日0時起, 利用3組模型對未來35 h的風(fēng)電場輸出功率進行預(yù)測, 預(yù)測對比曲線如圖8所示。
圖8 雨天發(fā)電功率預(yù)測對比曲線Fig.8 Comparison curve of powerforecast in rainy days
雨天的風(fēng)速等氣象條件頻繁劇烈變化, 導(dǎo)致風(fēng)力發(fā)電功率劇烈波動產(chǎn)生多個尖峰, 可以看出在風(fēng)電場輸出功率激增時, 多層GRU預(yù)測模型和Stacking融合模型表現(xiàn)更好, 這是因為單層的LSTM對風(fēng)電場歷史序列的時序數(shù)據(jù)特征捕捉能力有限, 而多層的GRU模型的設(shè)計提升了時序特征模型的記憶和計算能力。此外因為Stacking集成融合的模型能糾正單個模型的預(yù)測偏差, 因此其相比較單一的多層GRU模型預(yù)測準確性更高。利用Stacking融合模型與其他模型的性能評估指標如表3所示。
表3 雨天Stacking融合模型與其他模型的性能評估指標
在雨天的35 h的預(yù)測中, Stacking融合預(yù)測模型的決定系數(shù)為0.96,此外, 筆者還將Stacking融合模型與XGBoost模型做了對比。XGBoost模型同樣屬于集成算法, 其本質(zhì)是利用Boosting算法集成多個相關(guān)聯(lián)的決策樹, 在利用兩種算法進行預(yù)測時, 選用預(yù)測日為2017年8月10日, 從14時起, 預(yù)測未來6 h的風(fēng)電場輸出功率變化情況, 預(yù)測誤差對比曲線如圖9所示。
圖9 Stacking融合模型與XGBoost模型預(yù)測誤差對比曲線Fig.9 Comparison curve of prediction error between Stacking fusion model and XGBoost model
由圖9可看出, Stacking融合模型的預(yù)測誤差更小, 性能相比傳統(tǒng)的XGBoost集成模型更優(yōu)秀。
綜合上面的幾組對比實驗可見, 在風(fēng)電場輸出功率比較平緩時, 相比較于傳統(tǒng)的XGBoost、 單個單層LSTM模型、 單個多層GRU模型, Stacking融合模型預(yù)測精度略好于上述3種預(yù)測模型。但當風(fēng)電場的輸出功率劇烈變化時, Stacking融合模型預(yù)測效果有明顯的提升且穩(wěn)定性更好。從理論上可分析Stacking融合模型優(yōu)于其他模型的原因: 首先, 因為Stacking融合模型能有效減小單一預(yù)測模型在處理未知樣本時泛化性能不佳的現(xiàn)象; 其次, 從模型的訓(xùn)練角度講, 采用梯度下降法進行訓(xùn)練的神經(jīng)網(wǎng)絡(luò)容易收斂到誤差曲面的局部最優(yōu)點, Stacking融合模型通過第2級GRU模型對第1級模型進行結(jié)合, 能減少第1級模型中的單個模型優(yōu)化過程中陷入局部最優(yōu)點的風(fēng)險。此外, 筆者采用的Stacking融合模型中第1級的3層GRU模型, 得益于其復(fù)雜的記憶網(wǎng)絡(luò), 能在更深層次對風(fēng)電場歷史數(shù)據(jù)進行抽象表達, 促進模型對于高維時間序列特征的捕捉。
為進一步驗證Stacking融合模型預(yù)測的穩(wěn)定性, 筆者對該地區(qū)風(fēng)電場八月第1周的輸出功率進行預(yù)測, 結(jié)果如表4所示。
表4 一周內(nèi)5種模型預(yù)測誤差統(tǒng)計
與其他預(yù)測模型相比, 筆者所提出的Stacking融合模型一周內(nèi)所預(yù)測的平均絕對百分比誤差最小, 并且可以看出, 在一周的預(yù)測任務(wù)中其表現(xiàn)出了穩(wěn)定的預(yù)測能力。
此外, 為測試Stacking融合模型在不同月份預(yù)測效果的差異, 筆者選取了8月~12月下旬作為測試集, 進行實驗對比分析。表5給出了各個月份的風(fēng)資源變化情況以及Stacking融合模型預(yù)測的平均絕對百分比誤差指標。
表5 8月~12月風(fēng)資源變化及Stacking融合模型的預(yù)測誤差指標
在5個月的統(tǒng)計中可看出, Stacking融合模型表現(xiàn)出較為出色的預(yù)測能力。11月和12月相比較前3個月風(fēng)速更高, 風(fēng)電場所發(fā)出的功率也明顯變多。原因是本地風(fēng)速具有明顯的季節(jié)變化特征, 冬春季最大, 秋夏季最小。此外, 由于春冬兩季的風(fēng)功率波動也更為頻繁且劇烈, 因此Stacking融合模型的平均絕對百分比誤差在11月、 12月的預(yù)測誤差略微高于前3個月。
筆者借鑒了深度學(xué)習(xí)領(lǐng)域中的前沿算法和技術(shù), 在深度學(xué)習(xí)的基礎(chǔ)上提出了基于Stacking融合多個不同GRU模型的風(fēng)電場短期功率預(yù)測方法, 第1級中3個多層GRU模型能深度提取風(fēng)電場歷史序列中的特征信息, 因此在風(fēng)電場輸出功率波動比較大時有更好的預(yù)測能力, 第2級的GRU模型能糾正第1級模型的預(yù)測偏差, 使整個融合模型的預(yù)測泛化能力得以增強。筆者以寧夏太陽山風(fēng)電場為例, 建立Stacking融合模型的短期風(fēng)電場功率預(yù)測模型, 仿真結(jié)果表明該模型有更好的預(yù)測精度。