Introduction

PyTorch Geometric Temporal is a temporal graph neural network extension library for PyTorch Geometric.

PyTorch Geometric Temporal 是基于PyTorch Geometric的对时间序列图数据的扩展。

Data Structures: PyTorch Geometric Temporal Signal

定义:在PyTorch Geometric Temporal中,边、边特征、节点被归为图结构Graph,节点特征被归为信号Single,对于特定时间切片或特定时间点的时间序列图数据被称为快照Snapshot。

PyTorch Geometric Temporal定义了数个Temporal Signal Iterators用于时间序列图数据的迭代。

Temporal Signal Iterators数据迭代器的参数是由描述图的各个对象(edge_index,node_feature,...)的列表组成,列表的索引对应各时间节点。

按照图结构的时间序列中的变换部分不同,图结构包括但不限于为以下几种:

  • Static Graph with Temporal Signal

    静态的边和边特征,静态的节点,动态的节点特征
  • Dynamic Graph with Temporal Signal

    动态的边和边特征,动态的节点和节点特征
  • Dynamic Graph with Static Signal

    动态的边和边特征,动态的节点,静态的节点特征

理论上来说,任意描述图结构的对象都可以根据问题定为静态或动态,所有对象都为静态则为传统的GNN问题。

实际上,在PyTorch Geometric Temporal定义的数据迭代器中,静态和动态的差别在于是以数组的列表还是以单一数组的形式输入,以及在输出时是按索引从列表中读取还是重复读取单一数组。

如在StaticGraphTemporalSignal的源码中_get_edge_index _get_features分别为:

# https://pytorch-geometric-temporal.readthedocs.io/en/latest/_modules/torch_geometric_temporal/signal/static_graph_temporal_signal.html#StaticGraphTemporalSignal

def _get_edge_index(self):
if self.edge_index is None:
return self.edge_index
else:
return torch.LongTensor(self.edge_index) def _get_features(self, time_index: int):
if self.features[time_index] is None:
return self.features[time_index]
else:
return torch.FloatTensor(self.features[time_index])

对于Heterogeneous Graph的数据迭代器,其与普通Graph的差异在于对于每个类别建立键值对组成字典,其中的值按静态和动态定为列表或单一数组。

Recurrent Graph Convolutional Layers

Define $\ast_G $ as graph convolution, \(\odot\) as Hadamard product

\[\begin{aligned}
&z = \sigma(W_{xz}\ast_Gx_t+W_{hz}\ast_Gh_{t-1}),\\
&r = \sigma(W_{xr}\ast_Gx_t+W_{hr}\ast_Gh_{t-1}),\\
&\tilde h = \text{tanh}(W_{xh}\ast_Gx_t+W_{hh}\ast_G(r\odot h_{t-1})),\\
&h_t = z \odot h_{t-1} + (1-z) \odot \tilde h
\end{aligned}
\]

From https://arxiv.org/abs/1612.07659

具体的函数实现见 https://pytorch-geometric-temporal.readthedocs.io/en/latest/modules/root.html#

与RNN的比较

\[\begin{aligned}
&z_t = \sigma(W_{xz}x_t+b_{xz}+W_{hz}h_{t-1}+b_{hz}),\\
&r_t = \sigma(W_{xr}x_t+b_{xr}+W_{hr}h_{t-1}+b_{hr}),\\
&\tilde h_t = \text{tanh}(W_{xh}x_t+b_{xh}+r_t(W_{hh}h_{t-1}+b_{hh})),\\
&h_t = z*h_{t-1} + (1-z)*\tilde h
\end{aligned}
\]

From https://pytorch.org/docs/stable/generated/torch.nn.GRU.html#torch.nn.GRU

对于传统GRU的解析 https://zhuanlan.zhihu.com/p/32481747

在普通数据的Recurrent NN中,对于每一条时间序列数据会独立的计算各时间节点会根据上一时间节点计算hidden state。但在时间序列图数据中,每个snapshot被视为一个整体计算Hidden state matrix \(H \in \mathbb{R}^{\text{Num(Nodes)}\times \text{Out_Channels}_H}\) 和Cell state matrix(对于LSTM)\(C \in \mathbb{R}^{\text{Num(Nodes)}\times \text{Out_Channels}_C}\)。

与GCN的比较

相较于传统的Graph Convolution Layer,RGCN将图卷积计算的扩展到RNN各个状态的计算中替代原本的参数矩阵和特征的乘法计算。

最新文章

  1. 【转】jenkins持续集成配置
  2. Netty5 + HTTPS 练习
  3. 筛选DataTable数据的方法
  4. [Tommas] dateadd() 函数用法
  5. 三、Solr多核心及分词器(IK)配置
  6. IOS百度地图语音导航
  7. 使用高通SDK开发AR应用
  8. Spring源码情操陶冶-自定义节点的解析
  9. DOS界面下的翻译软件制作
  10. 非vue-cli的花括号闪现问题
  11. 北大poj- 1007
  12. git从远程分支clone项目到本地,切换分支命令,其他常用命令
  13. uva-10714-贪心
  14. 在linux下安装eclipse以及运行c++程序的安装步骤
  15. Java中 堆 栈,常量池等概念解析(转载)
  16. C#流概述
  17. Entity Framework中的几种加载方式
  18. HTML5 一篇就够的中文教程
  19. enter 键登录的实现
  20. Subsequence(二分)

热门文章

  1. Java代码审计之不安全的Java代码
  2. day41-网络编程03
  3. 腾讯云即时通信 IM 服务 实例项目
  4. 记录一下对jdk8后的接口的一些理解
  5. Kubernetes 多租户:Pod 安全策略
  6. 13. 第十二篇 二进制安装kubelet
  7. C++ 中std::的使用
  8. PAT (Basic Level) Practice 1031 查验身份证 分数 15
  9. 计算机网络(Learning Records)
  10. Tensorflow Lite从入门到精通