張春露,白艷萍
(中北大學(xué), 太原 030051)
當(dāng)今社會(huì),隨著人們生產(chǎn)、生活的發(fā)展,環(huán)境問題逐漸成為人們關(guān)注的焦點(diǎn)。山西省太原市是一座擁有2 500年歷史的文化古城。長久以來,山西省作為全國的煤炭大省在為國家發(fā)展做貢獻(xiàn)的同時(shí),也不可避免地造成了一定的環(huán)境影響。如今環(huán)境問題日益嚴(yán)重,特別是在冬季供暖時(shí)期,山西主要依靠的是燒煤供暖,環(huán)境問題十分嚴(yán)峻。山西省想要恢復(fù)碧水藍(lán)天,尤其是作為省會(huì)城市的太原,更加需要以新的面貌去迎接未來的挑戰(zhàn)和發(fā)展。太原市經(jīng)過多年的整治,但環(huán)境改善并沒有達(dá)到預(yù)期的效果,為了進(jìn)一步揭示和治理太原空氣質(zhì)量的污染情況,必須了解空氣變化趨勢,掌握及時(shí)、準(zhǔn)確、全面的空氣質(zhì)量信息,對空氣質(zhì)量AQI指數(shù)進(jìn)行精準(zhǔn)地預(yù)測?;诖?,本文提出了一種基于TensorFlow的 LSTM(遞歸神經(jīng)網(wǎng)絡(luò))時(shí)間序列模型來預(yù)測太原空氣質(zhì)量的AQI指數(shù)。
長短期記憶人工神經(jīng)網(wǎng)絡(luò)(long-short term memory,LSTM)是一種改進(jìn)的時(shí)間循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)。
LSTM的關(guān)鍵是單元狀態(tài)[2](cell state),它像是傳送帶一樣,將信息從上一個(gè)單元傳遞到下一個(gè)單元,與其他部分只有很少的線性相互作用。LSTM通過“門”(gate)來控制丟棄或增加信息,從而實(shí)現(xiàn)遺忘或記憶的功能?!伴T”是一種使信息選擇性通過的結(jié)構(gòu),由一個(gè)sigmoid函數(shù)和一個(gè)點(diǎn)乘操作組成。sigmoid函數(shù)的輸出值在[0,1]區(qū)間,“0”代表完全丟棄,“1”代表完全通過。1個(gè)LSTM單元有3個(gè)這樣的門,分別是遺忘門(forget gate)、輸入門(input gate)、輸出門(output gate)。
1) 遺忘門:遺忘門是以上一單元的輸出ht-1和本單元的輸入xt為輸入的sigmoid函數(shù),輸出一個(gè)0到1之間的數(shù)值ft,將其賦值給當(dāng)前的細(xì)胞的狀態(tài)CT-1,其中ft計(jì)算公式如下:
ft=σ(Wf.[ht-1,xt]+bf)
(1)
it=σ(Wi.[ht-1,xt]+bi)
(3)
3) 輸出門:該層輸出基于細(xì)胞的狀態(tài),但也是一個(gè)過濾后的版本。首先,運(yùn)行一個(gè)sigmoid層來確定細(xì)胞狀態(tài)的輸出部分;接著,將細(xì)胞狀態(tài)通過tanh進(jìn)行處理(得到介于-1到1之間的值),并將其與sigmoid門的輸出相乘,最終確定輸出部分。該層計(jì)算公式為
ht=Ot.tanh(Ct)
(5)
如圖1中所示,輸出時(shí)如果已達(dá)到閾值,就將該閥門的輸出與當(dāng)前層的計(jì)算結(jié)果相乘,并把得到的結(jié)果作為下一層的輸入(此處相乘是在指矩陣中的逐元素相乘);如果未達(dá)到閾值,則遺忘輸出結(jié)果。每一層及閥門節(jié)點(diǎn)的權(quán)重都會(huì)在每一次的模型反向傳播訓(xùn)練過程中得到更新。
圖1 LSTM流程
在2015年的9月,谷歌發(fā)布了其第2代人工智能系統(tǒng):TensorFlow,一個(gè)開源的機(jī)器學(xué)習(xí)軟件資源庫[3]。TensorFlow既支持深度學(xué)習(xí)算法[4],也實(shí)現(xiàn)了很多其他算法,例如回歸預(yù)測、聚類分析、決策樹、關(guān)聯(lián)分析等多種算法。TensorFlow的發(fā)布也讓人工智能又一次成為大眾關(guān)注的焦點(diǎn)。
在TensorFlow中提供了LSTMCell操作來支持LSTM模型的搭建,在TensorFlow的內(nèi)部封裝了LSTM的隱藏層,其中包含遺忘門、輸入門和輸出門等結(jié)構(gòu),但是一般隱含層數(shù)目需要用戶根據(jù)自己的實(shí)際情況來設(shè)定,本文設(shè)置的隱含層數(shù)目為10。
在使用TensorFlow搭LSTM建神經(jīng)網(wǎng)絡(luò)的過程中[5],不再以神經(jīng)網(wǎng)絡(luò)中的節(jié)點(diǎn)為單位進(jìn)行布局,而是以層為基礎(chǔ)來進(jìn)行考慮和搭建。在TensorFlow中,LSTMCell就好比LSTM模型里面的隱藏層,因此包含多個(gè)節(jié)點(diǎn)的輸入層和輸出層也都用向量的形式來表示,向量的長度即為該層節(jié)點(diǎn)的個(gè)數(shù)。
在搭建和訓(xùn)練模型的時(shí)候,模型里面的參數(shù)初始化是一個(gè)十分重要的過程,模型中的訓(xùn)練參數(shù)的初始標(biāo)準(zhǔn)化會(huì)對訓(xùn)練效果產(chǎn)生很大的影響。本文對訓(xùn)練集標(biāo)準(zhǔn)化的理方式為:normalized_train_data=(data_train-np.mean(data_train,axis=0))/np.std(data_train,axis=0);對測試集標(biāo)準(zhǔn)化處理為:normalized_test_data=(data_test-mean)/std,并用orthogonal_initializer方法對LSTMCell中的遺忘門、輸入門和輸出門的參數(shù)進(jìn)行初始化。本研究使用批量隨機(jī)梯度下降法進(jìn)行訓(xùn)練。
數(shù)據(jù)下載于太原空氣質(zhì)量網(wǎng),從2013年11月1日至2017年6月30日總計(jì)下載1 433條數(shù)據(jù)(某些數(shù)據(jù)存在缺失)。這里只列出前10天的數(shù)據(jù),主要格式及污染物形式如表1所示。
通過R語言編程對太原2013年11月1日至2017年6月30日的空氣質(zhì)量AQI指數(shù)進(jìn)行聚合,得到其時(shí)間序列分布折線圖如圖2所示。
通過圖2可以看出:太原空氣質(zhì)量AQI指數(shù)的分布有一定的季節(jié)性波動(dòng),大概在每年的冬季AQI指數(shù)均較高,空氣質(zhì)量較差。主要原因是冬季山西主要依靠燒煤取暖,供暖系統(tǒng)會(huì)增加顆粒物污染,并且冬季天氣干燥,不利于形成降水,降雨量少且持續(xù)時(shí)間較短,風(fēng)速和風(fēng)力較小,對空氣中污染物的沖刷效果不明顯,因此冬季的空氣質(zhì)量相對較差。
表1 太原空氣污染物總表
圖2 AQI指數(shù)時(shí)間序列分布折線
利用R語言中的相關(guān)性分析包PerformanceAnalytics,并運(yùn)行下列代碼:
Library(PerformanceAnalytics)
chart.Correlation(newdata,histogram=TRUE,pch=5)
得到空氣質(zhì)量AQI指數(shù)和空氣污染物的相關(guān)性分析結(jié)果,如圖3、4所示。
圖3、4對角線中的是變量自身分布的曲線圖;在下三角形(對角線的左下方),給出了兩個(gè)屬性相關(guān)性的散點(diǎn)圖,上三角形(對角線的右上方),數(shù)字表示兩個(gè)屬性的相關(guān)性值(數(shù)字越大兩個(gè)屬性的相關(guān)性越高),型號(hào)表示顯著程度(星星顏色越深表示越顯著)。分析圖3和圖4各種污染物與AQI指數(shù)的相關(guān)性如下:
PM10和AQI指數(shù)呈正相關(guān),且相關(guān)性較大,為0.95;
So2與AQI指數(shù)呈正相關(guān),且相關(guān)性相對居中,為0.68;
No2與AQI指數(shù)呈正相關(guān),且相關(guān)性較小,為0.36;
Co與AQI指數(shù)呈正相關(guān),且相關(guān)性相對較小,為0.45;
O3與AQI指數(shù)呈負(fù)相關(guān),其負(fù)相關(guān)程度相對較小,為-0.25。
雖然每種污染物與空氣質(zhì)量AQI指數(shù)相關(guān)性存在差異性,但是都與其有著一定的關(guān)聯(lián),因此將AQI指數(shù)排名、PM2.5、PM10、So2、No2、Co2、O3均作為模型的輸入特征,AQI指數(shù)作為測試標(biāo)簽(lable)。
圖3 質(zhì)量等級、AQI排名、PM2.5、PM10、AQI相關(guān)性分析
圖4 So2、No2、Co、O3、AQI相關(guān)性分析
根據(jù)太原空氣質(zhì)量AQI指數(shù)預(yù)測過程,反復(fù)迭代實(shí)驗(yàn),由于本文是基于TensorFolw的多特征時(shí)間序列模型[5],將通過多變量輸入特征擬合LSTM。
首先設(shè)置模型的隱含層數(shù)為10,輸入層和輸出層分別為8和1;然后取前1 400條數(shù)據(jù)為訓(xùn)練集,后36條數(shù)據(jù)為測試集,并分別對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理[6]。將每批次訓(xùn)練樣本數(shù)(batch_size)設(shè)置為40,時(shí)間步長(time_step)設(shè)置為10,學(xué)習(xí)率(lr)設(shè)置為0.000 6,然后定義神經(jīng)網(wǎng)絡(luò)變量,在輸入特征時(shí)需要將tensor轉(zhuǎn)成二維進(jìn)行計(jì)算,計(jì)算后的結(jié)果作為隱藏層的輸入,最后再將tensor轉(zhuǎn)成三維作為lstmcell的輸入[7]。
在訓(xùn)練模型時(shí)迭代次數(shù)可以改變,次數(shù)越大效果越精確,但需要的時(shí)間也越長[8]。本文的迭代次數(shù)設(shè)置為900,最終得到的平均偏差為2.031,均方誤差為5.625,得到的預(yù)測值(紅色線)與真實(shí)值(藍(lán)色線)的對比如圖5所示。
圖5 太原空氣質(zhì)量AQI指數(shù)預(yù)測值與真實(shí)值對比
得到如表2的太原空氣質(zhì)量AQI指數(shù)在LSTM模型[9]下迭代900次的誤差分析。
表2 太原空氣質(zhì)量AQI指數(shù)誤差分析結(jié)果
從圖5(太原空氣質(zhì)量AQI指數(shù)預(yù)測值與真實(shí)值對比)和表2 (太原空氣質(zhì)量AQI指數(shù)誤差分析結(jié)果)可以看出:利用LSTM模型預(yù)測太原的空氣質(zhì)量AQI指數(shù)可以得到較精確的結(jié)果。
本文通過R語言中的相關(guān)分析包PerformanceAnalytics得出與太原空氣質(zhì)量AQI指數(shù)相關(guān)聯(lián)的影響因素,并將其作為模型的輸入特征,然后利用LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)對AQI指數(shù)進(jìn)行預(yù)測。由于以往適合多輸入變量的神經(jīng)網(wǎng)絡(luò)模型[10]一直存在著缺陷和不足,大多數(shù)古典的線性方法難以適應(yīng)多變量或多輸入的預(yù)測問題,而基于LSTM的循環(huán)神經(jīng)網(wǎng)絡(luò)卻幾乎能完美解決這個(gè)困擾已久的多輸入時(shí)間變量問題。
通過本文實(shí)證表明:基于TensorFlow的LSTM時(shí)間序列模型預(yù)測太原的空氣質(zhì)量AQI指數(shù)具有精度高、預(yù)測時(shí)間范圍長、自適應(yīng)高等優(yōu)點(diǎn),并且能夠充分逼近非線性映射。該方法具有通用性,能夠適用于其他多變量輸入的時(shí)間序列預(yù)測問題[11],在生產(chǎn)和生活中有著廣泛的應(yīng)用。
不足之處:由于本研究數(shù)據(jù)量有限,且對空氣質(zhì)量AQI指數(shù)的影響除了大氣污染物還與氣候條件、工作日與休息日車流量、工廠聚集地等多種因素有關(guān),因此要得到更精確的預(yù)測效果還需要加入這些影響因子,這也是未來本研究需要努力的方向。