劉 偉,張曉蕾,孫士保,趙鵬程
(1. 河南科技大學信息工程學院,河南 洛陽 471023;2. 北京信息職業技術學院軟件工程系,北京 100018)
交通事件管理是智能交通系統(ITS)的一個研究熱點,由于城市街道的不斷增多和繁忙時段交通需求日益增大,一旦發生交通事件,如果不能及時處理就容易造成交通擁堵,交通事件管理面臨著巨大挑戰。
針對交通事件不確定性較強和規律性較弱等特點,國內外研究學者提出兩類預測模型:一類屬于數學模型的方法,Luis Leon ojeda等人[1]提出的基于自適應卡爾曼濾波的多跳預測方法。成云等人[2]提出的基于差分自回歸滑動平均和小波神經網絡組合模型的預測方法。柳立春[3]提出的改進卡爾曼算法。雖然數學模型方法預測精度高、穩定性較好,但方法在構建和求解交通模型過程中難度較大,不適合于短時交通事件預測的要求。另一類是基于非數學模型的方法,Bingduo Yang[4]提出一種針對本地當日交通流估計和變量選擇的回歸方法,采用平滑絕對差分算法同時完成選擇變量和估計回歸系數,該算法在標準數據集中測試獲得較好性能。Ricardo等[5]提出一種交通模式的動態分類方法,分為離線和在線兩個階段,實現了對日常交通模式的有效識別。邵俊倩[6]提出了基于小波模糊神經網絡的交通流預測方法,通過分析神經網絡、模糊邏輯和小波基函數的特點,得到了收斂性預測精度明顯優于常規BP網絡的模型。吳琛,程琳[7]構建了適合于交通事件檢測的BP小波神經網絡算法,與其它事件檢測算法相比適合實時檢測,具有平均檢測時間短的優點。非數學模型預測方法相對來說實現要更簡便,只要向模型里面輸入足夠的歷史數據,不需要去構建龐大冗余的預測模型,最終得到的結果也可以滿足在智能交通系統中的需要。
上述方法大多在離線或是平穩時間序列情況下的效果比較好,但實時交通事件數據因本身設備限制或外部因素干擾的不確定性,交通時序數據預測會出現預測結果精度不理想,模型曲線過擬合等問題。針對交通流數據預測中的問題,綜合參數模型、非參數模型優缺點,在本文采用循環神經網絡模型配合隨機失活方法,處理交通事件序列數據并去除數據模型的過擬合,得到一個穩定的改進預測模型。
循環神經網絡(Recurrent Neural Network, RNN)是一類以序列數據為輸入,在序列的演進方向進行遞歸且所有節點(循環單元)按鏈式連接形成閉合回路的遞歸神經網絡,可用于交通流量預測等各個方面[8-9]。RNN模型有很多,這里介紹最主流的RNN模型結構如圖1所示。

圖1 RNN模型結構圖
1)x(t)代表在序列索引號t時訓練樣本的輸入
2)h(t)代表在序列索引號t時模型的隱藏狀態,由x(t)和h(t-1)共同決定
3)o(t)代表在序列索引號t時模型的輸出,只由模型當前隱藏狀態h(t)決定
4)L(t)代表在序列索引號t時模型的損失函數
5)y(t)代表在序列索引號t時訓練樣本序列的真實輸出
6)U,W,V這三個矩陣是模型的線性關系參數,它在整個RNN網絡中是共享的,體現了RNN的模型的“循環反饋”的思想
7) 對于任意一個序列索引號t,隱藏狀態h(t)由x(t)和h(t-1)得到
h(t)=σ(z(t))=σ(Ux(t)+Wh(t-1)+b)
(1)
其中σ為RNN的激活函數,b為線性關系的偏倚。序列索引號t時模型的輸出o(t)的表達式比較簡單
o(t)=Vh(t)+c
(2)
在最終在序列索引號t時預測輸出為

(3)

