论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》

目录

  • 1. Introduction
  • 2. Spatial-Temporal Synchronous Graph Convolutional Network
    • 2.1 Localized Spatial-Temporal Graph Construction
    • 2.2 Spatial-Temporal Embedding
    • 2.3 Spatial-Temporal Synchronous Graph Convolutional Module
    • 2.4 Spatial-Temporal Synchronous Graph Convolutional Layer
  • 3. Experiments
    • 3.1 Datasets
    • 3.2 Experiment Settings
    • 3.3 Component Analysis

Chao Song, Youfang Lin, Shengnan Guo, Huaiyu Wan*. Spatial-Temporal Synchronous Graph Convolutional Networks: A New Framework for Spatial-Temporal Network Data Forecasting. Proc. of the 34th AAAI Conference on Artificial Intelligence (AAAI), 2020. (CCF A)

回顾下前面的这篇文章 论文笔记《Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow Forecasting》
论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第1张图片
在这篇文章中存在一个问题,即模型中的时空图卷积块(GCN+Conv 部分) 先在空间维度图卷积,再在时间维度一维卷积,这样的分步操作并没有实现时空相关性的同步捕获。所以,本篇文章重点解决这个问题。

1. Introduction

论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第2张图片
首先,需要明确在时空网络中的节点的三类依赖关系。之所以会存在这三类依赖关系,是因为时空网络的信息分别在时间和空间维度同时传递。

  • 在同一时间片中,邻居节点与特定点的依赖关系(棕色箭头)
  • 在不同时间片中,特定点对其自身的依赖关系(蓝色箭头)
  • 在不同时间片中,邻居节点对特定点的依赖关系(绿色箭头)

其次,明确现有模型存在的问题。

  • 多数模型都只直接捕获了前两种依赖关系,然后通过将空间表征喂入到针对时间维度建模的模块中,以捕获第三种依赖关系,并不是同时捕获的。
  • 时空网络数据通常在时间维/空间维具有异质性,例如在城市路网中,居住区和商业区在不同时刻常具有不同观测特征,但是以往的模型针对不同时间 共享模型结构,这样一来不能很好地捕获异质性。

最后,明确本文思路。

  • 构造了局部时空图,它将相邻时间步长的单个空间图连接成一个图。
  • 设计Spatial-Temporal Synchronous Graph Convolutional Module (STSGCM) 模块,用以提取局部时空图的时空相关性。
  • 设计Spatial-Temporal Synchronous Graph Convolutional Layer (STSGCL) 层,即在不同时间段部署多个STSGCM,用以捕获长程时空网络数据的异质性。
  • 堆叠多个STSGCL 以聚合长程时空关系和异质性,并得到最终预测结果。

2. Spatial-Temporal Synchronous Graph Convolutional Network

2.1 Localized Spatial-Temporal Graph Construction

论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第3张图片

  • 每个时间片的时空网络图都会有一个局部空间图,这个局部空间图是由连续3个时间片组成。
  • 每个时间片的某节点,不仅有当下时间片的邻居节点,还有前后两个时间片的与自身的邻接关系。
  • 形成的局部时空图表示节点的属性,不随时间变化而变化。

注:这个局部时空图是为后续的图卷积操作服务的,目的是体现各个节点与其多阶邻居的关系,每个节点既有与其同时间步的邻居,还有前后两个时间步的自身节点,还有前后两个时间步自身节点的邻居节点(二阶邻居)。

2.2 Spatial-Temporal Embedding

当将不同时间步的节点放到同一个局部时空图中,就模糊了节点在时空维度的属性。因此,为解决该问题,作者在时空网络序列中添加位置嵌入信息。

  • 对于每个时空网络序列 X g ∈ R N × C × T X_g \in \mathbb{R}^{N\times C\times T} XgRN×C×T,加一个可学习的时间嵌入矩阵 T e m b ∈ R C × T T_{emb} \in \mathbb{R}^{C\times T} TembRC×T 和空间嵌入矩阵 S e m b ∈ R N × T S_{emb} \in \mathbb{R}^{N\times T} SembRN×T,通过广播机制将两个嵌入矩阵添加到时空网络序列中,得到新的网络序列表示
  • 这两个嵌入矩阵是作为参数学习得到的,训练结束后,这两个嵌入矩阵将包含时间和空间信息,从而帮助模型捕获时空相关性
    论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第4张图片

注:为什么要进行这步操作呢,是因为刚刚的局部时空图,把三个时间片节点的关系都压到一个矩阵中了,这样一来图卷积网络就会把节点看作是等价的,时空信息被盖掉了,所以要加个时空嵌入表示的方法区分节点。

2.3 Spatial-Temporal Synchronous Graph Convolutional Module

论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第5张图片

  • 输入数据为局部时空图的邻接矩阵
  • 接着输入至图卷积层中,进行图卷积操作(基于空域的)
  • 最后进入聚合层(AGG),聚合层的实现分两步走:聚合(aggregating)和裁剪(cropping)。

