趙 剛,王夢靈
(華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
隨著智能感知技術(shù)的不斷發(fā)展,城市道路的交通運(yùn)行狀態(tài)能夠獲得較為完備的監(jiān)測和提取。利用綜合交通大數(shù)據(jù),對交通流狀態(tài)進(jìn)行預(yù)測一方面可以表征城市交通運(yùn)行能力,另一方面可以指導(dǎo)交通管理者采取合適的管控措施[1]。由于,交通流具有時空異質(zhì)性、非線性,路網(wǎng)場景復(fù)雜和輸入輸出耦合性強(qiáng)等特點(diǎn),使得建立精度高的交通流預(yù)測模型十分困難[2]??傃灾?,不管是基于線性的還是基于非線性的交通流預(yù)測方法,大部分都是基于歷史數(shù)據(jù)訓(xùn)練模型,然后利用訓(xùn)練好的模型預(yù)測輸出。然而,任一模型在特定場景下都存在一定的誤差,誤差的原因和誤差的分布情況很少有研究進(jìn)行深入討論??紤]到交通流數(shù)據(jù)存在周期性[3],歷史預(yù)測誤差和未來時刻的預(yù)測誤差存在較為相似的分布性的可能。因此,本文提出了基于模糊分析的LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測模型策略,一方面利用LSTM神經(jīng)網(wǎng)絡(luò)的高精度非線性過程表征,另一方面對歷史訓(xùn)練模型的誤差分布進(jìn)行統(tǒng)計分析,挖掘誤差大小、正負(fù)的規(guī)律,然后在預(yù)測過程中,對誤差進(jìn)行滾動學(xué)習(xí),預(yù)測輸出包含LSTM神經(jīng)網(wǎng)絡(luò)模型的輸出和誤差預(yù)測輸出,通過誤差分析對預(yù)測結(jié)果進(jìn)行補(bǔ)償,進(jìn)一步提高預(yù)測精度。
最為常用的交通流預(yù)測的模型是差分整合移動平均自回歸模型(ARIMA)和周期性差分整合移動平均自回歸模型(SARIMA),例如,Luo等利用改進(jìn)的SARIMA模型與自回歸模型(autoregressive,AR)模型相結(jié)合,并利用遺傳算法(genetic algorithm, GA)來分析各個相鄰地點(diǎn)之間的相似性,最后得到了比較理想的預(yù)測效果[4]。周宏等把ARIMA和SARIMA模型相結(jié)合,利用最優(yōu)化方法求解組合模型參數(shù)來預(yù)測高速路交通流狀態(tài),提高了預(yù)測的精度[5]。熊亭等[6]提出了一種基于SARIMA和隨機(jī)森林(random forest,RF)的短時交通流預(yù)測方法,分別利用SARIMA的線性預(yù)測能力來擬合交通流的周期性,以及RF的非線性擬合能力來挖掘交通流的時空特性,結(jié)果表明該組合預(yù)測精度模型優(yōu)于單一預(yù)測模型。
雖然基于ARIMA模型的線性建模方法模型結(jié)構(gòu)簡單且具有一定的精度,但對于非線性強(qiáng)度較高的路網(wǎng)場景的預(yù)測精度仍然有一定的局限[7]。近年來,隨著支持向量回歸(SVR),神經(jīng)網(wǎng)絡(luò)(ANN)等深度學(xué)習(xí)算法的興起,越來越多的學(xué)者提出用基于人工智能策略的建模方法來預(yù)測交通流狀態(tài)[8]。王亞朝等利用改進(jìn)的BP(back propagation)神經(jīng)網(wǎng)絡(luò)對北京市某路口的速度做了短時預(yù)測,結(jié)果表明即使在某些時刻速度缺失的情況下,模型預(yù)測結(jié)果也能具有較高的準(zhǔn)確性[9]。羅文慧等提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)和支持向量機(jī)(SVR)的組合模型,用CNN網(wǎng)絡(luò)充分提取交通流數(shù)據(jù)的時空特征,再利用SVR做預(yù)測,使得預(yù)測精度大為提升[10]。羅向龍等[11]考慮了交通流的時空相關(guān)性,提出了基于K近鄰算法(K-nearest neighbour,KNN)的LSTM交通流預(yù)測模型,首先利用KNN來找出城市路網(wǎng)中與待預(yù)測路段存在時空相關(guān)性的站點(diǎn),以此作為模型的輸入數(shù)據(jù),不僅挖掘出時空相關(guān)性,也提升了模型預(yù)測精度。Tian等將長短期記憶(long short-term memory)神經(jīng)網(wǎng)絡(luò)用于交通流預(yù)測,表明LSTM神經(jīng)網(wǎng)絡(luò)比大多數(shù)非參數(shù)模型具有更好的性能[12]。因此,本文選擇用LSTM神經(jīng)網(wǎng)絡(luò)作為交通流時序預(yù)測模型,綜合歷史交通流預(yù)測誤差,利用模糊聚類分析歷史數(shù)據(jù)與當(dāng)前數(shù)據(jù)的相似度,來預(yù)估誤差,進(jìn)而提高模型精度。
交通流從本質(zhì)上說是有一定的數(shù)學(xué)規(guī)律的[13],也即是交通流數(shù)據(jù)并不完全是隨機(jī)的,因此可以用數(shù)據(jù)驅(qū)動的方法學(xué)習(xí)交通流的特征挖掘其潛在的模式,建立預(yù)測模型,進(jìn)而對未來時刻交通流進(jìn)行預(yù)測。路網(wǎng)交通流不僅與時間有關(guān),還有很強(qiáng)的空間相關(guān)性,比如上下游之間,十字路口之間的車流量有較強(qiáng)的關(guān)聯(lián)。考慮路網(wǎng)所采集的車流量數(shù)據(jù)矩陣為xi,j
(1)
其中,i=1,2,…,k,j=1,2,…,T。i表示車流采集點(diǎn)或路段編號,一共k個路段。j表示時間,采樣時長為T。Xi表示在路段i所采集的連續(xù)T個交通流量組成的行向量。通常情況下,許多研究者都是利用某一個路段或某一個采樣點(diǎn)所采集的一維交通流時序數(shù)據(jù)來做預(yù)測,也即是用該路段前幾個時刻的交通流量值預(yù)測下一段時間間隔的流量值。然而,相鄰的幾個路口在時間和空間上都具有相關(guān)性。這種只考慮交通流在時間上的相關(guān)性而忽略了交通流空間上的相關(guān)性的做法會導(dǎo)致預(yù)測模型不能充分挖掘交通流潛在的流動力學(xué)模型。因此,本文考慮用如下的歷史交通流數(shù)據(jù)作為模型的輸入和輸出
X=xi-1,j-1,xi,j
(2)
y=xi+1,j+1
(3)
即選取同一條路的上游兩個相鄰地點(diǎn)i-1,i分別在j-1,j時刻的車流量X作為預(yù)測模型輸入,下游地點(diǎn)i+1在j+1時刻的車流量y作為預(yù)測模型輸出。這樣便綜合了交通流的時空信息,以便建立更準(zhǔn)確的預(yù)測模型。
利用歷史交通流數(shù)據(jù)輸入到訓(xùn)練好的LSTM神經(jīng)網(wǎng)絡(luò),可得到預(yù)測誤差向量
ΔE1={e1,e2,…,eT}
(4)
(5)
基于模糊分析LSTM的路口交通流預(yù)測模型原理如圖1所示,該方法分為兩步:①離線誤差分析和在線誤差估計:離線誤差分析模型是通過GK模糊聚類分類方法實(shí)現(xiàn)的,對歷史數(shù)據(jù)的誤差以及輸入數(shù)據(jù)同時進(jìn)行聚類,在根據(jù)LSTM模型當(dāng)前輸入數(shù)據(jù)與歷史輸入數(shù)據(jù)的相似度,對當(dāng)前輸入進(jìn)行分類,進(jìn)而估計出當(dāng)前數(shù)據(jù)預(yù)測值誤差的范圍;②預(yù)測模型輸出:根據(jù)第一步所估計的在線誤差值進(jìn)行加權(quán),綜合LSTM預(yù)測模型的預(yù)測值即為最終的交通流預(yù)測值。
圖1 基于誤差補(bǔ)償?shù)腖STM路口流量預(yù)測原理
本節(jié)給出了基于誤差補(bǔ)償?shù)腖STM路口交通流量預(yù)測方法的具體實(shí)現(xiàn)步驟。一方面充分利用神經(jīng)網(wǎng)絡(luò)能夠挖掘交通流時序數(shù)據(jù)的非線性特征,另一方面對模型的誤差分布進(jìn)行滾動學(xué)習(xí),在神經(jīng)網(wǎng)絡(luò)模型預(yù)測輸出上疊加誤差估計值。
LSTM網(wǎng)絡(luò)是在遞歸神經(jīng)網(wǎng)絡(luò)(RNN)的拓?fù)浣Y(jié)構(gòu)上進(jìn)行改進(jìn)得來的,其隱層各單元節(jié)點(diǎn)之間存在權(quán)連接[14]。圖2是一個RNN的結(jié)構(gòu)圖,其中x是輸入向量節(jié)點(diǎn),h是隱層向量節(jié)點(diǎn),o是輸出向量節(jié)點(diǎn),L是損失函數(shù),U,V,W分別是輸入到隱層的權(quán)值,隱層到輸出的權(quán)值,隱層到隱層的權(quán)值。
圖2 RNN網(wǎng)絡(luò)結(jié)構(gòu)原理
可以看出,隨著時間變化,前一時刻的隱層輸出通過權(quán)矩陣W作用給后一時刻的隱層輸入了。這樣RNN便擁有了記憶的能力,可以把輸入與上個時刻的狀態(tài)聯(lián)系起來,因而RNN能夠運(yùn)用到時序預(yù)測問題中。
但RNN使用過程中容易出現(xiàn)所謂的梯度消失問題,這樣在某一時刻后,權(quán)值不再更新,因此無法對長時間序列數(shù)據(jù)進(jìn)行處理[15]。一個經(jīng)典的解決方法是,在 RNN的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)基礎(chǔ)上增加了一些記憶單元,進(jìn)而得到了LSTM,從而使時間序列上的記憶信息可控,所以RNN網(wǎng)絡(luò)具備了長期記憶功能,而且LSTM可以避免常規(guī)RNN的梯度消失。圖3是LSTM的網(wǎng)絡(luò)結(jié)構(gòu)圖,LSTM的典型結(jié)構(gòu)除了隱層以外和普通神經(jīng)網(wǎng)絡(luò)大致是相同的,隱層是由重復(fù)的稱之為記憶塊組成的,每個塊由記憶單元組成。記憶單元包含3個具有開關(guān)作用的門結(jié)構(gòu),分別為輸入門、遺忘門、輸出門,分別決定當(dāng)前時刻有多少神經(jīng)網(wǎng)絡(luò)的輸入xt傳遞到單元狀態(tài)ct里、上一時刻的單元狀態(tài)ct-1有多少會傳遞給ct、單元狀態(tài)ct-1有多少到當(dāng)前網(wǎng)絡(luò)的輸出值ht里去[16]。
圖3 LSTM網(wǎng)絡(luò)結(jié)構(gòu)原理
遺忘門、輸入門、輸出們的計算公式分別為[17]
ft=σ(Wf·[ht-1,xt]+bf)
(6)
it=σ(Wi·[ht-1,xt]+bi)
(7)
ot=σ(Wo·[ht-1,xt]+bo)
(8)
其中,bf、bi、bo為遺忘門、輸入門、輸出門的偏置,Wf、Wi、Wo分別是是遺忘門、輸入門、輸出門的權(quán)矩陣,σ是sigmoid型激活函數(shù)。
(9)
(10)
其中,tanh為激活函數(shù),Wc、bc分別是單元狀態(tài)的權(quán)矩陣和偏置。
當(dāng)前網(wǎng)絡(luò)的輸出值ht由如下公式計算
ht=ot°tanh(ct)
(11)
LSTM神經(jīng)網(wǎng)絡(luò)的具體結(jié)構(gòu)輸出由具體的輸入輸出決定,本文中輸入為X=xi-1,T-1,xi,T,輸出為y=xi+1,T+1,因此LSTM網(wǎng)絡(luò)輸出為圖2中向量的最后一個元素,也就是
yt+1=tanh(Vht+1+b)
(12)
其中,V為輸出層權(quán)值矩陣,輸出層的激活函數(shù)也是tanh,b為輸出層的偏置項(xiàng)。
LSTM是用基于時間的反向傳播算法來進(jìn)行訓(xùn)練的。首先根據(jù)式(6)~式(12)計算每個記憶單元的輸出,然后根據(jù)真值計算誤差,通過誤差反向傳播來更新梯度,最后再根據(jù)式(6)~式(12)式進(jìn)行前向計算,反復(fù)迭代,直到誤差小于設(shè)定的閾值才結(jié)束訓(xùn)練過程。
通過上一節(jié)給出的LSTM神經(jīng)網(wǎng)絡(luò)用歷史數(shù)據(jù)進(jìn)行訓(xùn)練,得到神經(jīng)網(wǎng)絡(luò)的參數(shù)。本小節(jié)基于訓(xùn)練模型的誤差進(jìn)行分析,并給出了誤差在線預(yù)測的方法。具體包括:對訓(xùn)練模型的誤差進(jìn)行模糊聚類分析,統(tǒng)計分析出誤差大小、正負(fù)的分布規(guī)律;然后分析當(dāng)前輸入與歷史輸入數(shù)據(jù)的相似度,結(jié)合歷史誤差聚類結(jié)果,進(jìn)而預(yù)估對當(dāng)前數(shù)據(jù)的誤差;最終的預(yù)測結(jié)果綜合LSTM預(yù)測輸出和誤差預(yù)測值。本文考慮3個相鄰的路口所采集的交通流數(shù)據(jù)xi-1,T-1,xi,T作為預(yù)測模型輸入,xi+1,T+1作為預(yù)測模型輸出。
(1)歷史誤差的模糊聚類:歷史交通流數(shù)據(jù)通過LSTM模型所得到的預(yù)測誤差ΔE1=[e1,e2,…,eT],將預(yù)測誤差和對應(yīng)輸入x=[xi-1,j-1,xi,j]組成新的數(shù)據(jù)集dj=[xi-1,j-1,xi,j,ej],j=1,…,T。利用GK模糊聚類方法對數(shù)據(jù)集dj聚類,得到聚類k個簇,k個聚類中心向量分別為c1,c2,…,ck,類別標(biāo)簽label1(i)。模糊聚類算法步驟如下
(13)
式中:μi,j∈(0,1),表示第j個數(shù)據(jù)對第i個類的隸屬度。對聚類后的每個類的第3個維度的誤差值求均值,記為avgi,表示歷史誤差的范圍
(14)
式中:s=1,…,T,i=1,…,k。
(15)
(16)
式中:sign表示符號函數(shù),random(0,1)為取值在0至1之間的隨機(jī)數(shù)函數(shù)。
基于模糊分析的LSTM交通流預(yù)測算法步驟如下:
Algorithm:模糊分析的LSTM交通流預(yù)測算法
算法輸入:歷史交通流數(shù)據(jù)D1=[xi-1,j-1,xi,j,xi+1,j+1],數(shù)據(jù)長度為T。待預(yù)測點(diǎn)的當(dāng)前交通流序列輸入數(shù)據(jù)D2=[xi-1,l-1,xi,l],數(shù)據(jù)長度為Nl。
算法輸出:待預(yù)測點(diǎn)的車流預(yù)測結(jié)果
步驟1 利用歷史交通流數(shù)據(jù)D1訓(xùn)練LSTM神經(jīng)網(wǎng)絡(luò),使網(wǎng)絡(luò)權(quán)值確定下來。
步驟2 對歷史交通流數(shù)據(jù)進(jìn)行訓(xùn)練得到歷史誤差ΔE1=[e1,e2,…,eT],利用式(13)迭代計算出k個聚類中心向量分別為c1,c2,…,ck,類別標(biāo)簽記為label1(i),同時根據(jù)式(14)計算歷史誤差均值avgi。
步驟3 根據(jù)式(15)對待預(yù)測點(diǎn)的輸入數(shù)據(jù)D2計算相似度,并進(jìn)行分類,類別標(biāo)簽記為label2(i)。
(17)
步驟6 隨著輸入數(shù)據(jù)不斷增多,為新數(shù)據(jù)進(jìn)行分類,如果新數(shù)據(jù)距離各個類別超過一定閾值,則重新對歷史預(yù)測誤差聚類,利用式(13)更新聚類中心。
為了驗(yàn)證本文提出方法的有效性,我們采用某市區(qū)相鄰的3個十字路口實(shí)測數(shù)據(jù)來測試該方法。實(shí)驗(yàn)數(shù)據(jù)是每周一至周五下午3∶50-7∶10分每隔15分鐘采樣一次,數(shù)據(jù)長度為1098。每條數(shù)據(jù)記錄包括t-1時刻路口1,t時刻路口2的車流量,以及t+1時刻路口3的車流量。t-1時刻路口1,t時刻路口2的車流量作為LSTM網(wǎng)絡(luò)輸入,t+1時刻路口3的車流量作為LSTM網(wǎng)絡(luò)輸出。前432條數(shù)據(jù)作為訓(xùn)練集,后666條數(shù)據(jù)為測試集,其中測試集前432條預(yù)測結(jié)果作為歷史預(yù)測誤差向量,并和對應(yīng)的輸入構(gòu)成新的數(shù)據(jù)集,用來作為GK模糊聚類的輸入,剩余234條數(shù)據(jù)用來驗(yàn)證誤差補(bǔ)償方法。圖4展示了路口3采集的部分車流數(shù)據(jù)圖,可以看到其具有非常明顯的周期性。
圖4 路口3車流數(shù)據(jù)時序
本文利用基于TensorFlow和Theano的深度學(xué)習(xí)Keras搭建LSTM神經(jīng)網(wǎng)絡(luò),其結(jié)構(gòu)有3層,組成如下:輸入層包含兩個神經(jīng)元,輸出層包含3個神經(jīng)元,經(jīng)過試錯方法隱層神經(jīng)元選為50個??紤]到數(shù)據(jù)樣本不大,采取在線學(xué)習(xí)方法更新權(quán)值,epoch為200次,batch大小為4,輸入步長為1。梯度下降采用Adam優(yōu)化算法。這里所采用的激活函數(shù)是tanh,所有輸入輸出數(shù)據(jù)一起正則化,采用如下正則化公式
(18)
同時,對于由缺失采樣的數(shù)據(jù),利用不同天數(shù)的同一時刻平均的車流量值替代。為評價預(yù)測結(jié)果,預(yù)測指標(biāo)采用的是均方根誤差(RMSE)和平均絕對誤差(MAE)
(19)
(20)
圖5展示了歷史交通流預(yù)測誤差以及輸入數(shù)據(jù)聚類圖,數(shù)據(jù)一共被聚成5個類,可見每個簇之間的界限較為明顯,橫縱坐標(biāo)分別表示兩個輸入,豎坐標(biāo)表示對應(yīng)的預(yù)測誤差。如圖6所示,圖中給出了帶有誤差補(bǔ)償和不帶誤差補(bǔ)償?shù)腖STM預(yù)測結(jié)果,右三角代表有誤差補(bǔ)償?shù)腖STM預(yù)測結(jié)果,圓圈表示不帶誤差補(bǔ)償?shù)腖STM預(yù)測結(jié)果,上三角代表路口3車流量真實(shí)值,橫軸數(shù)據(jù)長度為234,每個長度間隔時間為15 min。從整體效果上看,顯然基于誤差補(bǔ)償?shù)腖STM預(yù)測值要比不帶誤差補(bǔ)償?shù)慕Y(jié)果要好,經(jīng)過補(bǔ)償后結(jié)果更加接近真實(shí)值。
圖5 歷史交通流輸入序列及預(yù)測誤差的模糊聚類
圖6 LSTM神經(jīng)網(wǎng)絡(luò)車流量預(yù)測結(jié)果
為了更進(jìn)一步驗(yàn)證所提出的誤差補(bǔ)償方法的有效性,本小節(jié)利用普通BP神經(jīng)網(wǎng)絡(luò)作為預(yù)測模型,進(jìn)行對比實(shí)驗(yàn)。普通BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和前面的LSTM神經(jīng)網(wǎng)絡(luò)的層數(shù)以及神經(jīng)元個數(shù)相同,epoch為200次,batch大小為4,輸入步長為1,前期數(shù)據(jù)預(yù)處理已經(jīng)對輸入歸一化。圖7展示了帶有誤差補(bǔ)償和不帶誤差補(bǔ)償?shù)腂P神經(jīng)網(wǎng)絡(luò)車流量預(yù)測結(jié)果。同樣可以看出,經(jīng)過誤差補(bǔ)償后的BP網(wǎng)絡(luò)預(yù)測效果比BP網(wǎng)絡(luò)預(yù)測效果更好。
圖7 BP神經(jīng)網(wǎng)絡(luò)車流量預(yù)測結(jié)果
表1給出了帶有誤差補(bǔ)償和不帶誤差補(bǔ)償?shù)腖STM神經(jīng)網(wǎng)絡(luò)和BP神經(jīng)網(wǎng)絡(luò)交通流預(yù)測結(jié)果RMSE和MAE的對比。表1中第二行和第四行分別表示不帶誤差補(bǔ)償?shù)腖STM網(wǎng)絡(luò)預(yù)測和BP網(wǎng)絡(luò)預(yù)測指標(biāo)值。從表1中給出的預(yù)測指標(biāo)上看,經(jīng)過誤差補(bǔ)償后的RMSE和MAE均明顯降低,同時可以看到,LSTM神經(jīng)網(wǎng)絡(luò)比BP神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果更準(zhǔn)確。
表1 預(yù)測指標(biāo)對比
本文提出了基于模糊分析的LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測方法對路口交通流進(jìn)行預(yù)測。首先,在選擇輸入輸出數(shù)據(jù)上充分考慮了交通流的空間相關(guān)性,避免了單點(diǎn)交通流數(shù)據(jù)建模的弊端。針對交通流數(shù)據(jù)具有周期性,利用LSTM神經(jīng)網(wǎng)絡(luò)對非線性過程高精度表征的優(yōu)點(diǎn),提出了利用滾動學(xué)習(xí)的聚類以及相似度分析的方法挖掘訓(xùn)練模型的誤差分布規(guī)律,在預(yù)測過程中不僅包含模型的預(yù)測輸出還疊加了誤差預(yù)測輸出,提高了整體的預(yù)測精度。進(jìn)一步,通過對比BP神經(jīng)網(wǎng)絡(luò),實(shí)驗(yàn)結(jié)果表明,基于模糊分析的LSTM交通流預(yù)測的預(yù)測精度更好。