交通事件特點是具有隨機性,而隨機失活方法處理這類事件的優點在于可以將復雜的外界輸入簡單化,降低它們之間的相關性、隨機性。這種特性使得隨機失活方法正好適合處理交通事件。
隨機失活(dropout)是對具有深度結構的人工神經網絡進行優化的方法,在學習過程中通過將隱含層的部分權重或輸出隨機歸零,降低節點間的相互依賴性(co-dependence)從而實現神經網絡的正則化(regularization),降低其結構風險。
訓練階段神經網絡會隨機按概率p將部分隱含層節點的權重歸零(如圖2(b)),由于每次迭代受歸零影響的節點不同,因此各節點的“重要性”會被平衡。引入隨機失活后,神經網絡的每個節點都會貢獻內容,不會出現少數高權重節點完全控制輸出結果的情況,因此降低了網絡的結構風險,以緩解神經元之間隱形的協同適應,從而達到降低模型復雜度的目的。

圖2 隨機失活方法
從數學上來說,神經網絡層訓練過程中使用的標準 Dropout 的行為可以被寫作
y=f(Wx)·m
(4)
其中f(Wx)為激活函數,x是該層的輸入,W是該層的權值矩陣,y為該層的輸出,而m則為該層的 Dropout 掩膜(mask),mask 中每個元素為 1 的概率為p。在測試階段,該層的輸出可以被寫作
y=pf(Wx)
(5)
結合隨機失活方法及主要代碼如下所示。
Input: 樣本數據并歸一化
DropoutFraction的值
Output:預測和擬合值
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:初步構造了一個輸入-隱含-輸出層網絡
權值初始化
Step3:設置學習率,momentum,激發函數類型,懲罰系數
Step4:每一次樣本數據輸入訓練時,隨機扔掉50%的隱含層節點
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
本文將使用循環神經網絡模型方法對輸入的交通事件數據進行訓練,并將訓練出來的模型使用隨機失活方法去除數據的過擬合,構建基于改進循環神經網絡的交通流擁堵事件預測模型。其預測流程如圖3所示。

圖3 基于RNN的改進交通流擁堵事件預測流程圖
其中具體方法步驟如下:
1) 通過政府開放數據渠道,獲取達拉斯區域2018年十一月整月的交通事件開放數據,原始數據的每條事件信息都包含了提交時刻路段的經緯度以及時間,把整個數據集里面的事件類型都變成事件編號,將問題轉換成利用事件序列進行分類預測,對采集到的原始數據進行修復和歸一化預處理。
2) 把交通堵塞事件數據中最嚴重的“大型交通擁堵”(large traffic jam)和“超大型交通擁堵”(huge traffic jam)合并成一個嚴重交通擁堵事件集合,對于每一個嚴重擁堵事件,追溯到前30分鐘,把之前同一條道路上發生的事件,按照順序存成一個列表。對沒有任何其它事件先兆的空列表進行了清除。同樣,從剩余事件集合中,隨機找出了相同數量的非空有效序列,這些序列的后續緊隨事件都不是嚴重擁堵。對嚴重擁堵的之前30分鐘的事件序列標記為1;對于非嚴重擁堵之前30分鐘的事件序列標記為0。打亂數據集中數據的順序,但是保持序列和對應標記之間一致性。
3) 劃分訓練集和測試集。取其中80%的數據作為訓練集數據,另外20%的數據作為驗證集數據。利用事件類型數量和事件向量長度,構造一個初始嵌入矩陣,搭建循環神經網絡模型,開始訓練時,把剛才隨機生成的初始嵌入矩陣挪進來,并且不改變嵌入層的參數。最后,開始訓練搭建好的模型,并把模型的運行結果保存起來。
4) 訓練好循環神經網絡模型后,準確率曲線沒有劇烈波動且后半程穩定在80%以上,但是損失值曲線發生了分叉。這是典型的過擬合。這是因為相對于復雜的模型,訓練數據不夠用。解決方法是增加訓練數據,或者降低模型復雜度。立即增加數據不太現實,但是降低模型復雜度,可以利用在LSTM層上加入隨機失活的方法調參來去除過擬合。
5) 將最終訓練模型結果與傳統BP神經網絡預測模型對比分析得出結論。
為了驗證本文方法的有效性,設計實驗進行驗證。
用于論文研究的數據,是達拉斯政府的2018年整個十一月的Waze交通事件的開放數據。通過使用本文改進的循環神經網絡來構建序列數據分類模型,利用序列模型找到規律進行分類預測。
現在普遍使用的模型評價指標是平均絕對誤差(MAE),均方根誤差(RMSE)和平均絕對百分誤差(MAPE)。如下,式(6)為 MAE 的計算公式,式(7)為 RMSE的計算公式,式(8)為 MAPE 的計算公式。

