首页 > 其他分享 >学习笔记:TPGNN

学习笔记:TPGNN

时间:2023-10-15 11:15:36浏览次数:42  
标签:mathbb mathbf self 笔记 times 学习 dec ldots TPGNN

Multivariate Time-Series Forecasting with Temporal Polynomial Graph Neural Networks
利用时间多项式图神经网络的多时间序列预测
期刊:NIPS2022
作者:Yijing LiuQinxian LiuJian-Wei ZhangHaozhe FengZhongwei WangZihan ZhouWei Chen
论文:https://openreview.net/forum?id=pMumil2EJh
代码:https://github.com/zyplanet/TPGNN

!> 学长指出,这篇论文的实验结果并不好(虽然我是因为觉得实验结果好才看的这篇论文,看来还需要找找最先进的论文看看才行啊)

TPGNN模型图(感觉这图画得不怎么样)

复现

GPU: TITAN V
dataset: STSGCN中的PEMS数据集

数据集 节点数量 MAE RMSE MAPE epoch 时间消耗(h)
PEMS03 358 13.93 21.31 11.50 800 13h10min
PEMS04 307 19.26 30.12 12.13 1000 14h50min
PEMS07 883 21.23 33.18 8.64 600 28h
PEMS08 170 15.62 24.28 8.67 1000 7h50min

模型

问题定义

\[已知数据\quad \mathcal{G}^{(t)}=\{\mathcal{V},\mathcal{E}^{(t)},\mathbf{X}^{(t)},\mathbf{W}^{(t)}\} \]

