MTGNN论文解读

news/2025/2/6 22:28:34/

模型架构

        MTGNN 由多个模块组合而成,目标是捕捉多变量时间序列中的空间(变量间)和时间(时序)依赖。

  • 图学习层:用于自适应地学习图的邻接矩阵,发现变量之间的关系。
  • 图卷积模块:根据邻接矩阵处理节点间的空间依赖。
  • 时间卷积模块:通过时间轴上的卷积提取时序特征。
  • 输出模块:将中间结果转换为最终预测结果。

1  图学习层 (Graph Learning Layer)

        图学习层通过数据自适应地学习邻接矩阵,以捕捉时间序列数据中的隐藏关系。传统方法使用相似性度量(如点积或欧几里得距离)来构造图,但这种方式导致 O(N²) 的计算复杂度,限制了对大图的处理能力。

        而作者采用采样策略,每次仅计算部分节点的关系,从而降低计算和内存成本。此外,传统方法生成的邻接矩阵是对称的(即 A[i,j]=A[j,i]),表示节点之间的关系是双向的。但时间序列中的依赖关系可能是单向的(例如,一条道路的拥堵可能会影响下游道路,但反过来未必成立)。通过如下公式即可确保邻接矩阵是单向的。

        上述公式中, M₁ 和 M₂ 为节点嵌入矩阵,α 是用于控制激活函数饱和率的超参数。M_{1}[i]M_{2}[j]^T表示道路 i 的流量对道路 j 流量的影响,M_{2}[j]M_{1}[i]^T表示道路 j 的流量对道路 i 流量的影响。如果M_{1}[i]M_{2}[j]^T-M_{2}[j]M_{1}[i]^T的值为正,则表示道路 i 对道路 j 的影响强于道路 j 对道路 i 的影响。如果结果为负,Relu 激活函数会将负值截断为 0,保留单向依赖关系的非负部分。

        其次,通过保留每个节点的前 k 个邻居,并将其他权重置为 0,可以进一步降低复杂度。

2 图卷积模块 (Graph Convolution Module)

        传统图卷积网络的一个严重限制是,随着图卷积层数趋于无穷,相邻节点的特征会逐渐融合,节点隐藏状态会收敛到一个单点。这是因为具有许多层的图卷积网络会达到随机游走的极限分布,而与初始节点状态无关,这就产生了过平滑问题(over-smoothing problem)。为解决这个问题,作者在传播过程中保留一定比例的节点原始状态,以便传播的节点状态既能保留局部性又能探索深层邻域。

        具体来说,作者设计的图卷积模块通过 Mix-hop 传播层融合节点和邻居的信息,以处理图中的空间依赖性。Mix-hop 传播层包括两部分:信息传播和信息选择。

  • 信息传播:保留一部分节点自身状态(通过 \beta 调节),同时以递归方式沿图结构传播邻居的信息。
  • 信息选择:通过线性变换筛选重要的节点特征,防止无用信息累积(通过 W^{(k)} 训练学习各层传播特征的权重)。

3 时间卷积模块 (Temporal Convolution Module)

        时间卷积模块由两个膨胀卷积层组成。一个膨胀卷积层后接 tanh 激活函数,用作过滤器;另一个膨胀卷积层后接 sigmoid 激活函数,用作门控控制。

        卷积核设置的大小一直是 CNN 的一个难题。太大会无法精细地表示短期信号模式,或者太小无法充分发现长期信号模式。因此,作者借鉴了图像处理中的 inception。由于时间信号往往具有几个固有周期,如 7、12、24、28 和 60,具有 1×1、1×3 和 1×5 滤波器尺寸的 inception 层堆叠不能很好地涵盖这些周期(太小)。因此,作者提出了一个由四个滤波器尺寸(即 1×2、1×3、1×6 和 1×7)组成的时间 inception 层。

        为了处理非常长的序列,作者采用了膨胀因果卷积。与上面结合形成扩张 inception 层。

4 学习算法 (Learning Algorithm)

        Chiang 等人应用图聚类算法将图划分为子图,并在划分后的子图上训练图卷积网络,以此来解决内存瓶颈问题。但是作者的模型训练的同时也在学习潜在的图结构,因此模型不能提前对图结构进行聚类。

        那么该如何修改?在每次迭代时,随机把节点分成若干组,基于采样节点学习子图结构,每组节点相互独立学习,训练结束后构建全局图。


http://www.ppmy.cn/news/1569916.html

相关文章

ES6-代码编程风格(数组、函数)

1 数组 使用扩展运算符(...)复制数组。 const itemsCopy [...items]; 使用Array.from 方法将类似数组的对象转为数组。 const foo document.querySelectorAll(.foo); const nodes Array.from(foo); 2 函数 立即执行函数可以写成箭头函数的形式…

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群 简介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群 1 环境准备1.1 集群IP规划1.2 初始化步骤(各个节点都需执行)1.2.1 主机名与IP地址解析1.…

Android 使用ExpandableListView时,需要注意哪些细节

1. 布局属性设置 尺寸属性 宽度和高度:要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent,它会填满父容器;设置为 wrap_content,则会根据内容自动调整大小。例如,若想让 Exp…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型:中间结果的处理4.5 方案验证,首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

【多线程】线程池核心数到底如何配置?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…

Python | Pytorch | 什么是 Inplace Operation(就地操作)?

如是我闻: 在 PyTorch 中,Inplace Operation(就地操作)是指直接修改 Tensor 本身,而不是创建新的 Tensor 的操作。PyTorch 中的 Inplace 操作通常会在函数名后加上 _ 作为后缀,例如: tensor.ad…

车载以太网__传输层

车载以太网中,传输层和实际用的互联网相差无几。本篇文章对传输层中的IP进行介绍 目录 什么是IP? IP和MAC的关系 IP地址分类 私有IP NAT DHCP 为什么要防火墙穿透? 广播 本地广播 直接广播 本地广播VS直接广播 组播 …

vue2-给data动态添加属性

vue2-给data动态添加属性 1. 问题的来源 在VUe2中(VUE3中使用了proxy,及时动态添加也能实现响应式),如果我们动态给data添加一个属性,会发现视图没有同步更新举个例子我们通过v-for遍历data中的一个属性list&#xf…