徐先峰,蔡路路,張 麗
長安大學(xué) 電子與控制工程學(xué)院,西安710064
隨著大規(guī)模的光伏并網(wǎng),光伏輸出功率自身的不穩(wěn)定性、波動(dòng)性和間歇性對電網(wǎng)的穩(wěn)定運(yùn)行及調(diào)度管理帶來諸多問題[1-2]。精確的光伏發(fā)電預(yù)測對于優(yōu)化電網(wǎng)運(yùn)行,提高系統(tǒng)可靠性,保證電能質(zhì)量,提高光伏發(fā)電站運(yùn)行、管理及發(fā)電效率具有重大意義[3-4]。
國內(nèi)外對于光伏發(fā)電預(yù)測模型的建立進(jìn)行了大量研究。目前按照預(yù)測方式可將光伏發(fā)電預(yù)測方法分為直接預(yù)測和間接預(yù)測[5]。前者直接對光伏發(fā)電系統(tǒng)的輸出功率進(jìn)行預(yù)測,常用的預(yù)測模型主要有支持向量機(jī)(Support Vector Machine,SVM)[6]、自回歸積分滑動(dòng)平均模型(Autoregressive Integrated Moving Average Model,ARIMA)[7]等;后者先對太陽輻射強(qiáng)度進(jìn)行預(yù)測,再利用發(fā)電系統(tǒng)模型預(yù)測輸出功率,主要有基于數(shù)值天氣預(yù)報(bào)預(yù)測法[8]、基于云圖預(yù)測法[9]等。直接預(yù)測雖簡潔方便,但需基于歷史發(fā)電數(shù)據(jù)直接預(yù)測輸出功率,其準(zhǔn)確性依賴于預(yù)測算法以及是否有大量準(zhǔn)確的歷史數(shù)據(jù)。間接預(yù)測對太陽輻射強(qiáng)度和輸出功率分別進(jìn)行建模預(yù)測,建模方法具有一定的靈活性,但兩個(gè)預(yù)測模型的建立提高了預(yù)測成本,并存在著預(yù)測誤差疊加的問題。
近年來,深度學(xué)習(xí)由于其強(qiáng)大的建模能力和顯著的預(yù)測能力備受關(guān)注[10],也逐漸應(yīng)用于光伏發(fā)電預(yù)測之中。目前使用較多的預(yù)測模型主要有長短期記憶網(wǎng)絡(luò)(LSTM)[11],多層感知器(MLP)[12]和深度信念網(wǎng)絡(luò)(DBN)[13]。
作為典型的深度學(xué)習(xí)算法,LSTM在處理與時(shí)間序列相關(guān)的問題中,如股票預(yù)測[14]、負(fù)荷預(yù)測[15]、風(fēng)電預(yù)測[16]等,均表現(xiàn)出十分優(yōu)秀的預(yù)測性能,已成為評測深度學(xué)習(xí)新算法性能的參照標(biāo)準(zhǔn)[17]。MLP 克服了傳統(tǒng)感知器難以解決非線性問題的弱點(diǎn),并且具有較強(qiáng)的非線性映射能力、泛化能力和容錯(cuò)能力,但模型收斂速度較慢,學(xué)習(xí)效率低,對于復(fù)雜性問題預(yù)測精度不高。DBN雖然能夠有效預(yù)測處理大量復(fù)雜數(shù)據(jù),但由于需要進(jìn)行逐步分層預(yù)訓(xùn)練,學(xué)習(xí)時(shí)間較長,且若參數(shù)選擇不當(dāng)極易陷入局部最優(yōu)問題。
為了綜合利用MLP算法較強(qiáng)的非線性問題解決能力以及DBN 算法有效處理大量復(fù)雜數(shù)據(jù)的優(yōu)勢,構(gòu)建高精度的光伏發(fā)電預(yù)測模型,本文在深入分析MLP 算法及DBN算法的基礎(chǔ)上,提出了一種融合MLP和DBN的預(yù)測算法(MLP-DBN),首先利用MLP模型進(jìn)行初步預(yù)測,繼而將預(yù)測值與實(shí)際值間的殘差輸入DBN 模型預(yù)測,最終利用殘差預(yù)測值對MLP 模型的預(yù)測值進(jìn)行修正。本文利用光伏發(fā)電實(shí)測數(shù)據(jù),基于Keras 平臺進(jìn)行了仿真,探究了不同學(xué)習(xí)率對模型預(yù)測性能的影響,并對模型中各參數(shù)進(jìn)行了尋找設(shè)置。最后通過性能指標(biāo)對MLP-DBN算法進(jìn)行了性能評估。仿真結(jié)果表明,與傳統(tǒng)的預(yù)測算法SVM 以及典型的深度學(xué)習(xí)算法LSTM 相比,MLP-DBN 算法的各項(xiàng)性能指標(biāo)均有較大改善,可以有效進(jìn)行光伏發(fā)電預(yù)測。
MLP-DBN 融合算法模型訓(xùn)練的基本思想是:首先將待預(yù)測光伏數(shù)據(jù)輸入模型,利用MLP 模型進(jìn)行初步訓(xùn)練并得出發(fā)電預(yù)測值;計(jì)算出預(yù)測值與實(shí)際觀測值之間的殘差,將殘差輸入DBN模型進(jìn)行訓(xùn)練,得出殘差預(yù)測值;模型訓(xùn)練完成后,用DBN模型得到的殘差預(yù)測值對MLP 模型得到的預(yù)測值進(jìn)行修正,得到最終光伏發(fā)電預(yù)測值。模型訓(xùn)練過程如圖1所示。
圖1 MLP-DBN模型訓(xùn)練流程圖
具體的算法流程如下:
(2)利用MLP模型進(jìn)行訓(xùn)練并預(yù)測,得出發(fā)電預(yù)測值Y′。
(3)計(jì)算上一步中預(yù)測值與實(shí)際觀測值間的殘差Residual=Y′-Y。
(4)將MLP模型得到的殘差Residual輸入DBN模型中進(jìn)行訓(xùn)練,得出殘差預(yù)測值Residual′。
(5)修正MLP模型得到的預(yù)測值,得出最終發(fā)電預(yù)測值Y_final=Y′+Residual′。
MLP-DBN預(yù)測模型結(jié)構(gòu)如圖2所示。其結(jié)構(gòu)主要由MLP模塊和DBN模塊組成,MLP模塊將待預(yù)測光伏數(shù)據(jù)進(jìn)行初步訓(xùn)練后預(yù)測,輸出發(fā)電預(yù)測值;DBN模塊將根據(jù)MLP模塊得到的殘差進(jìn)行訓(xùn)練后得出殘差預(yù)測值并輸出。最后利用DBN 模塊輸出的殘差預(yù)測值對MLP 模塊所得發(fā)電預(yù)測值進(jìn)行修正,從而得出最終發(fā)電預(yù)測值。
圖2 MLP-DBN模型結(jié)構(gòu)圖
MLP 模塊的作用是利用光伏發(fā)電實(shí)測數(shù)據(jù)進(jìn)行初步預(yù)測,以便利用預(yù)測值與實(shí)際觀測值進(jìn)行殘差計(jì)算。其輸入層的輸入數(shù)據(jù)為光伏發(fā)電功率數(shù)據(jù),輸入層接收數(shù)據(jù)后將數(shù)據(jù)傳至隱藏層,在隱藏層內(nèi)將數(shù)據(jù)進(jìn)行分析處理后再傳至輸出層,最后在輸出層內(nèi)對數(shù)據(jù)進(jìn)行處理后輸出。
具體的預(yù)測過程如下:
假設(shè)MLP 預(yù)測模型的輸入為n維向量X=[x1,x2,…,xn],數(shù)據(jù)在隱藏層內(nèi)進(jìn)行分析處理后,其輸出由下式得出:
其中Wh與bh代表權(quán)值和偏置。
輸出層將數(shù)據(jù)進(jìn)行最終處理后輸出,由下式得出:
DBN模塊的作用是利用MLP模塊得出的預(yù)測值與實(shí)際觀測值間的殘差進(jìn)行預(yù)測。第一個(gè)RBM的可視層接收輸入數(shù)據(jù),即MLP 模型得到的預(yù)測值與實(shí)際值之間的殘差,之后將其傳入下層隱含層。隱含層將數(shù)據(jù)的特征信息進(jìn)行提取并輸出至下一個(gè)RBM 的隱含層,以此逐層向上進(jìn)行訓(xùn)練直至最后一層隱含層,其中前一個(gè)RBM 的隱含層作為下一個(gè)RBM 的可視層。最后一個(gè)RBM 將數(shù)據(jù)傳入頂層的輸出層,通過在頂層添加標(biāo)簽數(shù)據(jù),利用BP算法對整個(gè)網(wǎng)絡(luò)進(jìn)行微調(diào)。
具體預(yù)測過程如下:
(1)將輸入向量X賦給可視層V1,利用下式計(jì)算出使隱藏層中每個(gè)神經(jīng)元被開啟的概率:
其中,b代表可視層的偏置,σ代表sigmoid函數(shù)。從計(jì)算出的概率分布進(jìn)行Gibbs抽樣:
(2)利用H1構(gòu)造下一個(gè)RBM 的可視層,計(jì)算使可視層中每個(gè)神經(jīng)元被開啟的概率:
其中,a代表隱藏層的偏置,計(jì)算概率密度后進(jìn)行Gibbs抽樣:
(3)更新權(quán)值和偏置。
其中,lr代表學(xué)習(xí)率。
(4)利用BP 算法微調(diào)網(wǎng)絡(luò)的權(quán)值,最小化目標(biāo)函數(shù),目標(biāo)函數(shù)為均方誤差:
(5)根據(jù)理想輸出進(jìn)行預(yù)測。
本次實(shí)驗(yàn)在Keras2.4 環(huán)境下進(jìn)行。選擇的數(shù)據(jù)集來自GECAD 光伏系統(tǒng)的數(shù)據(jù)庫[18],數(shù)據(jù)集內(nèi)數(shù)據(jù)包括日期時(shí)間和發(fā)電量,采樣周期為1 min,采樣時(shí)間為2016年7月27日到2016年11月16日,共157 178個(gè)樣本,并將數(shù)據(jù)集前70%的數(shù)據(jù)作為訓(xùn)練集擬合模型;數(shù)據(jù)集后30%的數(shù)據(jù)作為測試集進(jìn)行預(yù)測,以測試算法性能[19]。
由于數(shù)據(jù)集內(nèi)數(shù)據(jù)具有穩(wěn)定的變化趨勢且不存在極端的最大最小值,為了確保數(shù)據(jù)的有效性,消除指標(biāo)之間的量綱影響并得到更準(zhǔn)確的數(shù)據(jù)分析結(jié)果,需要將數(shù)據(jù)按下式進(jìn)行歸一化處理[20]。
其中,xmax為數(shù)據(jù)集中的最大值,xmin為數(shù)據(jù)集中的最小值。
為了評估各預(yù)測模型的性能,本文選用了均方根誤差(RMSE)、平均絕對誤差(MAE)和決定系數(shù)R2作為性能評估指標(biāo)。各性能指標(biāo)表達(dá)式如下:
其中,yi代表真實(shí)值,代表預(yù)測值,代表真實(shí)數(shù)據(jù)的平均值,即
MLP-DBN模型的輸入數(shù)據(jù)為來自GECAD光伏系統(tǒng)的光伏發(fā)電歷史功率數(shù)據(jù),如圖3所示。
圖3 光伏發(fā)電歷史數(shù)據(jù)
首先將輸入數(shù)據(jù)通過公式(9)進(jìn)行歸一化處理。將數(shù)據(jù)歸一化后可以消除量綱影響,方便數(shù)據(jù)處理,其次可以加快模型收斂速度,提升模型性能。歸一化處理后的數(shù)據(jù)如圖4 所示。將處理后的數(shù)據(jù)輸入MLP-DBN模型,即作為MLP 模塊的輸入數(shù)據(jù)。數(shù)據(jù)輸入MLP 模塊后,經(jīng)過訓(xùn)練學(xué)習(xí)輸出數(shù)據(jù),得出初始預(yù)測值,如圖5所示。
圖4 MLP模塊的輸入數(shù)據(jù)
圖5 MLP模塊的輸出數(shù)據(jù)
將MLP模塊得到的初始預(yù)測值與觀測值進(jìn)行殘差計(jì)算,將其輸入DBN 模塊,即將MLP 模型的輸出數(shù)據(jù)進(jìn)行殘差計(jì)算后作為DBN 模塊的輸入數(shù)據(jù),如圖6 所示。DBN 模塊經(jīng)過訓(xùn)練學(xué)習(xí)后輸出數(shù)據(jù),得出殘差預(yù)測值,如圖7所示。使用DBN模塊得到的殘差預(yù)測值修正由MLP模塊得到的初始預(yù)測值,即利用DBN 模塊的輸出數(shù)據(jù)修正MLP模塊的輸出數(shù)據(jù),得到最終預(yù)測值,則MLP-DBN模型預(yù)測結(jié)束。
圖6 DBN模塊的輸入數(shù)據(jù)
圖7 DBN模塊的輸出數(shù)據(jù)
為了提高模型收斂速度,減少訓(xùn)練過程中學(xué)習(xí)率的手動(dòng)調(diào)節(jié),預(yù)測模型采用Adam 優(yōu)化器[21]。學(xué)習(xí)率(Learning Rate)是指在優(yōu)化器中更新網(wǎng)絡(luò)權(quán)值時(shí)的幅度,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型時(shí),學(xué)習(xí)率的設(shè)置對于網(wǎng)絡(luò)的學(xué)習(xí)速度和效率起著重要作用。本算法需對MLP 和DBN 分別進(jìn)行建模,并需分別設(shè)置初始學(xué)習(xí)率,因此學(xué)習(xí)率對于本模型的預(yù)測性能有關(guān)鍵性影響。為尋找合適的初始學(xué)習(xí)率,本實(shí)驗(yàn)在引入Dropout[22]以防止出現(xiàn)過擬合問題的基礎(chǔ)上,對學(xué)習(xí)率的設(shè)置進(jìn)行了如下實(shí)驗(yàn):
case1 MLP模型與DBN模型學(xué)習(xí)率均設(shè)為0.01。
case2 MLP模型設(shè)為0.01,DBN模型設(shè)為0.005。
case3 MLP模型設(shè)為0.01,DBN模型設(shè)為0.001。
case4 MLP模型設(shè)為0.01,DBN模型設(shè)為0.000 5。
case5 MLP模型設(shè)為0.01,DBN模型設(shè)為0.000 1。
case6 MLP模型設(shè)為0.005,DBN模型設(shè)為0.000 1。
case7 MLP模型設(shè)為0.001,DBN模型設(shè)為0.000 1。
case8 MLP模型設(shè)為0.000 5,DBN模型設(shè)為0.000 1。
case9 MLP模型與DBN模型均設(shè)為0.000 1。
各組合下的預(yù)測結(jié)果如圖8所示。
實(shí)驗(yàn)表明,當(dāng)學(xué)習(xí)率設(shè)置過大時(shí),損失函數(shù)將出現(xiàn)大幅度震蕩,無法有效收斂。適當(dāng)減小學(xué)習(xí)率可使得模型的損失減小,并且有效改善預(yù)測模型的性能。但當(dāng)設(shè)置過小時(shí),對預(yù)測性能影響不大,反而使得模型訓(xùn)練時(shí)間增長。在仔細(xì)觀察各學(xué)習(xí)率下的損失函數(shù)曲線圖以及性能指標(biāo)的基礎(chǔ)上,發(fā)現(xiàn)當(dāng)MLP 的學(xué)習(xí)率設(shè)置為0.001 以及DBN 的學(xué)習(xí)率設(shè)置為0.000 1 時(shí),損失函數(shù)表現(xiàn)良好,性能指標(biāo)最優(yōu),且訓(xùn)練時(shí)間最短。因此最終確定MLP模型的學(xué)習(xí)率為0.001,DBN模型的學(xué)習(xí)率為0.000 1。
圖8 不同學(xué)習(xí)率下的預(yù)測結(jié)果對比圖
實(shí)驗(yàn)表明,學(xué)習(xí)率的優(yōu)化設(shè)置對于解決MLP 收斂速度慢,學(xué)習(xí)能力較差以及DBN 學(xué)習(xí)時(shí)間較長的問題有一定的改善,為了進(jìn)一步克服兩者的缺點(diǎn),本實(shí)驗(yàn)采用試錯(cuò)法對可改善以上問題的模型參數(shù),包括批大小(batch_size)、激活函數(shù)等進(jìn)行了尋找優(yōu)化設(shè)置。參數(shù)尋找過程為首先根據(jù)經(jīng)驗(yàn)值分別設(shè)定MLP 及DBN 模塊的初始參數(shù)值[23-24],通過觀察模型的訓(xùn)練時(shí)間以及性能指標(biāo),反復(fù)修改模型中的參數(shù),不斷優(yōu)化模型的訓(xùn)練時(shí)間及性能指標(biāo)。直至模型訓(xùn)練時(shí)間以及性能指標(biāo)表現(xiàn)最優(yōu)時(shí),便將所設(shè)置參數(shù)確定為最終參數(shù)。各參數(shù)下模型測試結(jié)果如表1、表2所示。
表1 MLP測試結(jié)果
表2 DBN測試結(jié)果
由各參數(shù)下模型的測試結(jié)果可以看出,雖然batch_size 增大時(shí)可有效減少訓(xùn)練時(shí)間,但是較大的batch_size 將使得模型的預(yù)測精度降低。另外,對于MLP模塊,當(dāng)其激活函數(shù)選擇Relu時(shí),將使得模型的訓(xùn)練時(shí)間減少,并且相比于其他激活函數(shù)有較高的預(yù)測精度。對于DBN模塊,當(dāng)其激活函數(shù)選擇Tanh時(shí),相比于其他激活函數(shù),DBN模塊的訓(xùn)練時(shí)間較短,并且此時(shí)的預(yù)測精度較高。故最終將MLP 模塊的batch_size 設(shè)為150,激活函數(shù)選擇Relu;DBN 模塊的batch_size 設(shè)為100,激活函數(shù)選擇Tanh。此參數(shù)的選擇使得MLP 和DBN的學(xué)習(xí)能力顯著提高,從而提高M(jìn)LP-DBN模型的性能。
模型其余參數(shù)同樣采用試錯(cuò)法,通過觀察訓(xùn)練時(shí)間及性能指標(biāo),經(jīng)過反復(fù)實(shí)驗(yàn)后,確定了模型的最終參數(shù)。具體參數(shù)設(shè)置如表3所示。
表3 模型參數(shù)設(shè)置
SVM 作為傳統(tǒng)的機(jī)器學(xué)習(xí)算法,被廣泛應(yīng)用于光伏發(fā)電預(yù)測問題中,并具有較高的準(zhǔn)確性,但當(dāng)數(shù)據(jù)集較大時(shí),訓(xùn)練時(shí)間較長,且預(yù)測性能將受到一定制約[25]。為驗(yàn)證MLP-DBN算法的有效性,本文選取SVM算法和LSTM算法進(jìn)行對比,同時(shí)將算法與單一的MLP算法及DBN算法進(jìn)行對比,以此對MLP-DBN算法進(jìn)行評估。各對比模型參數(shù)設(shè)置如表4所示,SVM模型的核函數(shù)采用Linear。預(yù)測仿真結(jié)果如圖9 所示(True 代表真實(shí)值,SVM 為SVM 模型,DBN 為單一的DBN 模型,MLP 為單一的MLP 模型,LSTM 為LSTM 模型,MLP and DBN為MLP-DBN模型)。
表4 各對比模型參數(shù)設(shè)置
圖9 各預(yù)測算法的仿真結(jié)果
各預(yù)測算法的RMSE、MAE、R2、訓(xùn)練時(shí)間以及測試時(shí)間如表5所示。
表5 各算法性能指標(biāo)對比表
仿真結(jié)果表明,SVM 預(yù)測算法在發(fā)電量谷值時(shí)具有較大的偏差且測試時(shí)間較長,而LSTM預(yù)測算法雖具有較高的預(yù)測精度,但在發(fā)電量谷值時(shí)預(yù)測偏差也較大,訓(xùn)練與測試時(shí)間也相對較長。而MLP-DBN模型得到的預(yù)測值與實(shí)際值十分接近,并且變化趨勢一致,在發(fā)電量峰值和谷值時(shí)都有較高的預(yù)測精度。通過比較MLP-DBN算法與SVM、LSTM、MLP、DBN算法的性能指標(biāo)表明,MLP-DBN算法的RMSE分別降低了2.20%、1.64%、2.09%、4.83%,MAE 分別降低了0.67%、0.11%、1.12%、1.30%,R2分別提高了2.96%、2.05%、2.77%、8.64%,各項(xiàng)預(yù)測誤差均有明顯改善,大幅度提高了預(yù)測精度。雖然MLP-DBN 的訓(xùn)練時(shí)間相較SVM 算法較長,但是其測試時(shí)間相比各算法均有一定的優(yōu)化。
本文利用深度學(xué)習(xí)方法實(shí)現(xiàn)了光伏發(fā)電預(yù)測,并提出了一種將MLP 和DBN 相結(jié)合的MLP-DBN 算法,通過對比MLP-DBN 算法與其他算法的性能指標(biāo)和仿真結(jié)果表明,與單一的MLP預(yù)測模型和單一的DBN 預(yù)測模型相比,MLP-DBN 模型的預(yù)測效果有較大的提升。與傳統(tǒng)的預(yù)測算法SVM模型以及具有較強(qiáng)預(yù)測能力的LSTM 預(yù)測模型相比,MLP-DBN 模型的性能指標(biāo)均有明顯的改善,說明MLP-DBN 具有優(yōu)秀的預(yù)測精度,有利于解決光伏發(fā)電預(yù)測問題。雖然測試時(shí)間相比其他算法有一定的減短,但是模型的訓(xùn)練時(shí)間較長,故未來可對模型的訓(xùn)練及測試時(shí)間進(jìn)行改善,另外可考慮采用其他方法進(jìn)行參數(shù)調(diào)優(yōu),進(jìn)一步提高模型的精度。