论文笔记《Graph WaveNet for Deep Spatial-Temporal Graph Modeling》

Abstract

现存问题:

  • 在捕获空间依赖性方面。 大多在固定图上捕获空间依赖关系,这种固定图结构不一样反映真实依赖关系,而真实依赖关系可能由于不完整的邻接关系而丢失。
  • 在捕获时间依赖性方面。 RNNs/CNNs等在捕获长程的时间序列时,效果不太好。

本文解决方法:

  • 提出自适应邻接矩阵,并通过节点嵌入学习它
  • 堆叠空洞1D卷积,感受野随着堆叠层数增加而指数级增加,进而捕获长程关系

1. Introduction

时空图模型的一个基本假设是:节点未来信息仅取决于该节点和其邻居的历史信息。后续研究成果证明了将数据的图结构引入模型中的有效性,但该类模型存在两个问题:

  • 依赖关系未能充分表征。(1)连接不包含两个节点之间的依赖关系,例如推荐系统中,存在连接的用户并不会对产品有共同偏好。(2)两个节点之间存在依赖关系,但缺乏链接,例如推荐系统中,两个用户存在相同偏好,但缺乏连接。
  • 时空图模型未能有效学习到时间依赖性。(1)基于RNN的方法,迭代传播耗时、存在梯度爆炸/消失问题。(2)基于CNN的方法通常需要较多层以保证感受野大小。

本文贡献:

  • 提出自适应的邻接矩阵(a self-adaptive adjacency matrix),据此捕获隐藏的空间依赖关系,该矩阵能够在没有任何先验知识指导的情况下自动从数据中发现不可见的图结构。
  • 提出了一个有效的框架来同时捕获时空相关性,具体就是将图卷积和dilated casual convolution组合。

2. Related Works

图卷积模型 大概两个分支:

  • 基于频谱域的方法
  • 基于空域的方法

但这些方法,都将邻接矩阵认为是一种先验知识,并且在训练过程中也是固定不变的。

3. Methodology

3.1 Problem Definition

  • G = ( V , E ) G=(V,E) G=(V,E),节点集 V V V,边集 E E E
  • 邻接矩阵 A ∈ R N × N \mathbf{A} \in \mathbf{R}^{N \times N} ARN×N
  • 在时间步 t t t,输入矩阵为 X ( t ) ∈ R N × D \mathbf{X^{(t)} }\in \mathbf{R}^{N \times D} X(t)RN×D
  • 本文目标是,给定图 G G G 和历史 S S S步图信号数据,学习映射关系 f f f,进而预测接下来 T T T 步图信号 [ X ( t − S ) : t , G ] → f X ( t + 1 ) : ( t + T ) \left[\mathbf{X}^{(t-S): t}, G\right] \stackrel{f}{\rightarrow} \mathbf{X}^{(t+1):(t+T)} [X(tS):t,G]fX(t+1):(t+T)

3.2 Graph Convolution Layer

Graph Convolution Layer : Z = A ~ X W \mathrm{Z}=\tilde{\mathrm{A}} \mathrm{XW} Z=A~XW

  • 标准化的邻接矩阵 A ~ ∈ R N × N \tilde{\mathbf{A}} \in \mathbf{R}^{N \times N} A
<think>嗯,用户问的是在复现Graph WaveNet模型时,自适应邻接矩阵应该预先下载还是由模型生成。首先,我需要回忆一下Graph WaveNet的结构和相关论文内容。根据引用[3],Graph WaveNet的一个创新点是自适应依赖矩阵,通过节点嵌入学习,而不是使用预定义的图结构。这说明自适应邻接矩阵是模型自己生成的,而不是预先下载的。 接下来,我需要确认引用中的具体描述。引用[2]提到,该模型能够自动从数据中学习隐藏的空间相关性,而引用[3]也指出显式图结构不一定反映真实依赖关系,所以模型需要自己学习。这说明自适应邻接矩阵是模型内部生成的,属于可学习参数的一部分。 用户可能在复现模型时遇到了困惑,不确定是否需要预先准备邻接矩阵,或者让模型自动生成。这时候需要明确区分预定义的邻接矩阵和自适应矩阵的不同。根据论文,自适应矩阵是模型通过节点嵌入生成的,不需要外部数据,所以应该由模型生成。 可能用户担心数据准备的问题,或者担心模型复杂度。需要解释自适应矩阵的生成方式,比如使用源和目标节点的嵌入向量相乘再应用Softmax,这样模型可以动态调整空间依赖关系。此外,可能需要提到训练过程中如何优化这些参数,以及预定义矩阵的作用(如果有的话)。 最后,用户可能想知道具体的实现步骤,比如在PyTorch中如何定义这些嵌入层,以及如何将自适应矩阵与预定义的矩阵结合使用。需要给出示例代码,帮助用户理解实际操作。同时,应该提醒用户,在复现时不需要预先下载自适应矩阵,而是让模型在训练过程中自动学习。</think>在复现Graph WaveNet模型时,**自适应邻接矩阵是由模型自动生成的可学习参数**,而非预先下载的固定结构。这一设计是模型的核心创新点之一,主要解决传统方法依赖预定义图结构的局限性[^3]。 ### 关键实现细节 1. **生成原理** - 通过可学习的源节点嵌入向量$E_s \in \mathbb{R}^{N \times d}$和目标节点嵌入向量$E_t \in \mathbb{R}^{N \times d}$,计算节点间潜在关系: $$ A_{adp} = \text{Softmax}(\text{ReLU}(E_s \cdot E_t^T)) $$ - 其中$d$为嵌入维度,$N$为节点数量 - 最终邻接矩阵是预定义矩阵$A_{pre}$与自适应矩阵$A_{adp}$的加权组合 2. **实现方式(PyTorch示例)** ```python class AdaptiveAdjacency(nn.Module): def __init__(self, node_num, embed_dim): super().__init__() self.E_s = nn.Parameter(torch.randn(node_num, embed_dim)) self.E_t = nn.Parameter(torch.randn(node_num, embed_dim)) def forward(self): return torch.softmax(F.relu(torch.mm(self.E_s, self.E_t.T)), dim=1) ``` 3. **优势对比** | 特性 | 预定义矩阵 | 自适应矩阵 | |--------------------|-------------------|------------------| | 数据依赖 | 需要先验知识 | 从数据中自动学习 | | 动态适应性 | 固定不变 | 随训练过程演化 | | 空间关系表达能力 | 受限于人工定义 | 发现隐藏依赖关系 | | 实现复杂度 | 低(静态加载) | 高(需设计学习机制)| ### 工程实践建议 1. **初始化策略**:建议使用Xavier初始化嵌入向量,避免梯度消失/爆炸 2. **正则化方法**:对自适应矩阵施加L2正则化,防止过拟合 3. **混合使用场景**:当存在部分先验空间关系时,可将$A = A_{pre} + \lambda A_{adp}$结合使用,其中$\lambda$为可调节系数[^2] ### 典型问题定位 若模型出现以下现象,可能需检查自适应矩阵: 1. 预测结果完全忽略空间相关性 → 检查嵌入向量梯度更新 2. 训练损失剧烈震荡 → 降低自适应矩阵学习率 3. 显存溢出 → 减少嵌入维度$d$或采用稀疏化处理
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值