基于时空图卷积网络预测交通流

通过历史交通流量数据来预测未来的交通流量,历史交通流量数据可以表示为交通网络上的时间序列。交通网络可以定义为:

交通流预测实例 python_邻接矩阵

其中,v是一组N个交通传感器节点(每条道路在不同的路段可能有多个传感器),是连接这些节点的一组边。节点间 的连接也可以用邻接矩阵A来描述,A[i,j]表示节点i和j之间的关系的强度,通常通过两个传感器的地理接近度来测量,若两点之间不连通则A[i,j] = 0。

建立模型输入:在历史交通流序列上滑动一个的窗口生成长度为T的新序列作为输入。

模型框架:

交通流预测实例 python_数据_02

该模型主要由三个部分组成:(1)S-GNN层,目的是通过交通网络捕捉道路节点之间的空间关系;(2)GRU层,即按顺序捕获时间关系(或局部时间依赖);(3)transformer层,旨在直接捕获序列中的长期时间依赖(或全局时间依赖)。如上图所示,S-GNN层同时还应用于GRU单元的输入和隐藏表示,GRU层和transformer层都用于分别捕获每个节点的时间依赖关系,同时它们从不同的角度捕获依赖关系。

S-GNN: 交通网络G对道路之间的关系进行编码。交通网络中连通的道路更有可能具有相似的属性。具体到交通流预测问题中,如果两条道路相距较近,则道路上的交通状况更有可能相互影响。于是采用以下公式:

交通流预测实例 python_依赖关系_03


公式中,采用ReLU函数,表示改进的邻接矩阵,D是精细度矩阵。W是可学习的参数。由于可能还有一些没有意识到的其他因素影响节点之间的关系。故采取对每个节点vi学习一个潜在位置表示pi ,于是就能得到了任意俩个节点的相似性公式:

交通流预测实例 python_交通流预测实例 python_04

公式中Score函数是两个变量的点乘,之后通过掩模来降低一些参数量。

交通流预测实例 python_深度学习_05

从而得到改进的关系矩阵进行GCN操作

交通流预测实例 python_数据_06

GRU:为每个时间步长保持一个隐藏的表示,它将用于控制到下一个时间步长的信息流,并作为当前时间步长的输出, GRU操作将单独应用于每个节点,并且所有节点的GRU的参数都将相互共享。为了在处理序列时包含空间关系,在方程式中应用了修改后的GCN运算的输入和隐藏的表示。在时间t,给定输入xt和上一个步骤Ht-1的隐藏表示。然后,对于时间t中的每个节点vi,GRU的操作可以表示如下:

交通流预测实例 python_数据_07


上述公式中

交通流预测实例 python_深度学习_08


是需学习的参数,,xt, ht-1是经过S-GNN层GCN操作后的输出,ht为当前时间步长的输出,也作为下一步时间步长的输入。

交通流预测实例 python_交通流预测实例 python_09

上图为transformer layer,在Multi-Head Attention Layer中序列位置i的元素关注序列中的所有元素。注意力函数的输入由维数为的键和序列中所有位置的维数为的值组成。用所有键计算给定queries的点积,除以每个键然后应用softmax函数来获得关注每个位置的得分,然后将这些注意力分数作为权重,以聚合来自相应值的信息。通过使用来自GRU层的序列位置编码作为transformer layer的输入。Multi-Head Attention Layer后,输出状态将传递到点态前馈神经网络层。在每个子层之后都有残差连接和层归一化。最后,得到了transformer layer的输出,可以表示为

交通流预测实例 python_依赖关系_10


prediction layer:利用多层前馈网络预测未来时期的交通流。

该模型训练过程中的损失函数为:

交通流预测实例 python_深度学习_11


交通流预测实例 python_数据_12


其中f()为预测的模型