Aggregating operation 聚合操作

  • 聚合(aggregating): 使用最大池化 h A G G = max ⁡ ( h ( 1 ) , h ( 2 ) , … , h ( L ) ) ∈ R 3 N × C o u t h_{A G G}=\max \left(h^{(1)}, h^{(2)}, \ldots, h^{(L)}\right) \in \mathbb{R}^{3 N \times C_{o u t}} hAGG=max(h(1),h(2),,h(L))R3N×Cout,这也解释了为什么STSGCM模块的图中, h ( 1 ) h^{(1)} h(1)到AGG有个跳跃链接的原因。
  • 裁剪(cropping): 然后接着上步进行cropping,得到 h ( final ) ∈ R N × C out h^{(\text {final})} \in \mathbb{R}^{N \times C_{\text {out}}} h(final)RN×Cout
    (1)为什么要cropping:如果将多个STSGCMs叠加,又保留所有相邻时间片的特征,将会有大量冗余信息驻留在模型中,严重影响模型的性能。
    (2)仅保留中间时间片的cropping为什么合理:因为图卷积算子已经聚合了前后时间步的信息,虽然进行裁剪 但每个节点依旧包含了局部的时空相关性。
    论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第6张图片

2.4 Spatial-Temporal Synchronous Graph Convolutional Layer

论文这个部分实在是太难懂了,结合代码就好理解一些,下文结合代码说明该层的工作过程。

首先,我们需要明确,为了捕获长程的时空关系,两个关键:

  • 第一,需要使用一个滑窗来裁剪数据,比如原始的时间序列数据有T个时间段,那还是3个时间片一裁剪,一共能得到 T-2 个裁剪结果。
  • 第二,模型的部署上,需要堆叠多个STSGCM,而不是各个时间段共享一个。(目的是更好捕获不同时间片数据的异质性)

注意:这里我在最开始看,将原始数据的滑窗操作2.1节中的局部时空图搞混了,这一步中是对原始的时间序列数据做的滑窗(合并3个相邻时间片)。

接下来,看看具体的操作:

  • 输入数据 X ∈ R T × N × C \mathbf{X} \in \mathbb{R}^{T \times N \times C} XRT×N×C 其中, T T T 时间步, N N N 节点个数, C C C 特征数
  • 进行position embedding操作 X G + t e m b + s e m b = X G + T e m b + S e m b ∈ R N × C × T X_{\mathcal{G}+t_{e m b}+s_{e m b}}=X_{\mathcal{G}}+T_{e m b}+S_{e m b} \in \mathbb{R}^{N \times C \times T} XG+temb+semb=XG+Temb+SembRN×C×T
  • 滑窗操作(sliding window)以剪裁数据,生成 T − 2 T-2 T2 个时间序列片,使用 T − 2 T-2 T2 个独立的时空同步图卷积模块对其分别建模,以捕获异质性
  • 然后开始循环每个局部时空图数据(包含3个时间片),维度是(B,3,N,C) B是batch数
  • reshape数据,维度变为(B,3N,C),目的是直接放到stsgcm模块中(2.3节)
  • transpose数据,维度变为(3N,B,C)
  • 经过一个stsgcm(2.3节),维度变为(N, B, C’),filters: list[int], list of C'
  • 再转换数据维度为(B, 1, N, C’)
  • 最后,将 T − 2 T-2 T2个的结果连接起来,return的结果是 M = [ M 1 , M 2 , … , M T − 2 ] ∈ R ( T − 2 ) × N × C o u t M=\left[M_{1}, M_{2}, \ldots, M_{T-2}\right] \in \mathbb{R}^{(T-2) \times N \times C_{o u t}} M=[M1,M2,,MT2]R(T2)×N×Cout,维度是(B, T-2, N, C’)

最后,介绍三个额外小点:
(1)遮罩矩阵

STSGCN:时空同步图卷积神经网络用于交通预测
这个遮罩矩阵会在一开始就乘以局部时空图的邻接矩阵,通过训练不断地调整其参数,使得邻接矩阵收敛到一个更合理的值。这么做的原因是有些结点之间可能在局部时空图中有边,但是这两个结点之间可能并没有实际的关联,或他们的关联程度很低,有的结点之间关联程度很高,这个遮罩矩阵就可以在聚合时调节这个关联性的强弱。

  • 在2.3一节中,能看到邻接矩阵会影响聚合的效果,但是邻接矩阵只是由0/1构成,这样表示的节点间关系就过于限制了(就比如,两个节点是联通的,但是他们某一时间段内并没有相关性,即便这样它们的特征也会被聚合,就很鸡肋)。
  • 所以,作者加入一个可学习的遮罩矩阵,使聚合效果更合理。 A adjusted ′ = W mask ⊗ A ′ ∈ R 3 N × 3 N A_{\text {adjusted}}^{\prime}=W_{\text {mask}} \otimes A^{\prime} \in \mathbb{R}^{3 N \times 3 N} Aadjusted=WmaskAR3N×3N

(2)输入层 在输入层之前,先加一个全连接层,将输入转换为高维空间,提高网络的表示能力。

