交通预测论文笔记:Spatio-Temporal Graph Convolutional Networks: A Deep Learning Frameworkfor Traffic Forecast

0 abstract

        由于交通数据极强的非线性和复杂性,传统方法很难进行中长期的交通预测。

        我们提出了STGCN结构来解决交通领域的预测问题。我们的模型建立在卷积之上,有更快的训练速度和更少的参数。

1 introduction

        交通预测问题,根据预测时间片的长度,可以分为:短期(5~30分钟)和长期(30分钟以上)。大部分统计方法在短期预测上效果很好,但是因为交通流数据的不确定性和复杂性,这些模型在长期预测上效果很一般。

        早期关于中长期交通预测的研究主要集中在动态建模和数据驱动的方法上。

        数据建模:

        使用数学工具(比如微分方程)和物理知识来模拟交通场景,解决交通问题

        但这需要复杂的系统化的编程,还需要大量的算力。

        同时,不切实际的假设和简化很有可能会使得预测的精准度不足

        因此,随着交通数据收集和存储技术的进步,越来越多的研究侧重于数据驱动

         数据驱动:

        又分为传统统计学方法和机器学习方法

        在时间序列分析问题里面,ARIMA和它的变体是很经典的一类方法。但是这种模型受限于对于时间序列平稳性的假设,同时它没有把时空相关性纳入考虑范围。因此,这种方法没法解决高度非线性的交通流量预测问题。

        机器学习方法有KNN,SVM,NN等

        深度学习方法

        深度信念网络DBN、迭代自动编码器SAE都曾用作交通预测,但是,这些模型都无法同时提取交通数据的时间和空间特征。

        之后出现了CNN+RNN的模型来同时考虑时间和空间特征,但是这些模型只能处理网格化交通路网(现实生活中网格状路网是很少,甚至没有的),同时RNN还有误差累积以及训练较慢、较难计算的问题。

        为了解决这一问题,本文提出了使用GNN代替CNN,使用卷积代替RNN的想法来建立一个完全由卷积组成的神经网络。

2 Preliminary

 2.1 图上的交通预测

        根据之前的M个时刻的交通观测数据,预测之后H个时刻的交通数据:

其中 表示t时刻,n个交通观测点的观测结果

 

我们记交通网络图为: 

其中,Y表示时刻t的节点集合,ε是边集合,W代表加权的邻接矩阵

2.2 谱图卷积

谱图卷积通过图傅里叶变换将卷积操作变换到谱域内进行操作。

我们记*g为谱图卷积算子,Θ为谱图卷积核,那么我们有:

其中 标准化拉普拉斯矩阵

        In是单位矩阵

        ​是度矩阵,

         是L的特征值组成的对角矩阵

         傅里叶基是标准化拉普拉斯矩阵L的特征向量组成的矩阵

        在谱域上的图卷积核也是一个对角矩阵 

3 模型结构         

STGCN 有多个时空卷积块组成,每一个是一个三明治结构,由两层序列卷积层和一层空间图卷积层组成

 

3.1 提取空间特征的图卷积 

3.1.1 切比雪夫多项式近似

我们用关于的多项式来近似图卷积核Θ,其中 是L的特征值组成的对角矩阵

 

其中:K表示距离中心节点最远的卷积范围

           (λmax表示拉普拉斯矩阵L最大的特征值 )

 于是,切比雪夫多项式近似的图卷积可以写成:

 

其中 表示关于的k阶切比雪夫多项式

 

通过切比雪夫多项式的近似,谱图卷积的复杂度可以降低到(ε是边集合)

3.1.2 一阶近似

        一个层级的线性方程可以由堆叠多个使用拉普拉斯矩阵的一阶近似的局部图卷积层来达到相同的效果(用深度换广度)。

        由于在神经网络中,参数可以放大缩小,可以归一化,所以我们可以进一步假定

        因此,我们可以进一步将谱图卷积简化 (相当于上面切比雪夫多项式近似的时候,K取2,也就是只考虑1阶邻居):

        是谱图卷积核公用的参数。为了约束参数并为了稳定数值计算 ,θ0和θ1被一个参数θ代替:

        

        我们再令

        

        

        那么我们有:

 

        堆叠K-1个一阶近似的图卷积可以获得和平行的K阶卷积相同的效果,所有的卷积可以从一个顶点的K-1阶邻居中获取到信息。

3.1.3 图卷积的泛化

         在上定义的谱图卷积算子*g可以延伸到多维度的标量中(每一个观测点的交通数据不再是一维而是多维)

        对于每个观测点有Ci个维度的交通信号数据,泛化的谱图卷积可以定义为:

 其中,切比雪夫多项式的系数有个,(Ci,Co分别表示输入和输出的大小)

        那么对于谱图卷积来说, 

 

        回到我们的问题,我们交通数据X的输入有M个时间片,交通路网途中一共有n个点,每个点有Ci维特征(在我们后续的数据中,Ci=1),即

3.2 提取空间特征的门控CNN、

         尽管基于RNN的模型被广泛应用于时间序列分析任务中,RNN在交通预测领域仍然面临着很多问题(迭代很费时间、复杂的门控机制、对于数据的动态变化相应较慢)

        相反地,CNN计算快,结构简单,可以并行,对于之前的步骤依赖性小。

        于是我们在时间轴上应用卷积操作来捕捉交通流数据的时间动态特征。

        如图所示,时间卷积网络包括了一个一维的因果卷积网络(卷积核大小为Kt)和一个门控线性单元GLU作为非线性激活函数。

        对于图G中的每一个点,时间卷积操作考虑它的Kt个邻居的信息。->每层时间卷积操作可以使得交通时间序列数据缩短Kt-1

        时间卷积层每一个点的输入可以看成是  (M——时间片长度,Ci每个点属性的维度值)

        时间卷积核,用来将输入Y映射到输出 上(P,Q是相同通道)

       

        因此,门控时间卷积可以写成

 

        这里 P和Q是GLU门的两个输入

        代表对应位置元素相乘的哈达玛积

        控制了哪些P是重要的,哪些P目前是不重要的

        

        相似地,时间卷积也可以泛化到三位变量

 3.3 时空卷积块

 

