劉 偉,張曉蕾,孫士保,趙鵬程
(1. 河南科技大學(xué)信息工程學(xué)院,河南 洛陽 471023;2. 北京信息職業(yè)技術(shù)學(xué)院軟件工程系,北京 100018)
交通事件管理是智能交通系統(tǒng)(ITS)的一個研究熱點,由于城市街道的不斷增多和繁忙時段交通需求日益增大,一旦發(fā)生交通事件,如果不能及時處理就容易造成交通擁堵,交通事件管理面臨著巨大挑戰(zhàn)。
針對交通事件不確定性較強(qiáng)和規(guī)律性較弱等特點,國內(nèi)外研究學(xué)者提出兩類預(yù)測模型:一類屬于數(shù)學(xué)模型的方法,Luis Leon ojeda等人[1]提出的基于自適應(yīng)卡爾曼濾波的多跳預(yù)測方法。成云等人[2]提出的基于差分自回歸滑動平均和小波神經(jīng)網(wǎng)絡(luò)組合模型的預(yù)測方法。柳立春[3]提出的改進(jìn)卡爾曼算法。雖然數(shù)學(xué)模型方法預(yù)測精度高、穩(wěn)定性較好,但方法在構(gòu)建和求解交通模型過程中難度較大,不適合于短時交通事件預(yù)測的要求。另一類是基于非數(shù)學(xué)模型的方法,Bingduo Yang[4]提出一種針對本地當(dāng)日交通流估計和變量選擇的回歸方法,采用平滑絕對差分算法同時完成選擇變量和估計回歸系數(shù),該算法在標(biāo)準(zhǔn)數(shù)據(jù)集中測試獲得較好性能。Ricardo等[5]提出一種交通模式的動態(tài)分類方法,分為離線和在線兩個階段,實現(xiàn)了對日常交通模式的有效識別。邵俊倩[6]提出了基于小波模糊神經(jīng)網(wǎng)絡(luò)的交通流預(yù)測方法,通過分析神經(jīng)網(wǎng)絡(luò)、模糊邏輯和小波基函數(shù)的特點,得到了收斂性預(yù)測精度明顯優(yōu)于常規(guī)BP網(wǎng)絡(luò)的模型。吳琛,程琳[7]構(gòu)建了適合于交通事件檢測的BP小波神經(jīng)網(wǎng)絡(luò)算法,與其它事件檢測算法相比適合實時檢測,具有平均檢測時間短的優(yōu)點。非數(shù)學(xué)模型預(yù)測方法相對來說實現(xiàn)要更簡便,只要向模型里面輸入足夠的歷史數(shù)據(jù),不需要去構(gòu)建龐大冗余的預(yù)測模型,最終得到的結(jié)果也可以滿足在智能交通系統(tǒng)中的需要。
上述方法大多在離線或是平穩(wěn)時間序列情況下的效果比較好,但實時交通事件數(shù)據(jù)因本身設(shè)備限制或外部因素干擾的不確定性,交通時序數(shù)據(jù)預(yù)測會出現(xiàn)預(yù)測結(jié)果精度不理想,模型曲線過擬合等問題。針對交通流數(shù)據(jù)預(yù)測中的問題,綜合參數(shù)模型、非參數(shù)模型優(yōu)缺點,在本文采用循環(huán)神經(jīng)網(wǎng)絡(luò)模型配合隨機(jī)失活方法,處理交通事件序列數(shù)據(jù)并去除數(shù)據(jù)模型的過擬合,得到一個穩(wěn)定的改進(jìn)預(yù)測模型。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)是一類以序列數(shù)據(jù)為輸入,在序列的演進(jìn)方向進(jìn)行遞歸且所有節(jié)點(循環(huán)單元)按鏈?zhǔn)竭B接形成閉合回路的遞歸神經(jīng)網(wǎng)絡(luò),可用于交通流量預(yù)測等各個方面[8-9]。RNN模型有很多,這里介紹最主流的RNN模型結(jié)構(gòu)如圖1所示。
圖1 RNN模型結(jié)構(gòu)圖
1)x(t)代表在序列索引號t時訓(xùn)練樣本的輸入
2)h(t)代表在序列索引號t時模型的隱藏狀態(tài),由x(t)和h(t-1)共同決定
3)o(t)代表在序列索引號t時模型的輸出,只由模型當(dāng)前隱藏狀態(tài)h(t)決定
4)L(t)代表在序列索引號t時模型的損失函數(shù)
5)y(t)代表在序列索引號t時訓(xùn)練樣本序列的真實輸出
6)U,W,V這三個矩陣是模型的線性關(guān)系參數(shù),它在整個RNN網(wǎng)絡(luò)中是共享的,體現(xiàn)了RNN的模型的“循環(huán)反饋”的思想
7) 對于任意一個序列索引號t,隱藏狀態(tài)h(t)由x(t)和h(t-1)得到
h(t)=σ(z(t))=σ(Ux(t)+Wh(t-1)+b)
(1)
其中σ為RNN的激活函數(shù),b為線性關(guān)系的偏倚。序列索引號t時模型的輸出o(t)的表達(dá)式比較簡單
o(t)=Vh(t)+c
(2)
在最終在序列索引號t時預(yù)測輸出為
(3)
交通事件特點是具有隨機(jī)性,而隨機(jī)失活方法處理這類事件的優(yōu)點在于可以將復(fù)雜的外界輸入簡單化,降低它們之間的相關(guān)性、隨機(jī)性。這種特性使得隨機(jī)失活方法正好適合處理交通事件。
隨機(jī)失活(dropout)是對具有深度結(jié)構(gòu)的人工神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化的方法,在學(xué)習(xí)過程中通過將隱含層的部分權(quán)重或輸出隨機(jī)歸零,降低節(jié)點間的相互依賴性(co-dependence)從而實現(xiàn)神經(jīng)網(wǎng)絡(luò)的正則化(regularization),降低其結(jié)構(gòu)風(fēng)險。
訓(xùn)練階段神經(jīng)網(wǎng)絡(luò)會隨機(jī)按概率p將部分隱含層節(jié)點的權(quán)重歸零(如圖2(b)),由于每次迭代受歸零影響的節(jié)點不同,因此各節(jié)點的“重要性”會被平衡。引入隨機(jī)失活后,神經(jīng)網(wǎng)絡(luò)的每個節(jié)點都會貢獻(xiàn)內(nèi)容,不會出現(xiàn)少數(shù)高權(quán)重節(jié)點完全控制輸出結(jié)果的情況,因此降低了網(wǎng)絡(luò)的結(jié)構(gòu)風(fēng)險,以緩解神經(jīng)元之間隱形的協(xié)同適應(yīng),從而達(dá)到降低模型復(fù)雜度的目的。
圖2 隨機(jī)失活方法
從數(shù)學(xué)上來說,神經(jīng)網(wǎng)絡(luò)層訓(xùn)練過程中使用的標(biāo)準(zhǔn) Dropout 的行為可以被寫作
y=f(Wx)·m
(4)
其中f(Wx)為激活函數(shù),x是該層的輸入,W是該層的權(quán)值矩陣,y為該層的輸出,而m則為該層的 Dropout 掩膜(mask),mask 中每個元素為 1 的概率為p。在測試階段,該層的輸出可以被寫作
y=pf(Wx)
(5)
結(jié)合隨機(jī)失活方法及主要代碼如下所示。
Input: 樣本數(shù)據(jù)并歸一化
DropoutFraction的值
Output:預(yù)測和擬合值
BEGIN
Step1:load mnist_uint8;
train_x=double(train_x(1:2000,:)) / 255;
test_x =double(test_x(1:1000,:))/ 255;
train_y=double(train_y(1:2000,:));
test_y =double(test_y(1:1000,:));
Step2:初步構(gòu)造了一個輸入-隱含-輸出層網(wǎng)絡(luò)
權(quán)值初始化
Step3:設(shè)置學(xué)習(xí)率,momentum,激發(fā)函數(shù)類型,懲罰系數(shù)
Step4:每一次樣本數(shù)據(jù)輸入訓(xùn)練時,隨機(jī)扔掉50%的隱含層節(jié)點
nn=nnsetup([861 100 10]);
nn.dropoutFraction=0.5;
opts.numepochs=20;
opts.batchsize=100;
[nn, L]=nntrain(nn, train_x, train_y, opts);
[er, bad]=nntest(nn, test_x, test_y);
END
本文將使用循環(huán)神經(jīng)網(wǎng)絡(luò)模型方法對輸入的交通事件數(shù)據(jù)進(jìn)行訓(xùn)練,并將訓(xùn)練出來的模型使用隨機(jī)失活方法去除數(shù)據(jù)的過擬合,構(gòu)建基于改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)的交通流擁堵事件預(yù)測模型。其預(yù)測流程如圖3所示。
圖3 基于RNN的改進(jìn)交通流擁堵事件預(yù)測流程圖
其中具體方法步驟如下:
1) 通過政府開放數(shù)據(jù)渠道,獲取達(dá)拉斯區(qū)域2018年十一月整月的交通事件開放數(shù)據(jù),原始數(shù)據(jù)的每條事件信息都包含了提交時刻路段的經(jīng)緯度以及時間,把整個數(shù)據(jù)集里面的事件類型都變成事件編號,將問題轉(zhuǎn)換成利用事件序列進(jìn)行分類預(yù)測,對采集到的原始數(shù)據(jù)進(jìn)行修復(fù)和歸一化預(yù)處理。
2) 把交通堵塞事件數(shù)據(jù)中最嚴(yán)重的“大型交通擁堵”(large traffic jam)和“超大型交通擁堵”(huge traffic jam)合并成一個嚴(yán)重交通擁堵事件集合,對于每一個嚴(yán)重?fù)矶率录?,追溯到?0分鐘,把之前同一條道路上發(fā)生的事件,按照順序存成一個列表。對沒有任何其它事件先兆的空列表進(jìn)行了清除。同樣,從剩余事件集合中,隨機(jī)找出了相同數(shù)量的非空有效序列,這些序列的后續(xù)緊隨事件都不是嚴(yán)重?fù)矶?。對?yán)重?fù)矶碌闹?0分鐘的事件序列標(biāo)記為1;對于非嚴(yán)重?fù)矶轮?0分鐘的事件序列標(biāo)記為0。打亂數(shù)據(jù)集中數(shù)據(jù)的順序,但是保持序列和對應(yīng)標(biāo)記之間一致性。
3) 劃分訓(xùn)練集和測試集。取其中80%的數(shù)據(jù)作為訓(xùn)練集數(shù)據(jù),另外20%的數(shù)據(jù)作為驗證集數(shù)據(jù)。利用事件類型數(shù)量和事件向量長度,構(gòu)造一個初始嵌入矩陣,搭建循環(huán)神經(jīng)網(wǎng)絡(luò)模型,開始訓(xùn)練時,把剛才隨機(jī)生成的初始嵌入矩陣挪進(jìn)來,并且不改變嵌入層的參數(shù)。最后,開始訓(xùn)練搭建好的模型,并把模型的運行結(jié)果保存起來。
4) 訓(xùn)練好循環(huán)神經(jīng)網(wǎng)絡(luò)模型后,準(zhǔn)確率曲線沒有劇烈波動且后半程穩(wěn)定在80%以上,但是損失值曲線發(fā)生了分叉。這是典型的過擬合。這是因為相對于復(fù)雜的模型,訓(xùn)練數(shù)據(jù)不夠用。解決方法是增加訓(xùn)練數(shù)據(jù),或者降低模型復(fù)雜度。立即增加數(shù)據(jù)不太現(xiàn)實,但是降低模型復(fù)雜度,可以利用在LSTM層上加入隨機(jī)失活的方法調(diào)參來去除過擬合。
5) 將最終訓(xùn)練模型結(jié)果與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型對比分析得出結(jié)論。
為了驗證本文方法的有效性,設(shè)計實驗進(jìn)行驗證。
用于論文研究的數(shù)據(jù),是達(dá)拉斯政府的2018年整個十一月的Waze交通事件的開放數(shù)據(jù)。通過使用本文改進(jìn)的循環(huán)神經(jīng)網(wǎng)絡(luò)來構(gòu)建序列數(shù)據(jù)分類模型,利用序列模型找到規(guī)律進(jìn)行分類預(yù)測。
現(xiàn)在普遍使用的模型評價指標(biāo)是平均絕對誤差(MAE),均方根誤差(RMSE)和平均絕對百分誤差(MAPE)。如下,式(6)為 MAE 的計算公式,式(7)為 RMSE的計算公式,式(8)為 MAPE 的計算公式。
(6)
(7)
(8)
在Python中導(dǎo)入交通流事件數(shù)據(jù),把交通堵塞事件數(shù)據(jù)中,對交通影響最大的“大型交通擁堵”數(shù)據(jù)收集起來,作為一個交通擁堵事件集合,其它剩余事件作為另一個集合。對每一個交通擁堵事件,找到事件發(fā)生前的10分鐘,按照時間順序?qū)⒈緱l道路上發(fā)生的事件存為一個列表,然后去除其中毫無征兆發(fā)生的交通擁堵事件,這樣的有效序列共有583個。再同樣從剩余事件集合中隨機(jī)找到583個后續(xù)緊隨事件都不是嚴(yán)重?fù)矶路强沼行蛄?,作為對照組來進(jìn)行試驗對比。然后將問題轉(zhuǎn)換成利用事件序列分類預(yù)測嚴(yán)重?fù)矶碌陌l(fā)生。標(biāo)記交通擁堵發(fā)生前的事件序列為“1”;標(biāo)記非交通擁堵之前10分鐘的事件序列為“0”。
將實驗樣本分別代入第3節(jié)確定循環(huán)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練與測試實驗,并與廣泛應(yīng)用的BP模型進(jìn)行對比。通過數(shù)據(jù)分析,訓(xùn)練過程結(jié)束之后,利用matplotlib繪圖功能來看一下訓(xùn)練的準(zhǔn)確率和損失值變化,如圖4、圖5所示。
圖4 BP神經(jīng)網(wǎng)絡(luò)預(yù)測值準(zhǔn)確率與損失值曲線
圖5 循環(huán)神經(jīng)網(wǎng)絡(luò)預(yù)測值準(zhǔn)確率與損失值曲線
從預(yù)測精度曲線或是損失值曲線來看,循環(huán)神經(jīng)網(wǎng)絡(luò)模型的精度和穩(wěn)定性均明顯高于BP神經(jīng)網(wǎng)絡(luò)模型,且循環(huán)神經(jīng)網(wǎng)絡(luò)模型的預(yù)測精度可達(dá)到80%,損失值保持在0.45以下。只不過曲線抖動比較厲害,穩(wěn)定性差。但是檢測集的預(yù)測精度就不是那么理想了,從半程之后,訓(xùn)練集和驗證集的損失值變化發(fā)生了分叉,這是典型的過擬合現(xiàn)象。發(fā)生過擬合,主要原因就是相對于復(fù)雜的模型,訓(xùn)練數(shù)據(jù)不夠用。這時候,要么增加訓(xùn)練數(shù)據(jù),要么處理數(shù)據(jù)使其降維,或者降低模型復(fù)雜度。立即增加數(shù)據(jù),不太現(xiàn)實。因為目前只有一個月里積攢的數(shù)據(jù)。所以我嘗試?yán)秒S機(jī)失活的方法來去除過擬合。對其中LSTM 層上添加兩個參數(shù)dropout和recurrent_dropout來改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)模型,經(jīng)過多次試驗交叉驗證,其值分別為0.15和 0.25時效果最優(yōu)。試驗結(jié)果如圖6所示。
圖6 改進(jìn)后循環(huán)神經(jīng)網(wǎng)絡(luò)預(yù)測值準(zhǔn)確率與損失值曲線
這次的準(zhǔn)確率曲線,可以感受到訓(xùn)練集和驗證集達(dá)到的準(zhǔn)確率更加貼近,曲線更加平滑。看下面損失值曲線的變化就可以看出來過擬合的去除效果更為明顯,可以看到訓(xùn)練集和驗證集兩條曲線的波動基本保持了一致。
將傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果、改進(jìn)BP小波神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果與改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)果用評價指標(biāo)進(jìn)行對比,對比結(jié)果如表2所示。
表2 預(yù)測模型精度與損失值分析
由表2可知,改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)模型比傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)和改進(jìn)BP小波神經(jīng)網(wǎng)絡(luò)模型預(yù)測精度高、損失值小,改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)模型的MAE、RMSE和MAPE(保留4位有效數(shù)字)分別為 0.0188、0.0001和0.0188,與傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)和改進(jìn)BP小波神經(jīng)網(wǎng)絡(luò)模型相比,MAE、RMSE和MAPE分別提高了3.8%、0.18%、6.7%和1.9%、0.1%、3.84%,由此得知在實時交通事件預(yù)測這類問題上,有預(yù)測精度高,損失值小等的優(yōu)點,改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)模型能夠取得較好的預(yù)測結(jié)果。
本文將循環(huán)神經(jīng)網(wǎng)絡(luò)與隨機(jī)失活算法進(jìn)行結(jié)合組成改進(jìn)循環(huán)神經(jīng)網(wǎng)絡(luò)模型,通過Python輸入實時交通流時間數(shù)據(jù),并在matplotlib中實現(xiàn)了對達(dá)拉斯數(shù)據(jù)的實例數(shù)據(jù)分析。通過實驗分析和驗證了基于隨機(jī)失活的循環(huán)神經(jīng)網(wǎng)絡(luò)交通事件擁堵預(yù)測方法處理具有時效性和多維度的交通事件數(shù)據(jù)效果顯著,在模型預(yù)測精度和損失值都得到了驗證。今后的研究工作將主要集中在繼續(xù)訓(xùn)練預(yù)測模型穩(wěn)定性和如何分析國內(nèi)主要路段高峰期交通事件,使交管部門可以未雨綢繆,提前做出干預(yù)。