(3)输出层

  • 输出层接收到的输入数据维度为(T,N,C),经过transpose和reshape将其变为 X ⊤ ∈ R N × T C X^{\top} \in \mathbb{R}^{N \times T C} XRN×TC
  • 再放到两个全连接接层中, y ^ ( i ) = Re ⁡ L U ( X ⊤ W 1 ( i ) + b 1 ( i ) ) ⋅ W 2 ( i ) + b 2 ( i ) \hat{y}^{(i)}=\operatorname{Re} L U\left(X^{\top} W_{1}^{(i)}+b_{1}^{(i)}\right) \cdot W_{2}^{(i)}+b_{2}^{(i)} y^(i)=ReLU(XW1(i)+b1(i))W2(i)+b2(i)
  • 然后我们将每个时间步的预测值拼到一起,形成一个矩阵 Y ^ = [ y ^ ( 1 ) , y ^ ( 2 ) , … , y ^ ( T ) ] ∈ R N × T ′ \hat{Y}=\left[\hat{y}^{(1)}, \hat{y}^{(2)}, \ldots, \hat{y}^{(T)}\right] \in \mathbb{R}^{N \times T^{\prime}} Y^=[y^(1),y^(2),,y^(T)]RN×T

(4)损失函数 采用Huber loss,该损失函数相对于平方误差损失,对离群值不敏感。 δ \delta δ 是控制平方误差损失范围的阈值参数

STSGCN:时空同步图卷积神经网络用于交通预测
这个损失函数结合了L1和L2两种损失。因为L1损失在原点处不可微,对于一些模型的优化会造成困难,所以将原点附近替换为L2损失,其他地方继续使用L1损失。而且L2损失由于平方的存在,会使得一些异常值或者离群值造成的损失更大,使模型过多地关注他们,相比之下L1损失更平滑一些,训练出来的模型更鲁棒。

L ( Y , Y ^ ) = { 1 2 ( Y − Y ^ ) 2 ∣ Y − Y ^ ∣ ≤ δ δ ∣ Y − Y ^ ∣ − 1 2 δ 2  otherwise  L(Y, \hat{Y})=\left\{\begin{array}{ll} \frac{1}{2}(Y-\hat{Y})^{2} & |Y-\hat{Y}| \leq \delta \\ \delta|Y-\hat{Y}|-\frac{1}{2} \delta^{2} & \text { otherwise } \end{array}\right. L(Y,Y^)={ 21(YY^)2δYY^21δ2YY^δ otherwise 

现在再重新看一下整个模型,能稍微清楚一点。
论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第7张图片

3. Experiments

3.1 Datasets

论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第8张图片

  • 在PEMS数据集上构造了4个子集
  • 每5分钟聚合一次数据,每个时间步表示该5分钟内的车流量,这样1小时就有12个时间步
  • 目标是历史12步,预测未来12步
  • 每个数据集的空间网络是根据实际的道路网络构建的。如果两个监视器在同一条路上,则认为这两点在空间网络中是连接的。

3.2 Experiment Settings

  • 训练集:验证集:测试集 = 6:2:2
  • 实验完成10次并取均值和标准差
  • STSGCN的超参数是4个STSGCL层,每层的STSGCM有3个图卷积操作,每个图卷积操作使用64个卷积核
    论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第9张图片

3.3 Component Analysis

作者用过验证不同变体模型,在PEMS03数据集上的效果,判断各组件对于模型整体性能的影响。

  • basic:没有时空embedding;没有遮罩矩阵;使用ReLU作为激活函数;每个STSGCL只有一个STSGCM模块,并且在每个时间段都是共享的;输出层与ASTGCN的输出层相同,只是使用带有12个过滤器的卷积层来生成预测。
  • multi-module:STSGCM独立,不共享。
  • GLU:激活函数用GLU。
  • +emb:激活函数用GLU,加入时空嵌入。
  • +mask:激活函数用GLU,加入时空嵌入,加入全局遮罩矩阵。
  • reshape-output:采用本文结构的输出层。
  • STSGCN:最终的模型。

结论:
论文笔记《Spatial-Temporal Synchronous Graph Convolutional Networks》_第10张图片

  • GLU激活函数的性能优于ReLU激活函数。原因是GLU的参数大小是ReLU的两倍,因此其更大的容量使其能够捕获复杂的时空相关性。与ReLU相比,它的输出控制更加灵活。
  • 每个时间段配备单独STSGCM的模型(individual STSGCMs)比共享的STSGCM(shared STSGCM)效果更好,说明了对时空网络数据的异质性建模的必要性。注 此部分需要对照代码
  • 时空嵌入能提升性能
  • 遮罩矩阵对提升性能有一点帮助

STSGCN:时空同步图卷积神经网络用于交通预测
这些组件在MAE和MAPE上都有明显的性能提升,但是RMSE上的提升没有那么明显,这也是为什么在PEMS07上RMSE指标不如DCRNN模型。不过影响RMSE指标没有提升的原因有很多,可能和损失函数有关,还需要具体的论证。

你可能感兴趣的:(论文笔记)