ASTGNN:transformer攻入城市计算时空图网络
-
Agent的潜意识
2022-01-16 23:41:30
-
数据库开发技术
-
原创
时空城市计算的业务问题是这样的:城市中的交通流量,人流量,地铁乘客量这些峰值预估对城市治理很有帮助。包括道路的规划,地铁线路的开拔等等。这是一个天然的图网络,这张图网络呢,从人流量来说,每个时间节点都有人流量值,他是一个序列数据,因而需要用到时间维度的图卷积;从道路连通性来说,图上的节点之间有连线意味着他们的物理世界中有道路,但道路有远近有大小,因而需要空间维度的图卷积。这就是目前解决城市计算的经典做法:时空图网络。 最近在做图算法。有一个21年综述文章,把时下最流行的时空图网络来做城市计算的算法用pytorch geometirc重写了一遍。很有意思的(见附录2)。在这个基础上,我跟同事合计了一下,如果从问题的响应变量的角度来看,我们要预测的就是一个节点上,接下来n个时间片,他的流量是多少,这是一个序列数据,天然具有自回归特性,白话一点讲就是第n个时间片的流量和1到n-1过去时刻的流量强相关。因此适合用transformer搞;从时空特性来说,时空这一特点可以当做transformer的position encoding的模块run进模型。Idea一定,我在ASTGCN(附录3、4)的基础上,重构了一把代码,发现效果还真不错。准备按这路子投篇论文出去了。结果当天一摸,发现这个idea已经有论文被发了。 细看一下,文章做的还不错。这两天把它全摸明白了。整理一下,对自己也是一个加深理解。 论文:Learning Dynamics and Heterogeneity of Spatial-Temporal Graph Datafor Traffic Forecasting接下来我们直接从模型入手吧。先整揽整个pipeline,然后再搞点细节吧。
整个架构跟经典的transformer是一样的。区别在三个地方:从输入到输出开始算,1)position embedding他有两个,时空两个维度。2)多头注意力机制模块他重构成了自己的Tr-multihead-SelfAttention.3)Feed-forward模块被替换成了动态空间图卷积。 先讲最核心的Tr-multihead-SelfAttention。他这个模块的直观效果如下:
左边是传统自注意力机制学到的效果,只要是个波峰就认为是相似的;他重构的模块呢,可以学习一个区间的趋势变动情况,从而把B和C这种走势图相似的点找出来。
代码在上面,第一个块是做了一个卷积操作,第二块是一个concat。第三个就是算注意力机制。 其实就是把趋势算出来。这里做卷积网络大伙可能不太理解。其实他就是一个1D卷积。我把它打印出来了,一个1*3的卷积核。其实说白了就是一个12维的向量,3个3个一组来求趋势。
1、 PyTorchGeometric Temporal: Spatiotemporal Signal Processing with Neural MachineLearning Models (CIKM 2021) 2、 https://github.com/benedekrozemberczki/pytorch_geometric_temporal3、Attention Based Spatial-Temporal GraphConvolutional Networks for Traffic Flow Forecasting, AAAI 20194、 https://github.com/Davidham3/ASTGCN