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