張建寰,吉 瑩,陳立東
(廈門大學航空航天學院,福建 廈門 361000)
負荷預(yù)測作為電力系統(tǒng)調(diào)度的重要組成部分,其預(yù)測精度或預(yù)測誤差對電網(wǎng)后續(xù)運行的狀態(tài)評估、安全性、經(jīng)濟性等具有重要意義[1-3]。隨著機器學習的快速發(fā)展,目前負荷預(yù)測多采用前饋神經(jīng)網(wǎng)絡(luò)、支持向量機等機器學習技術(shù)。但由于其只是停留在淺層的學習,難以提取負荷序列的深層特征,預(yù)測精度有待進一步提升。
深度學習負荷預(yù)測領(lǐng)域表現(xiàn)出的自適應(yīng)學習、感知能力,可以有效解決淺層預(yù)測模型對非線性負荷數(shù)據(jù)和多因素影響的認知能力不足,以及人為干擾等問題[4-5]。因此,為提高負荷預(yù)測的精度,本文將深度學習中的幾個典型模型應(yīng)用到負荷預(yù)測中,進行短期電力負荷預(yù)測,并采用常用的模型評價指標對幾種模型的負荷預(yù)測進行評估和對比。
電力系統(tǒng)的負荷預(yù)測是根據(jù)電力系統(tǒng)的運行特性及其他諸多因素,在滿足一定精度要求下預(yù)測電力系統(tǒng)未來某些特定時刻的負荷數(shù)據(jù)。由于電能難以大量存儲且用戶端電力需求時刻變化,這就要求系統(tǒng)發(fā)電量要和負荷變化時刻保持動態(tài)平衡。由于負荷預(yù)測是根據(jù)過去的數(shù)值來推測未來的數(shù)值,因此負荷預(yù)測的研究對象是一個不確定、復(fù)雜的隨機事件,具有不準確性、條件性、時間性和多方案性等特點。
電力負荷預(yù)測,根據(jù)其預(yù)測周期,可以分為長期、中期、短期以及超短期負荷預(yù)測。其中,短期負荷預(yù)測研究較多,其預(yù)測目標一般是預(yù)測某個地區(qū)未來一天或者一周的用電量數(shù)據(jù)。相較于其他周期的負荷預(yù)測,短期負荷預(yù)測更具實際意義,是制定發(fā)電計劃和提供調(diào)度的重要參考依據(jù)。短期負荷預(yù)測的方法有很多,傳統(tǒng)的負荷預(yù)測主要方法有:基于時間序列的自回歸滑動平均模型(autoregressive moving average model,ARMA)、灰度預(yù)測和線性回歸分析法等。這些模型的預(yù)測結(jié)構(gòu)較為簡單,應(yīng)用廣泛。但是它們對序列數(shù)據(jù)平穩(wěn)型要求較高。大多數(shù)情況下,這些模型只是利用歷史負荷數(shù)據(jù)對未來負荷進行預(yù)測,考慮因素單一,在某些情況下預(yù)測的精度會受到很大的影響。
深度學習(也稱為深度結(jié)構(gòu)學習或逐層學習)不是特定于任務(wù)的算法,而是作為以數(shù)據(jù)學習規(guī)律為代表的、更廣泛的機器學習方法系列的一部分。它的學習方式分為監(jiān)督學習、半監(jiān)督學習和無監(jiān)督學習。作為機器學習中一個新的研究領(lǐng)域,它的原理是通過建立神經(jīng)網(wǎng)絡(luò)模擬人腦來分析學習,并試圖模仿人腦的機制去解釋事物原理。深度學習架構(gòu),比如深度神經(jīng)網(wǎng)絡(luò)、深度信念網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò),目前已被廣泛應(yīng)用到計算機視覺、圖像處理、自然語言處理、語音識別、音頻識別、社交網(wǎng)絡(luò)過濾、機器翻譯、生物信息學、藥物設(shè)計和棋盤游戲程序等領(lǐng)域。機器學習的成果可與人類專家媲美,甚至在某些情況下要優(yōu)于人類專家。
長短時記憶(long-short-term memory,LSTM)神經(jīng)網(wǎng)絡(luò)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural networks,RNN)類型,可以學習長期依賴信息。其由Hochreiter &Schmidhuber于1997年提出,近期取得了改良和推廣。典型的RNN結(jié)構(gòu)如圖1所示。RNN神經(jīng)網(wǎng)絡(luò)內(nèi)部節(jié)點定向鏈接成環(huán)。相比于前饋神經(jīng)網(wǎng)絡(luò),它的本質(zhì)特征是在內(nèi)部的處理單元中既有反饋連接,又有前饋連接。因此,它可以利用結(jié)構(gòu)的記憶功能來處理任意時間序列,更適用于不分段的手寫識別或者語音識別等[6-7]。
圖1 RNN結(jié)構(gòu)圖Fig.1 RNN structure
圖1中:X為RNN神經(jīng)網(wǎng)絡(luò)的輸入;h為隱含層;損失L用來衡量每個O與相應(yīng)的訓練目標y的距離;權(quán)重矩陣U為輸入到隱藏層的權(quán)重;權(quán)重矩陣W為隱藏層到隱藏層的連接權(quán)重;權(quán)重矩陣V為隱藏層到輸出層的權(quán)重矩陣。
RNN神經(jīng)網(wǎng)絡(luò)的局限性在于,隨著時間間隔的不斷增大,它會出現(xiàn)梯度消失或梯度爆炸的問題,并且其結(jié)構(gòu)很容易依賴于激活函數(shù)和網(wǎng)絡(luò)參數(shù)。基于上述問題,出現(xiàn)了RNN的變體LSTM神經(jīng)網(wǎng)絡(luò)[3]。LSTM典型結(jié)構(gòu)如圖2所示。
圖2 LSTM典型結(jié)構(gòu)圖Fig.2 Typical LSTM structure
圖2中,每條線表示一個完整的向量,即從一個節(jié)點的輸出到其他節(jié)點的輸入。
在標準的RNN結(jié)構(gòu)中,其重復(fù)的神經(jīng)網(wǎng)絡(luò)模塊的鏈式形式只包含一個非常簡單的結(jié)構(gòu),如tanh層(如圖1所示)。LSTM擁有一個不同的內(nèi)部結(jié)構(gòu)。它不是只有單一的神經(jīng)網(wǎng)絡(luò)層,而是有四個,并且以特殊的方式進行交互。根據(jù)圖2所示,可以用以下幾個公式解釋LSTM循環(huán)模型單個循環(huán)體的結(jié)構(gòu)。
輸入門:
it=σ(Wi[ht-1,xt]+b)
(1)
遺忘門:
ft=σ(Wf[ht-1,xt]+bf)
(2)
候選時刻記憶單元:
(3)
當前時刻記憶單元:
(4)
輸出門:
ot=σ(W0[ht-1,xt]+b0)
(5)
輸出:
ht=ottanh(Ct)
(6)
LSTM和RNN都是利用隨時間反向傳播(back propagation through time,BPTT)、隨機梯度或者其他算法,優(yōu)化去擬合模型的最佳參數(shù)。由于LSTM更新的狀態(tài)值Ct的表達式是相加的形式,因此不容易出現(xiàn)狀態(tài)值逐漸接近0的情況,即梯度消失現(xiàn)象。
并非所有的LSTM網(wǎng)絡(luò)結(jié)構(gòu)都如圖2所示。LSTM神經(jīng)網(wǎng)絡(luò)目前包含了很多的變體,其中較流行的一種是變體門循環(huán)單元(gated recurrent unit,GRU)神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)如圖3所示。它既保持了LSTM的效果,又使得結(jié)構(gòu)更為簡單。LSTM實現(xiàn)了三個門(遺忘門、輸入門和輸出門)的計算,而GRU實現(xiàn)了更新門和重置門的計算,即圖3中的Zt和γt。
圖3 GRU結(jié)構(gòu)圖Fig.3 GRU structure
GRU的前向傳播方式為:
r1=σ(Wr[ht-1,xt])
(7)
zt=σ(Wz[ht-1,xt])
(8)
(9)
(10)
yt=σ(W0ht)
(11)
自編碼器(autoencoder,AE)是構(gòu)建棧式自編碼器(stacked auto-encoder,SAE)模型的基本單元,通過編碼和解碼兩個功能去逼近一個使得輸出接近于輸入的恒等函數(shù)。自編碼器結(jié)構(gòu)如圖4所示。其包含可視層、隱藏層和重構(gòu)可視層,是一個類似于三層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)[8]。
圖4 自編碼器結(jié)構(gòu)圖Fig.4 AE structure
在編碼階段,將Xi作為特征向量輸入到隱藏層中,通過式(12)完成特征提取,得出編碼結(jié)果h;然后使用式(13)隱含層輸出結(jié)果進行解碼重構(gòu),輸出解碼結(jié)果y(xi)。
h=f(w1xi+b1)
(12)
y(xi)=g(w2h+b2)
(13)
式(12)、式(13)中,w1和w2分別表示可視層與隱藏層、隱藏層與重構(gòu)可視層的連接權(quán)值矩陣,b1和b2分別表示可視層與隱藏層、隱藏層與重構(gòu)可視層的偏置值矩陣。f()和g()是對應(yīng)節(jié)點的變換函數(shù),一般采用sigmoid函數(shù)。單個自編碼器通過反向傳播算法訓練網(wǎng)絡(luò),以最小化損失函數(shù)L來求解滿足逼近條件y(xi)≈xi的參數(shù){w,b}的值。自編碼器損失函數(shù)C可表示為:
(14)
從圖4可以發(fā)現(xiàn),每個單元輸入層與輸出層的神經(jīng)元數(shù)量相等。在實際使用中,SAE是由多個AE自編碼器疊加起來的,并且逐個訓練。只不過從第二個自編碼器開始,其輸入向量就變成了前一個編碼器的隱藏層。
SAE模型結(jié)構(gòu)如圖5所示。其中,虛線框的結(jié)構(gòu)在SAE堆疊模型結(jié)構(gòu)中不出現(xiàn)。
圖5 SAE模型結(jié)構(gòu)圖Fig.5 SAE model structure
目前,電網(wǎng)系統(tǒng)系統(tǒng)收集了大量的電量信息,但是仍不可避免地存在數(shù)據(jù)缺失或者數(shù)據(jù)異常的情況[5]。如果這些數(shù)據(jù)不加以處理直接輸入神經(jīng)網(wǎng)絡(luò)預(yù)測模型,必然會導(dǎo)致很大的誤差。因此,需要對缺失的數(shù)據(jù)進行填補,并對異常數(shù)據(jù)進行識別和修正。這就是數(shù)據(jù)預(yù)處理所要做的工作[9-10]。
(1)異常數(shù)據(jù)的識別和修正處理。
正常情況下,電力負荷數(shù)據(jù)都是連續(xù)平滑的,相鄰時刻點的負荷數(shù)據(jù)值不會相差太大。如果差距明顯很大,那就可能是異常數(shù)據(jù)。本文中對異常數(shù)據(jù)采取水平處理方法修正,具體修正方法如下。
如果:
max[|Y(d,t)-Y(d,t-1)|,|(Y(d,t)-
Y(d,t+1)|]>ε(t)
(15)
那么:
(16)
式中:ε為閾值;t為采樣的時間點。
本文中的數(shù)據(jù)是每隔半小時的數(shù)據(jù),因此t的取值范圍為1~48,Y(d,t+1)表示第d天(t+1)時刻的電力負荷值。
(2)缺失數(shù)據(jù)的補充。
考慮到負荷數(shù)據(jù)的周期性,本文對負荷數(shù)據(jù)中意外丟失的數(shù)據(jù)作拉格朗日插值法處理。
(3)數(shù)據(jù)樣本歸一化。
歸一化操作的公式為:
(17)
式中:P為預(yù)處理后的輸入樣本矩陣;Pd為歸一化處理后的數(shù)據(jù)矩陣;Pmax為歷時輸入數(shù)據(jù)中的最大值;Pmin為歷時輸入數(shù)據(jù)中的最小值。
本次試驗中,采用的數(shù)據(jù)樣本為某地區(qū)2016年整年的負荷數(shù)據(jù),采樣周期為每半小時一次。將預(yù)處理后的數(shù)據(jù)分別輸入構(gòu)建的LSTM、GRU和SAE模型中。
LSTM和GRU按照正常的RNN網(wǎng)絡(luò)進行訓練。由于電腦硬件的限制,在模型的訓練中,LSTM 和GRU模型都只設(shè)計了兩個隱藏層,SAE模型中構(gòu)建了三個單獨的自動編碼器。
自編碼器訓練的原理如前文所述,就是通過encode層對輸入進行編碼,即提取特征;然后,用encode層參數(shù)的轉(zhuǎn)置成特征矩陣再加偏置值矩陣,以此重構(gòu)輸入;最后,利用最小化重構(gòu)的輸入和實際輸入值的損失函數(shù)訓練模型參數(shù)。SAE的訓練過程是多個AE分別訓練,第一個AE訓練完以后,其輸出作為第二個AE的輸入,以此類推。訓練完成后,將所有AE的隱藏層連接起來,就組成了SAE網(wǎng)絡(luò)模型。按照之前各自AE訓練好的權(quán)值作為初始化權(quán)值,對整個網(wǎng)絡(luò)進行參數(shù)微調(diào),優(yōu)化全局網(wǎng)絡(luò)參數(shù)。
本文采用了平均絕對誤差(mean absolute error,MAE)、均方根誤差(root mean square error,RMSE)、相對百分誤差絕對值的平均值(mean absolute percentage error,MAPE)、R平方(R2)和可釋方差得分(explained_variance_score)這五個指標,分別對模型的預(yù)測結(jié)果進行評估和對比。
(18)
(19)
(20)
explained_variance_score[y(i),h(x(i)]=
(21)
式中:h(x(i))為網(wǎng)絡(luò)輸出的預(yù)測值;y(i)為實際負荷值。
本文以三種算法模型作為對比算法,分別將2016年一整年的負荷數(shù)據(jù)和2015~2016年兩年負荷數(shù)據(jù)輸入模型,對比各個模型的預(yù)測結(jié)果。編碼實現(xiàn)基于Python3.6平臺完成。表1展示了三個算法模型以2016全年數(shù)據(jù)訓練模型的負荷預(yù)測指標評估結(jié)果,表2展示了三個算法模型以2015~2016數(shù)據(jù)訓練模型的負荷預(yù)測指標評估結(jié)果。
表1 負荷預(yù)測指標評估結(jié)果(2016)Tab.1 Evaluation results of load forecasting indicators (2016)
表2 負荷預(yù)測指標評估結(jié)果(2015~2016)Tab.2 Evaluation results of load forecasting indicators (2015~2016)
由表1和表2可知,無論是對于負荷的長期預(yù)測還是短期預(yù)測,LSTM預(yù)測算法各個指標評價結(jié)果均優(yōu)于其他預(yù)測模型。當以2016年的負荷數(shù)據(jù)作為訓練樣本時,LSTM負荷預(yù)測的預(yù)測誤差達到5.34%;當以2015至2016兩年的負荷數(shù)據(jù)作為訓練樣本時,LSTM負荷預(yù)測的誤差可以降低至4.98%。
但由結(jié)果可知,當數(shù)據(jù)數(shù)據(jù)類型只有歷史負荷數(shù)據(jù)時,三種模型的負荷預(yù)測效果都不是很理想,誤差皆超過3%。其主要原因是影響負荷的因素有很多,例如節(jié)假日、氣候狀況、溫度等。因此,進行負荷預(yù)測時,如果只考慮歷史負荷數(shù)據(jù),誤差會相對較大。但是通過以上三個模型的預(yù)測結(jié)果評估對比可知,LSTM 預(yù)測模型更適用于負荷預(yù)測,并且輸入的歷史負荷訓練數(shù)據(jù)時間越長,越有利于提高模型的預(yù)測準確度。在下一步工作中,考慮以LSTM模型作為基礎(chǔ)進行改進,并對輸入數(shù)據(jù)加入更多的特征(例如溫度、氣候、節(jié)假日等),以提高負荷的預(yù)測精度。
電力系統(tǒng)的海量負荷數(shù)據(jù)為電網(wǎng)負荷的特性分析和高準確度、復(fù)雜的預(yù)測模型的奠定了基礎(chǔ)。傳統(tǒng)的負荷預(yù)測模型的結(jié)構(gòu)較為簡單,且考慮因素單一。而前饋神經(jīng)網(wǎng)絡(luò)、支持向量機等機器學習技術(shù)只是停留在淺層的學習,難以提取負荷序列的深層特征,模型的泛化性受到了限制,預(yù)測精度有待進一步提升。因此,本文將深度學習算法模型應(yīng)用到負荷預(yù)測領(lǐng)域,主要對比了LSTM、GRU和SAE三種算法的預(yù)測效果,并通過對比預(yù)測精度來挖掘較為適合負荷預(yù)測的基礎(chǔ)模型。在今后的研究中,會研究更多影響負荷預(yù)測的因素,并將其輸入到神經(jīng)網(wǎng)絡(luò)模型中,以優(yōu)化負荷預(yù)測模型的結(jié)構(gòu)、提高預(yù)測精度;同時,考慮加入更多的頂層預(yù)訓練器,以實現(xiàn)更精準的負荷預(yù)測。