(6)

(7)

(8)

在Python中導入交通流事件數據,把交通堵塞事件數據中,對交通影響最大的“大型交通擁堵”數據收集起來,作為一個交通擁堵事件集合,其它剩余事件作為另一個集合。對每一個交通擁堵事件,找到事件發生前的10分鐘,按照時間順序將本條道路上發生的事件存為一個列表,然后去除其中毫無征兆發生的交通擁堵事件,這樣的有效序列共有583個。再同樣從剩余事件集合中隨機找到583個后續緊隨事件都不是嚴重擁堵非空有效序列,作為對照組來進行試驗對比。然后將問題轉換成利用事件序列分類預測嚴重擁堵的發生。標記交通擁堵發生前的事件序列為“1”;標記非交通擁堵之前10分鐘的事件序列為“0”。
將實驗樣本分別代入第3節確定循環神經網絡模型進行訓練與測試實驗,并與廣泛應用的BP模型進行對比。通過數據分析,訓練過程結束之后,利用matplotlib繪圖功能來看一下訓練的準確率和損失值變化,如圖4、圖5所示。

圖4 BP神經網絡預測值準確率與損失值曲線

圖5 循環神經網絡預測值準確率與損失值曲線
從預測精度曲線或是損失值曲線來看,循環神經網絡模型的精度和穩定性均明顯高于BP神經網絡模型,且循環神經網絡模型的預測精度可達到80%,損失值保持在0.45以下。只不過曲線抖動比較厲害,穩定性差。但是檢測集的預測精度就不是那么理想了,從半程之后,訓練集和驗證集的損失值變化發生了分叉,這是典型的過擬合現象。發生過擬合,主要原因就是相對于復雜的模型,訓練數據不夠用。這時候,要么增加訓練數據,要么處理數據使其降維,或者降低模型復雜度。立即增加數據,不太現實。因為目前只有一個月里積攢的數據。所以我嘗試利用隨機失活的方法來去除過擬合。對其中LSTM 層上添加兩個參數dropout和recurrent_dropout來改進循環神經網絡模型,經過多次試驗交叉驗證,其值分別為0.15和 0.25時效果最優。試驗結果如圖6所示。


圖6 改進后循環神經網絡預測值準確率與損失值曲線
這次的準確率曲線,可以感受到訓練集和驗證集達到的準確率更加貼近,曲線更加平滑。看下面損失值曲線的變化就可以看出來過擬合的去除效果更為明顯,可以看到訓練集和驗證集兩條曲線的波動基本保持了一致。
將傳統BP神經網絡預測結果、改進BP小波神經網絡預測結果與改進循環神經網絡結果用評價指標進行對比,對比結果如表2所示。

表2 預測模型精度與損失值分析
由表2可知,改進循環神經網絡模型比傳統的BP神經網絡和改進BP小波神經網絡模型預測精度高、損失值小,改進循環神經網絡模型的MAE、RMSE和MAPE(保留4位有效數字)分別為 0.0188、0.0001和0.0188,與傳統的BP神經網絡和改進BP小波神經網絡模型相比,MAE、RMSE和MAPE分別提高了3.8%、0.18%、6.7%和1.9%、0.1%、3.84%,由此得知在實時交通事件預測這類問題上,有預測精度高,損失值小等的優點,改進循環神經網絡模型能夠取得較好的預測結果。
本文將循環神經網絡與隨機失活算法進行結合組成改進循環神經網絡模型,通過Python輸入實時交通流時間數據,并在matplotlib中實現了對達拉斯數據的實例數據分析。通過實驗分析和驗證了基于隨機失活的循環神經網絡交通事件擁堵預測方法處理具有時效性和多維度的交通事件數據效果顯著,在模型預測精度和損失值都得到了驗證。今后的研究工作將主要集中在繼續訓練預測模型穩定性和如何分析國內主要路段高峰期交通事件,使交管部門可以未雨綢繆,提前做出干預。