\[模型目标\quad (\mathcal{G}^{(t)}, \mathcal{G}^{(t+1)}, \ldots, \mathcal{G}^{(t+T-1)}) \xrightarrow{F} \mathbf{X}^{(t+T)}, \mathbf{X}^{(t+T+1)}, \ldots,\mathbf{X}^{(t+T+T'-1)} \]

把相关性表示为时间多项式矩阵

有道路连接矩阵 \(W\in\mathbb R^{N\times N}\),和可学习的节点嵌入矩阵 \(E\in\mathbb R^{N\times c}\),利用这两个,我们可以得到一个基础矩阵\(A\in\mathbb R^{N\times N}\):

\[\mathbf{A}=\operatorname{SoftMax}(\operatorname{ReLU}(\mathbf{EE^T}))+\mathbf L \]

其中\(L\)是对称归一化拉普拉斯矩阵\(L=D^{-\frac{1}{2}}(I+W)D^{-\frac{1}{2}}\)。因此,\(A\)是具有一定学习能力,并且受道路连接情况作用的矩阵。利用它,我们这样定义\(t\)时刻的节点相关性:(这里就已经用到了图卷积的方法)

\[\mathbf{W}^{(t)}=\sum_{k=0}^Ka_k^{(t)}\mathbf{A}^k \]

时间序列太长,全部计算效率太低。考虑到交通数据的周期性,设周期为\(T_p\),我们用如下方式计算系数\(a\)(表示为\(\mathbf{\bar a}\in\mathbb R^K\)):(在代码中,\(T_p\)为一天的时间戳数量)

\[(\mathbf{a}^{(t)},\ldots,\mathbf{a}^{(t+T-1)})=(\mathbf{e}_{ts}^{(t\%T_p)},\ldots,\mathbf{e}_{ts}^{((t+T-1)\%T_p)})\mathbf{W}_c \]

\[\mathbf{\bar{a}}=(\bar{a}_0,\bar{a}_1,\ldots,\bar{a}_K)=(\mathbf{a}^{(t)},\ldots,\mathbf{a}^{(t+T-1)})\mathbf{W}_a \]

其中,时间戳嵌入为\((\mathbf{e}_{ts}^{(1)},\ldots,\mathbf{e}_{ts}^{(T_p)})\in\mathbb{R}^{D_e}\),另外两个可学习系数矩阵为\(\mathbf{W}_c\in\mathbb{R}^{D_e\times(K+1)}\)和\(\mathbf{W}_a\in\mathbb{R}^{T\times1}\)。然后,通过以下方式计算\(t\)时刻的内在特征:

\[\mathbf{Z}^{(t)}=\Sigma_{k=0}^K\bar{a}_k\mathbf{A}^k\mathbf{X'}^{(t)}\frac{\mathbf{W}_k}{||\mathbf{W}_k||_F} \]

其中\(\mathbf{W}_k\)是可学习系数矩阵,为了避免太大而进行了归一化;\(\mathbf {X'}^{(t)}\in\mathbb R^{N\times D_e}\)是原始数据通过一些处理得到的,暂且表示为\(\mathbf {X'}=SrcProcess(\mathbf X)\),因为不是重点,之后再说。

利用解码器预测

依据上述流程,前\(T\)个时间戳的数据,可以表示为\(\mathbf{Z}^{(t:t+T-1)}\in\mathbb{R}^{T\times N\times D_e}\)。预测的过程参考了Transformer框架,使用了自注意力机制。先预测第一个时间戳的数据:

\[\begin{gathered}\mathbf{E}_X^{(t+T)}=\text{Decoder}(\mathbf{E}_{\mathbf{BOS}},\mathbf{Z}^{(t:t+T-1)}),\\\tilde{\mathbf{X}}^{(t+T)}=\mathbf{E}_X^{(t+T)}\mathbf{W}_{pred},\end{gathered} \]

之后,就利用已经预测出来的数据接着预测。假如说已经预测了\(k\)步,那么第\(k+1\)步就是这样获得的:

\[\begin{gathered}\mathbf{E}_X^{(t+T+k)}=\text{Decoder}((\mathbf{E}_X^{(t+T+k-L_{max})},\ldots,\mathbf{E}_X^{(t+T+k-1)}),\mathbf{Z}),\\\tilde{\mathbf{X}}^{(t+T+k)}=\mathbf{E}_X^{(t+T+k)}\mathbf{W}_{pred}.\end{gathered} \]

\(L_{max}\)是查询的长度(但我没找到相应代码)。

代码实现

一些函数的实现流程

预测的流程

  1. dec_input = trg_pro(E, Z)
  2. dec_output = decoder(dec_input, Z)
  3. dec_output = dec_rdu(dec_output)(一个卷积,作用是将Nxe变为Nx1)
  4. E[i]=dec_output[i]

decoder的实现
多个decoder层:

  • 一个(多头)自注意力,\(q=E, k=v=Z\)
  • 一个位置逐元素前馈(position-wise feed-forward)结构( #不解 这是什么东西)

src_pro的实现

  1. 将特征数(为1)映射成多个隐藏特征
  2. 加上空间嵌入
  3. 加上时间嵌入

trg_pro的实现

  1. 将Z的时间长度映射成1
  2. 将E的特征数(为1)映射成多个隐藏特征
  3. 加上空间嵌入
  4. 将Z和E合并
  5. 加上时间嵌入

位置逐元素前馈的实现

因为没见过,所以记录一下

class PositionwiseFeedForward(nn.Module):
    '''
    A two-feed-forward-layer module
    '''
    def __init__(self, d_in, d_hid, drop_prob=0):
        super().__init__()
        self.w_1 = nn.Linear(d_in, d_hid)  # position-wise
        self.w_2 = nn.Linear(d_hid, d_in)  # position-wise
        self.layer_norm = nn.LayerNorm(d_in, eps=1e-6)
        self.dropout = nn.Dropout(drop_prob)
    def forward(self, x):
        residual = x
        x = self.w_2(F.relu(self.w_1(x)))
        x = self.dropout(x)
        x += residual
        x = self.layer_norm(x)
        return x

小结

可以借鉴的地方:

  1. L+A的结构
  2. 周期的利用

标签:mathbb,mathbf,self,笔记,times,学习,dec,ldots,TPGNN
From: https://www.cnblogs.com/white514/p/17765375.html

相关文章

  • 第十一章学习笔记
    EX2文件系统数据结构EXT2文件系统TheSecondExtendedFileSystem(ext2)文件系统是linux系统中的标准文件系统。多年来,Linux一直使用EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,它将文件系统的变更记录在日志中。日志可###在文件系统崩溃时......
  • java学习笔记day03
    java学习笔记day03数据类型public class 数据类型 {  public static void main(String[] args){    //整数类型    byte num1 = 10;    short num2 = 200;    int num3 = 3000;    long num4 = 400000L;    ......
  • 学习笔记5
    第十一章EXT2文件系统创建虚拟磁盘mke2fs[-bblksize-Nninodes]devicenblocks虚拟磁盘布局Block#0:引导块B0是引导块,文件系统不使用超级块Block#1超级块B1是超级块,用于容纳整个文件系统的信息超级块的重要字段u32s_inodes_count://文件系统中节点总数......
  • 深度学习模型在基因组选择中的预测能力(统计、总结)
    Gianolaetal.[61]:应用:基因组选择。比较:多层感知器(MLP)与贝叶斯线性回归(BRR)。结果:在小麦数据集中,随着隐藏层神经元数量的增加,MLP的预测能力提高。MLP对BRR的性能提高了11.2%至18.6%。在Jersey数据集中,MLP也超越了BRR,特别是在脂肪产量、牛奶产量和蛋白产量上。Pérez-R......
  • 《信息安全系统设计与实现》第六周学习笔记
    《信息安全系统设计与实现》第六周学习笔记第十一章EXT2文件系统EXT2文件系统EXT2第二代扩展文件系统(英语:secondextendedfilesystem,缩写为ext2),是LINUX内核所用的文件系统。它开始由RémyCard设计,用以代替ext,于1993年1月加入linux核心支持之中。EX2文件系统数据结构......
  • 深度学习不如GBLUP的原因
    深度学习,尤其是最近几年,被广泛宣传为可以处理复杂问题的强大工具。然而,我们必须理解,在某些特定的问题或数据集上,传统的方法有时可能更适合或更稳定。以下是一些可能解释为什么在考虑G×E交互效应时,深度学习没有表现得像GBLUP模型那么好的原因:数据量和复杂性:深度学习模型,特别是......
  • 2023-2024-1 20231312 《计算机基础与程序设计》第三周学习总结
    作业信息|这个作业属于哪个课程|<班级的链接>2023-2024-1-计算机基础与程序设计|||----这个作业要求在哪里|---<作业要求链接>2023-2024-1计算机基础与程序设计第一周作业-|----||这个作业的目标|《计算机基础概论》第2,3章《C语言......
  • 学习BASE64编码
    什么是BASE64编码Base64是一种基于64个可打印字符来表示二进制数据的表示方法。BASE64解决什么问题Base64常用于在处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。原因:一个字节可表示的范围是0~255,其中ASCII值的范围......
  • 学习笔记5
    11章教材知识点EXT2概述:EXT2是一种磁盘文件系统,用于存储和组织文件和目录。支持文件和目录的权限、链接、文件系统的挂载和卸载等功能。使用磁盘上的数据结构来组织文件和目录的存储。EXT2数据结构:虚拟磁盘:通过mkfs命令创建的EXT2文件系统。虚拟磁盘布局:由超级块、......
  • 《信息安全系统设计与实现》学习笔记5
    第十一章EXT2文件系统EXT2文件系统数据结构通过mkfs创建虚拟磁盘mke2fs[-bblksize-Nninodes]devicenblocks虚拟磁盘布局Block#0:引导块。用来容纳一个引导程序,从磁盘引导操作系统。超级块Block#1:超级块。用于容纳整个文件系统的信息。超级块结构中的一些重要字......