葉 興,薛家祥
(華南理工大學(xué)機(jī)械與汽車工程學(xué)院,廣東 廣州 510640)
光伏發(fā)電并網(wǎng)系統(tǒng)中光伏板易受太陽(yáng)能輻射強(qiáng)度等氣象因素以及光伏陣列自身因素影響,導(dǎo)致輸出功率波動(dòng)較大,發(fā)電功率具有明顯的隨機(jī)性,對(duì)電網(wǎng)的安全運(yùn)行帶來了一系列的安全問題,因而對(duì)光伏發(fā)電系統(tǒng)功率的預(yù)測(cè)顯得尤為重要。
在光伏發(fā)電預(yù)測(cè)方面國(guó)內(nèi)外科研人員在該領(lǐng)域采用各種理論與預(yù)測(cè)模型,進(jìn)行了大量的探索與研究[1-3]。Muhammad Waseem Ahmad 等[4]提出了基于隨機(jī)森林算法和額外樹算法組合光伏發(fā)電預(yù)測(cè)模型,模型的輸入充分考慮光伏發(fā)電的氣象因素,從而預(yù)測(cè)出下一小時(shí)的光伏輸出功率,但是預(yù)測(cè)時(shí)間過于短暫,無法長(zhǎng)時(shí)間預(yù)測(cè)。De Giorgi等[5]采用多元線性回歸方法,以光伏發(fā)電系統(tǒng)的太陽(yáng)能輻射等氣象因素來預(yù)測(cè)發(fā)電功率,但是精確度較差。單英浩等[6]提出了基于改進(jìn)BP-SVM-ELM與粒子化SOM-LSF的微電網(wǎng)光伏發(fā)電組合預(yù)測(cè)方法,考慮目標(biāo)光伏電站與其相連的光伏電站之間的能量關(guān)系預(yù)測(cè)光伏電站發(fā)電功率,該方法只驗(yàn)證了微電網(wǎng)而沒有對(duì)大規(guī)模光伏電站進(jìn)行研究。張雨金等[7]提出Stacking-SVM的短期光伏發(fā)電功率預(yù)測(cè)方法,該方法使用與測(cè)試樣本相同類別的訓(xùn)練次數(shù)SVM,最后使用次級(jí)SVM對(duì)多個(gè)預(yù)測(cè)輸出進(jìn)行結(jié)合得到最終預(yù)測(cè)結(jié)果;但該方法僅考慮雨天、晴天、多云天氣的預(yù)測(cè),沒有考慮具體的天氣參數(shù)等因素的影響。
長(zhǎng)短期記憶(long short-term memory,LSTM)網(wǎng)絡(luò)是一種改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),LSTM已被應(yīng)用于空氣質(zhì)量指數(shù)、電力負(fù)荷、語(yǔ)音識(shí)別等的預(yù)測(cè)中,并且取得了較好的精準(zhǔn)度[8-10]。本文綜合了太陽(yáng)輻射強(qiáng)度、溫度、風(fēng)速、相對(duì)濕度等多種氣象因素,提出了基于改進(jìn)型長(zhǎng)短期記憶網(wǎng)絡(luò)的光伏發(fā)電預(yù)測(cè)方法,結(jié)合一定數(shù)量的歷史功率數(shù)據(jù)、光伏電站氣象數(shù)據(jù)搭建光伏發(fā)電功率預(yù)測(cè)模型,通過Python3.6、TensorFlow、Spyder軟件對(duì)所構(gòu)建的模型進(jìn)行訓(xùn)練和測(cè)試,并與單因素下的預(yù)測(cè)性能進(jìn)行對(duì)比,結(jié)果表明多因素參與下的預(yù)測(cè)更加接近真實(shí)值。
如圖1所示,長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)是基于循環(huán)神經(jīng)網(wǎng)絡(luò),在其基礎(chǔ)上進(jìn)行優(yōu)化與改進(jìn)。因此本文先以循環(huán)神經(jīng)網(wǎng)絡(luò)推導(dǎo)其一般計(jì)算過程。RNN相比于前饋神經(jīng)網(wǎng)絡(luò)引入了定向循環(huán),其能夠處理輸入之間的關(guān)聯(lián)問題。
圖1 RNN模型結(jié)構(gòu)
RNN的一個(gè)特點(diǎn)是所有的隱含層共享一套(U,V,W)參數(shù),以該模型推導(dǎo)RNN神經(jīng)網(wǎng)絡(luò)計(jì)算過程,RNN前向傳導(dǎo)計(jì)算:
ot——模型輸出層t時(shí)刻的輸出向量。
模型反向傳播的目的是為了得到預(yù)測(cè)誤差E關(guān)于參數(shù)(U,V,W)的梯度,即對(duì)參數(shù)求偏導(dǎo)。每個(gè)時(shí)刻預(yù)測(cè)值與實(shí)際值都有一定的誤差,對(duì)誤差求關(guān)于共享參數(shù)的梯度,以便模型后續(xù)計(jì)算過程的參數(shù)調(diào)整。本文以誤差Et為例推導(dǎo)梯度計(jì)算。Et對(duì)特征矩陣V的梯度計(jì)算有:
yt——t時(shí)刻的實(shí)際值。
由式(1)可知 ?st依賴 ?st-1,?st-1依賴W、?st-2,可得:
可見所有隱含層中共享權(quán)重W,并且變量依賴權(quán)值。在反向傳播算法中定義一個(gè)delta向量:
聯(lián)合式(6)、式(7)可得:
同理可得:
到此,完成模型梯度的求解。
深度神經(jīng)網(wǎng)絡(luò)往往具有龐大數(shù)量的神經(jīng)元,因此容易造成神經(jīng)網(wǎng)絡(luò)過擬合。一般引入DropOut層與正則化來解決模型過擬合問題。
DropOut層的作用是在神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程中,按照一定的概率丟棄神經(jīng)元,并且丟棄是隨機(jī)的[11]。DropOut同時(shí)也強(qiáng)迫神經(jīng)單元和隨機(jī)挑選出來的神經(jīng)單元共同工作,以此來降低神經(jīng)元節(jié)點(diǎn)之間的適應(yīng)性,其示意圖如圖2所示。DropOut數(shù)學(xué)表達(dá)式如下:
正則化是對(duì)模型添加先驗(yàn),從而減少模型的復(fù)雜度。當(dāng)模型過擬合時(shí),函數(shù)會(huì)傾向于噪聲點(diǎn),也就表明函數(shù)的曲線會(huì)在噪聲點(diǎn)之間跳躍,可能會(huì)導(dǎo)致函數(shù)的切線斜率在局部變動(dòng)非常大;對(duì)于多項(xiàng)式模型來說,函數(shù)導(dǎo)數(shù)的絕對(duì)值,實(shí)際上就是多項(xiàng)式系數(shù)的一個(gè)線性加和,這也就是說,過擬合的模型,至少某幾個(gè)參數(shù)分量的絕對(duì)值非常大。因此,當(dāng)系數(shù)增大時(shí),損失函數(shù)會(huì)增大,由梯度的計(jì)算公式可以知道梯度的增大會(huì)使得系數(shù)的下降程度變大,這樣就阻止了系數(shù)的進(jìn)一步增大。本文采用L2正則化其數(shù)學(xué)公式:
E——模型損失函數(shù);
λ——正則化參數(shù)。
圖2 DropOut示意圖
相比RNN神經(jīng)網(wǎng)絡(luò),LSTM網(wǎng)絡(luò)能夠捕獲間隔較大的時(shí)序數(shù)據(jù)之間的依賴關(guān)系,擺脫RNN網(wǎng)絡(luò)訓(xùn)練后期出現(xiàn)梯度消失和梯度爆炸等問題。LSTM是將RNN的隱含層神經(jīng)元替換成記憶單元,LSTM引入“門”來控制丟棄或者增加信息,神經(jīng)網(wǎng)絡(luò)通過單元狀態(tài)上的門結(jié)構(gòu)來選擇記住或者遺忘信息。門結(jié)構(gòu)中包含了sigmoid函數(shù),函數(shù)輸出區(qū)間 (0,1),“0”表示遺忘,“1”表示記憶信息。LSTM 單元中有3種調(diào)節(jié)信息流的門結(jié)構(gòu):遺忘門、輸入門、輸出門。
1)遺忘門:遺忘門決定了上一時(shí)刻的單元狀態(tài)Ct-1保留到當(dāng)前時(shí)刻狀態(tài)Ct程度,遺忘門計(jì)算公式為:
其中ft為遺忘門輸出值,σ為Sigmoid函數(shù),bf為偏置。
2)輸入門:輸入門和一個(gè)tanh函數(shù)配合控制前一時(shí)刻網(wǎng)絡(luò)的輸入xt保存到單元狀態(tài)Ct的程度。結(jié)合上一時(shí)刻單元狀態(tài)Ct-1與遺忘門ft的乘積,再計(jì)算當(dāng)前輸入的單元狀態(tài),其計(jì)算公式如下:
3)輸出門:輸出門控制單元狀態(tài)Ct輸出到LSTM的當(dāng)前輸出值ht,首先運(yùn)行sigmoid函數(shù)來確定單元狀態(tài)輸出部分,再將單元狀態(tài)通過tanh函數(shù)進(jìn)行運(yùn)算,最終兩者相乘得到輸出,計(jì)算公式為
LSTM運(yùn)行流程如圖3所示,輸出值ht已經(jīng)達(dá)到神經(jīng)元所需的閾值,則將其與當(dāng)前層計(jì)算值相乘值作為輸出進(jìn)入下一層進(jìn)行計(jì)算,未達(dá)到閾值,神經(jīng)元?jiǎng)t將其遺忘。
圖3 LSTM網(wǎng)絡(luò)運(yùn)行流程圖
深度學(xué)習(xí)問題本質(zhì)上就是找到神經(jīng)網(wǎng)絡(luò)的最小損失函數(shù)點(diǎn),往往引入優(yōu)化算法幫助更新與計(jì)算影響模型訓(xùn)練和模型輸出的網(wǎng)絡(luò)參數(shù),逼近或達(dá)到最優(yōu)值,尋找最小損失函數(shù)點(diǎn),提高模型精確度。
本文采用 RMSProp算法[12]優(yōu)化LSTM網(wǎng)絡(luò)。RMSProp算法采用累積平方梯度,即算法初始迭代點(diǎn)占的權(quán)重很小,迭代點(diǎn)靠后的梯度的權(quán)重大,這樣模型可以丟棄靠前的梯度,從而加速整體的收斂速度。算法采用了動(dòng)態(tài)的調(diào)整模型學(xué)習(xí)速率,在計(jì)算累積平方梯度時(shí)加入了衰減系數(shù)來控制模型獲取的歷史信息等優(yōu)點(diǎn)。其算法過程如下:
1)計(jì)算梯度g,定義 ?w為權(quán)值的Nabla算子,m為訓(xùn)練樣本數(shù)。其公式為:
2)計(jì)算累積平方梯度r:
其中 ρ為衰減速率。
3)計(jì)算權(quán)值更新:
其中 δ為一個(gè)十分接近于0的極小數(shù),ε為學(xué)習(xí)速率。
4)更新權(quán)值:
本文提出基于改進(jìn)型LSTM網(wǎng)絡(luò)的光伏發(fā)電功率預(yù)測(cè)模型,模型首先需要進(jìn)行樣本訓(xùn)練過程,訓(xùn)練完模型后輸入數(shù)據(jù)完成預(yù)測(cè)過程。預(yù)測(cè)模型訓(xùn)練過程需要不斷進(jìn)行誤差與參數(shù)更新,迭代的過程需要計(jì)算機(jī)進(jìn)行較大規(guī)模的運(yùn)算,通常是將模型訓(xùn)練過程放在高性能的計(jì)算機(jī)上,或者利用云計(jì)算的計(jì)算能力將模型部署到云服務(wù)器上,快速得到訓(xùn)練模型。然后將模型移植到一般的計(jì)算機(jī)上進(jìn)行預(yù)測(cè),模型的整體流程如圖4所示。
圖4 光伏發(fā)電功率預(yù)測(cè)流程圖
本文光伏發(fā)電功率歷史數(shù)據(jù)集來自澳大利亞艾利斯斯普林斯光伏電站,所采用氣象數(shù)據(jù)(包括風(fēng)速、溫度、相對(duì)濕度、全球水平輻射、漫反射水平輻射),囊括了2016年3月3日-2018年5月9日的每日數(shù)據(jù),數(shù)據(jù)每5 min采集一次。為了驗(yàn)證預(yù)測(cè)模型的性能,模型運(yùn)行環(huán)境是以keras為前端,谷歌第二代人工智能學(xué)習(xí)系統(tǒng)TensorFlow為后端,在Python3.6中完成預(yù)測(cè)模型程序的編寫,Spyder軟件編譯。并輸入數(shù)據(jù)進(jìn)行模型的仿真驗(yàn)證。
本文除了5個(gè)氣象因素作為預(yù)測(cè)模型的輸入序列,還需要24個(gè)歷史光伏數(shù)據(jù)同時(shí)作為模型輸入序列。表1為光伏電站歷史部分?jǐn)?shù)據(jù)。
表1 光伏電站歷史部分?jǐn)?shù)據(jù)
深度學(xué)習(xí)預(yù)測(cè)模型中,常對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,從而消除不同特征的量綱的影響和提高模型的計(jì)算能力和收斂速度,需對(duì)收集到的到的數(shù)據(jù)進(jìn)行zscore標(biāo)準(zhǔn)化處理:
式中:x——標(biāo)準(zhǔn)化前的數(shù)據(jù);
z——標(biāo)準(zhǔn)化后的數(shù)據(jù);
μ——樣本的均值;
σ——樣本的標(biāo)準(zhǔn)差。
數(shù)據(jù)經(jīng)過z-score標(biāo)準(zhǔn)化后平均值為0,標(biāo)準(zhǔn)差為1,數(shù)據(jù)呈標(biāo)準(zhǔn)正態(tài)分布。經(jīng)過處理后的數(shù)據(jù)可以放在一個(gè)矩陣中進(jìn)行運(yùn)算,經(jīng)過標(biāo)準(zhǔn)化處理后數(shù)據(jù)樣本有效樣本數(shù)是91 445,LSTM模型完成預(yù)測(cè)訓(xùn)練后,按照下式對(duì)預(yù)測(cè)的輸出數(shù)據(jù)進(jìn)行處理,從而得到真實(shí)的預(yù)測(cè)功率數(shù)據(jù):
深度學(xué)習(xí)中常采用均方誤差(mean squared error,MSE)作為損失函數(shù)來檢驗(yàn)和衡量模型的精確度和效果。MSE的定義如下:
式中:yt——t時(shí)刻實(shí)際發(fā)電功率值;
m——樣本數(shù)據(jù)量。
從MSE的定義中可知,MSE是預(yù)測(cè)數(shù)據(jù)和真實(shí)值誤差的平方和的均值。顯然,均方誤差值意味著模型預(yù)測(cè)值與真實(shí)值的接近程度。均方誤差值越小,模型精度越高。
LSTM模型結(jié)構(gòu)的搭建與參數(shù)的設(shè)置,對(duì)于樣本訓(xùn)練過程的優(yōu)化、訓(xùn)練時(shí)耗、預(yù)測(cè)精度起關(guān)鍵性作用。模型的搭建首先應(yīng)確定網(wǎng)絡(luò)深度,為了使訓(xùn)練最優(yōu)分別對(duì)2~6層隱含層的網(wǎng)絡(luò)進(jìn)行對(duì)比,分別迭代100次,以此確定最佳的網(wǎng)絡(luò)深度。
表2中比較了不同隱含層模型訓(xùn)練時(shí)間與訓(xùn)練后模型的損失函數(shù)值,隱含層層數(shù)少于4層時(shí),損失函數(shù)值隨隱含層數(shù)目增加而減??;隱含層層數(shù)大于4時(shí),損失函數(shù)值隨隱含層層數(shù)增大而增大,模型出現(xiàn)過擬合現(xiàn)象,訓(xùn)練時(shí)間也增多。由結(jié)果可見,當(dāng)隱含層數(shù)目為4時(shí),損失函數(shù)值最小,訓(xùn)練時(shí)間模型精度最高,誤差最小。因此本文選用隱含層為4層深度的網(wǎng)絡(luò)。本文模型分別采用350、200、100個(gè)神經(jīng)元的LSTM層和50個(gè)神經(jīng)元的普通層,并對(duì)每個(gè)層進(jìn)行DropOut層操作。DropOut層選擇一個(gè)常數(shù)0.25作為丟棄神經(jīng)元輸出的概率模型利用RMSPropS算法進(jìn)行優(yōu)化,衰減速率和學(xué)習(xí)速率分別取值為0.9和0.001。模型選取了5個(gè)氣象參數(shù)與24個(gè)歷史功率數(shù)據(jù)作為輸入的LSTM層的訓(xùn)練樣本,模型整體結(jié)構(gòu)如圖5所示。
表2 隱層數(shù)目對(duì)預(yù)測(cè)效果的影響
圖5 光伏發(fā)電功率預(yù)測(cè)模型圖
在相同的計(jì)算機(jī)上,將收集的數(shù)據(jù)中,進(jìn)行標(biāo)準(zhǔn)化處理后,選取68 583樣本數(shù)作為訓(xùn)練集,22 862作為測(cè)試集,選擇迭代次數(shù)為100次。對(duì)網(wǎng)
絡(luò)進(jìn)行仿真實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如圖6所示,模型在迭代100次后訓(xùn)練的損失函數(shù)值與測(cè)試的損失函數(shù)值分別為0.077 8和0.078 2。選取預(yù)測(cè)值與真實(shí)值的100個(gè)數(shù)據(jù)進(jìn)行對(duì)比,從圖6(b)可以明顯地看出兩者曲線較為貼合。說明改進(jìn)型的LSTM模型的預(yù)測(cè)精度較高,預(yù)測(cè)效果良好。
圖6 模型預(yù)測(cè)結(jié)果
考慮到光伏電站的氣象因素對(duì)發(fā)電功率影響,以及對(duì)預(yù)測(cè)結(jié)果的影響,本文在模型的基礎(chǔ)上剔除氣象因素的條件,僅僅依靠歷史功率數(shù)據(jù)進(jìn)行光伏發(fā)電的預(yù)測(cè),并對(duì)兩者進(jìn)行對(duì)比。
單一因素輸入的模型,訓(xùn)練集損失函數(shù)值從圖7(a)可以明顯看出比多因素輸入模型的損失函數(shù)值大。以及測(cè)試集的損失函數(shù)值波動(dòng)與最后收斂的值都比多因素輸入下的測(cè)試集損失函數(shù)大。從圖7(c)可以看出單一因素的預(yù)測(cè)結(jié)果比氣象因素下的預(yù)測(cè)結(jié)果差。
圖7 單一因素與多因素模型預(yù)測(cè)結(jié)果對(duì)比圖
本文將深度學(xué)習(xí)理論應(yīng)用于光伏發(fā)電系統(tǒng)功率預(yù)測(cè),本文通過RNN與LSTM門計(jì)算過程推導(dǎo)了LSTM一般計(jì)算過程。建立基于改進(jìn)型長(zhǎng)短期記憶(LSTM)網(wǎng)絡(luò)模型,仿真證明了模型充分考慮多氣象因素下的預(yù)測(cè)性能優(yōu)于單因素預(yù)測(cè)模型。所提模型基于Python語(yǔ)言與TensorFlow框架搭建,相比于其他語(yǔ)言搭建模型更加靈活。雖然本文所提模型能獲得良好的光伏發(fā)電預(yù)測(cè)效果,但所提模型無法滿足數(shù)據(jù)實(shí)時(shí)輸入與輸出的要求。下一步可通過優(yōu)化模型得到實(shí)時(shí)輸入輸出的光伏預(yù)測(cè)數(shù)據(jù)以及將模型嵌入到具體的APP中,使得模型具有更大的實(shí)用性與普遍性。