每一个时空卷积快最后都会过一个层归一化,来放置过拟合 

对于块l来说,它的输入为

它的输出为  (每一个时间卷积减少Kt-1维)

 整体ST卷积块的计算流程为:

 其中是第一个和第二个时间卷积层的卷积核 

 是空间谱图卷积层的卷积核

 

        在迭代了两个ST卷积块之后,我们使用了一个额外的时间卷积层,以及一个全连接层,来得到输出结果 

         然后我们用一个线性变换获得每个点的预测速度,是权重向量,b是偏差

        我们使用L2 loss来衡量我们模型的优劣

 

        这里Wθ是所有模型中可训练的参数

        v(t+1)是实际的交通速度 

3.4 STGCN总结

  • STGCN可以用来处理结构化时间序列,不仅仅在交通领域,更多其它时空数据挖掘领域的数据都适用

  • STGCN使用时间和空间上的卷积操作,这可以更好地捕捉时间和空间上的特征

  • 由于模型是由完完全全的卷积结构组成,所以我们可以并行处理他,有更少的参数,更快的训练速度

4 实验部分

 

4.1 数据预处理 

        邻接矩阵由观测点之间的距离计算而得:        

 

        ε和σ都是控制邻接矩阵稀疏程度的阈值

        邻接矩阵的可视化见上图(右)

4.2 实验结果

STGCN(Cheb)中的Kt设置为3 

         STGCN的预测表现是很不俗的

        传统的统计和机器学习方法可能在短期预测中效果不错,但是在中长期预测中,因为误差累积、缺少空间信息、没有记忆等问题,效果不理想

        ARIMA效果是最差的,因为它不能处理复杂的时空数据据

        深度学习方法比机器学习方法效果要好

 

与此同时,模型的训练时间是很短的:


 

 

 

 

 

 

 

### MATLAB 实现时空图卷积网络用于交通流量预测 为了实现《Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting》中的方法,需要构建一个能够处理时空数据的框架。该框架主要由以下几个部分组成: #### 1. 数据预处理 在开始之前,需准备并清理交通流量数据集。这通常涉及缺失值填充、标准化以及创建邻接矩阵。 ```matlab % 假设 data 是 N x T 的矩阵, 其中 N 表示节点数, T 表示时间步长. data = load('traffic_data.mat'); % 加载交通流量数据 adj_matrix = create_adjacency_matrix(data); % 创建邻接矩阵函数 normalized_data = normalize_traffic_data(data); % 归一化交通流量数据 ``` #### 2. 构建图结构 通过定义道路之间的连接关系来建立图结构。这里使用邻接矩阵表示图的关系。 ```matlab function adj_matrix = create_adjacency_matrix(road_network) % road_network 应包含路段间距离或其他衡量标准的信息 distances = calculate_distances_between_roads(road_network); threshold = determine_threshold(distances); % 设定阈值 [N, ~] = size(distances); adj_matrix = zeros(N); for i = 1:N for j = 1:N if distances(i,j) <= threshold && i ~= j adj_matrix(i,j) = exp(-distances(i,j)^2 / (2*threshold^2)); end end end end ``` #### 3. 定义 ST-GCN 层 ST-GCN 结合了空间上的 GCN 和时间维度上的 CNN 来捕捉复杂的时空模式[^3]. ```matlab classdef STGCNLayer < nnet.layer.Layer properties K; % 支持的最大阶数 F_in; F_out; W; b; end methods function layer = STGCNLayer(K,F_in,F_out) layer.K = K; layer.F_in = F_in; layer.F_out = F_out; szW = [F_out,K+1,F_in]; layer.W = randn(szW)*0.01; layer.b = zeros(F_out,1); end function Z = predict(layer,X,A_hat) % X: 输入特征向量 (B,N,T,F_in), B 批次大小, N 节点数量, T 时间长度, F_in 特征维数 % A_hat: 预处理后的拉普拉斯矩阵 B = size(X,1); N = size(A_hat,1); T = size(X,3); H = cell(T,1); for t=1:T Xt = reshape(X(:,:,t,:),[],size(X,4)); % 将三维张量转换成二维矩阵 HT = []; for k=0:min(layer.K,size(A_hat,1)-1) AkX = power(A_hat,k)*Xt; HT = cat(2,HT,AkX); end H{t} = tanh(reshape(linear_combination(HT,layer.W)+repmat(layer.b',size(B*N,1),1),... [B,N,layer.F_out])); end Z = cat(3,H{:}); end function dLdW = backward(layer,dLdZ,X,A_hat) ... end end end ``` #### 4. 训练模型 设置超参数,并利用反向传播算法调整权重以最小化损失函数。 ```matlab num_epochs = 50; batch_size = 64; layers = [ imageInputLayer([input_height input_width channels]) convolution2dLayer(filterSize,numFilters,'Padding','same') batchNormalizationLayer() reluLayer() fullyConnectedLayer(outputSize) regressionLayer()]; options = trainingOptions('adam',... 'MaxEpochs', num_epochs,... 'MiniBatchSize', batch_size,... 'InitialLearnRate', 0.001,... 'Shuffle', 'every-epoch',... 'Verbose', false,... 'Plots', 'training-progress'); model = trainNetwork(trainingData,layers,options); ``` 请注意上述代码片段仅为概念验证性质,在实际应用时还需要考虑更多细节优化及调试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值