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

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》
在这里插入图片描述
在这篇文章中存在一个问题,即模型中的时空图卷积块(GCN+Conv 部分) 先在空间维度图卷积,再在时间维度一维卷积,这样的分步操作并没有实现时空相关性的同步捕获。所以,本篇文章重点解决这个问题。

1. Introduction

在这里插入图片描述
首先,需要明确在时空网络中的节点的三类依赖关系。之所以会存在这三类依赖关系,是因为时空网络的信息分别在时间和空间维度同时传递。

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

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

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

最后,明确本文思路。

  • 构造了局部时空图,它将相邻时间步长的单个空间图连接成一个图。
  • 设计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

在这里插入图片描述

  • 每个时间片的时空网络图都会有一个局部空间图,这个局部空间图是由连续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,通过广播机制将两个嵌入矩阵添加到时空网络序列中,得到新的网络序列表示
  • 这两个嵌入矩阵是作为参数学习得到的,训练结束后,这两个嵌入矩阵将包含时间和空间信息,从而帮助模型捕获时空相关性
    在这里插入图片描述

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

2.3 Spatial-Temporal Synchronous Graph Convolutional Module

在这里插入图片描述

  • 输入数据为局部时空图的邻接矩阵
  • 接着输入至图卷积层中,进行图卷积操作(基于空域的)
  • 最后进入聚合层(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
<think>嗯,用户想了解ASTGCN模型的结构和实现。首先,我得回忆一下这个模型的相关信息。根据引用中的内容,ASTGCN结合了注意力机制和图卷积来处理时空特征。交通数据有时间和空间上的复杂性,所以模型需要同时捕捉这两方面。 模型架构应该分为空间和时间两个部分。空间方面,图卷积网络(GCN)可以处理路网的结构,但交通流量是动态变化的,所以需要注意力机制来调整节点间的关系。引用3提到不同位置的历史数据对未来预测的影响不同,这说明空间注意力是必要的。时间方面,引用4指出过去的交通流会影响未来,所以时间注意力也很重要,用来捕捉不同时间点的重要性。 接下来,模型的具体模块可能包括时空块的堆叠。每个块可能有空间注意力图卷积和时间注意力卷积,再加上门控机制。比如,空间注意力层动态调整邻接矩阵,时间注意力层处理序列中的关键时间点。然后,多组件融合部分可能需要处理不同时间尺度的数据,如最近、日周期、周周期,引用4中的X_h应该对应最近时段的输入。 实现细节方面,图卷积可能用切比雪夫多项式近似,注意力机制通过可学习的参数计算权重。时间卷积可能用一维卷积或LSTM,但结合注意力的话,可能采用自注意力机制。代码示例部分需要展示这些组件的实现,比如定义空间注意力层、时间卷积层,以及如何整合它们。 还要注意引用的内容,比如引用2说明模型在长期预测中的优势,引用5澄清节点特征的组成,每个节点在时间t有F个特征。因此,输入数据的维度应该是N×F×T,其中N是节点数,F是特征数,T是时间步长。 可能还需要考虑如何将多个时空块的输出融合,以及最终的预测层设计。损失函数通常用MAE或RMSE。用户可能需要具体的代码示例,所以需要用PyTorch或TensorFlow框架展示关键层的实现。 最后,相关问题部分要涵盖模型组件的作用、与传统模型的区别、注意力机制的具体应用、数据预处理和实际部署挑战。这能帮助用户更全面地理解ASTGCN的应用和优化方向。</think>### 基于注意力机制的空间-时间图卷积网络(ASTGCN)模型架构及实现 #### 1. 核心设计目标 ASTGCN旨在通过融合图卷积网络(GCN)和注意力机制,捕捉交通数据中的**动态时空关联性**。交通流具有以下特点: - **空间动态性**:路网节点间的关系随时间变化(如早晚高峰拥堵传播)[^3] - **时间动态性**:不同历史时段对预测的影响权重不同(如最近5分钟与1小时前数据的重要性差异)[^4] #### 2. 模型架构 ``` 输入层 → 多组件时空块堆叠 → 融合层 → 输出层 ``` ##### 2.1 空间-时间块(Spatio-Temporal Block) 每个模块包含三层结构: ```python 时空注意力层 → 空间图卷积 → 时间卷积 → 残差连接 ``` - **空间注意力层** 动态计算节点间关联权重矩阵: $$S = \text{softmax}\left( \sigma(\mathbf{X}W_1) \cdot (\mathbf{X}W_2)^T \right)$$ 其中$W_1, W_2$为可学习参数,$\sigma$为激活函数[^2] - **时间注意力层** 计算时间维度权重: $$E = \text{softmax}\left( \text{tanh}(\mathbf{X}U_1) \cdot (\mathbf{X}U_2)^T \right)$$ 通过调整历史时间步的重要性增强时间建模能力 - **门控时序卷积** 使用一维空洞卷积提取多尺度时序特征: ```python class TemporalConv(nn.Module): def __init__(self, in_channels, filters, kernel_size=3): super().__init__() self.conv = nn.Conv1d(in_channels, 2*filters, kernel_size, padding='same') self.tanh = nn.Tanh() self.sigmoid = nn.Sigmoid() def forward(self, x): conv_out = self.conv(x) gate, filter = torch.split(conv_out, split_size, dim=1) return self.tanh(filter) * self.sigmoid(gate) # 门控机制 ``` ##### 2.2 多组件融合 同时处理三种时间模式的数据输入: - **最近时段数据**:$\mathcal{X}_h \in \mathbb{R}^{N \times F \times T_h}$(直接关联当前状态) - **日周期数据**:$\mathcal{X}_d \in \mathbb{R}^{N \times F \times T_d}$(捕捉早晚高峰模式) - **周周期数据**:$\mathcal{X}_w \in \mathbb{R}^{N \times F \times T_w}$(识别工作日/周末差异) #### 3. 关键实现细节 ```python class ASTGCN(nn.Module): def __init__(self, node_num, feat_dim, pred_len): super().__init__() # 空间注意力层 self.spatial_att = SpatialAttention(feat_dim) # 时间卷积层 self.temporal_conv = TemporalConv(feat_dim, 64) # 图卷积层(使用切比雪夫多项式近似) self.gconv = ChebConv(64, 64, K=3) # K为多项式阶数 # 多组件融合 self.fusion = nn.Linear(3*64, pred_len) def forward(self, x_h, x_d, x_w): # 处理最近时段数据 s_att = self.spatial_att(x_h) x_h = F.relu(self.gconv(x_h, s_adj_matrix)) # 动态调整邻接矩阵 x_h = self.temporal_conv(x_h.transpose(1,2)).transpose(1,2) # 类似处理日周期、周周期数据 ... # 特征融合 fused = torch.cat([x_h, x_d, x_w], dim=-1) return self.fusion(fused) ``` #### 4. 模型优势分析 1. **动态空间建模**:通过注意力机制自动学习节点间动态权重,优于传统GCN的固定邻接矩阵 2. **多粒度时间建模**:同时捕捉短期波动和长期周期模式[^4] 3. **并行化处理**:不同时间组件可并行计算提升效率
评论 33
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值