【文章】Traffic Flow Forecasting with Spatial-Temporal Graph Diffusion Network
【作者】Zhang X, Huang C, Xu Y, et al.
【来源】AAAI 2021
【代码】https://github.com/jillbetty001/ST-GDN
现存问题
- 大多数研究聚焦于临近区域的近邻空间相关性,忽略了全局地理上下文信息
- 大多数研究无法对具有时间依赖性和多分辨率的复杂流量转移规律进行编码
本文概览
提出名为 Spatial-Temporal Graph Diffusion Network, ST-GDN 的交通流量预测框架,该模型具备特点:
- 能学习到局部 region-wise 空间依赖性
- 能从全局角度表征空间语义信息
- 多尺度 attention 网络能捕获 multi-level 时间动态性
本文方法
Problem Definition
- 将城市分成 I ∗ J I * J I∗J 互不相交区域, r i , j r_{i,j} ri,j 表示一个空间区域
- X ∈ R I × J × T \boldsymbol{X} \in \mathbb{R}^{I \times J \times T} X∈RI×J×T 中每个 x i , j t x_{i,j}^t xi,jt 表示区域 r i , j r_{i,j} ri,j 第 t t t time slot(e.g. hour or day) 的流量。 X α \boldsymbol{X}^{\alpha} Xα 表示入流, X β \boldsymbol{X}^{\beta} Xβ 表示出流。
Methodology
Temporal Hierarchy Modeling
该部分和 ST-ResNet 一样,将时间轴分为 hour, day, week 三部分, T p T_p Tp 表示序列数据的分辨率, x i , j T p \mathbf{x}_{i, j}^{T_{p}} xi,jTp 即表示当前分辨率下的流量序列。该部分在建模上使用 自注意力机制 编码,补充(参考 邱锡鹏,神经网络与深度学习,机械工业出版社,https://nndl.github.io/, 2020.):
假设输入序列为 X = [ x 1 , ⋯ , x N ] ∈ R D x × N \boldsymbol{X}=\left[\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{N}\right] \in \mathbb{R}^{D_{x} \times N} X=[x1,⋯,xN]∈RDx×N,输出序列为 H = [ h 1 , ⋯ , h N ] ∈ R D v × N \boldsymbol{H}=\left[\boldsymbol{h}_{1}, \cdots, \boldsymbol{h}_{N}\right] \in\mathbb{R}^{D_{v} \times N} H=[h1,⋯,hN]∈RDv×N
- 针对每个输入
x
i
x_i
xi,将其线性映射到三个不同空间,映射过程可简写为:
Q
=
W
q
X
∈
R
D
k
×
N
K
=
W
k
X
∈
R
D
k
×
N
V
=
W
v
X
∈
R
D
v
×
N
\begin{array}{l} \boldsymbol{Q}=\boldsymbol{W}_{q} \boldsymbol{X} \in \mathbb{R}^{D_{k} \times N} \\ \boldsymbol{K}=\boldsymbol{W}_{k} \boldsymbol{X} \in \mathbb{R}^{D_{k} \times N} \\ \boldsymbol{V}=\boldsymbol{W}_{v} \boldsymbol{X} \in \mathbb{R}^{D_{v} \times N} \end{array}
Q=WqX∈RDk×NK=WkX∈RDk×NV=WvX∈RDv×N
注意: Q = [ q 1 , ⋯ , q N ] , K = [ k 1 , ⋯ , k N ] , V = [ v 1 , ⋯ , v N ] \boldsymbol{Q}=\left[\boldsymbol{q}_{1}, \cdots, \boldsymbol{q}_{N}\right], \boldsymbol{K}=\left[\boldsymbol{k}_{1}, \cdots, \boldsymbol{k}_{N}\right], \boldsymbol{V}=\left[\boldsymbol{v}_{1}, \cdots, \boldsymbol{v}_{N}\right] Q=[q1,⋯,qN],K=[k1,⋯,kN],V=[v1,⋯,vN] 分别由查询向量、键向量和值向量构成的矩阵。该部分通常使用点积计算注意力得分,查询向量和键向量的维度是相同的 - 利用缩放点积作为注意力打分函数,输出向量可简写为: H = V softmax ( K ⊤ Q D k ) \boldsymbol{H}=\boldsymbol{V} \operatorname{softmax}\left(\frac{\boldsymbol{K}^{\top} \boldsymbol{Q}}{\sqrt{D_{k}}}\right) H=Vsoftmax(DkK⊤Q)(本文字符表示为 Y p Y^p Yp)
Traffic Dependency Learning with Global Context
该部分目的是捕获全局依赖关系,定义区域图 G = ( R , E ) G=(R, E) G=(R,E),其中 R R R 表示区域集合, E E E 表示区域间成对的相关关系。建模方式 (注:这部分很像 GAT):
- 使用多头注意力 h ∈ [ 1 , … , H ] h \in[1, \ldots, H] h∈[1,…,H]
- 图 G G G 融合方式(代表不同区域之间的特征消息传递机制) m ( i , j ) ← ( i ′ , j ′ ) p = ∥ h = 1 H ω ( i , j ) ; ( i ′ , j ′ ) h ⋅ Y p ⋅ W p m_{(i, j) \leftarrow\left(i^{\prime}, j^{\prime}\right)}^{p}=\|_{h=1}^{H} \omega_{(i, j) ;\left(i^{\prime}, j^{\prime}\right)}^{h} \cdot \mathbf{Y}^{p} \cdot \mathbf{W}^{p} m(i,j)←(i′,j′)p=∥h=1Hω(i,j);(i′,j′)h⋅Yp⋅Wp,其中 Y p Y^p Yp 是刚刚自注意力求出来的隐藏层表示, W p W^p Wp 是参数, ω ( i , j ) ; ( i ′ , j ′ ) h = exp ( L R ( α T [ y ~ i , j p ∥ y ~ i ′ , j ′ p ] ) ) ∑ ( i ′ , j ′ ) ∈ N ( i , j ) exp ( L R ( α T [ y ~ i , j p ∥ y ~ i ′ , j ′ p ] ) ) \omega_{(i, j) ;\left(i^{\prime}, j^{\prime}\right)}^{h}=\frac{\exp \left(L R\left(\boldsymbol{\alpha}^{T}\left[\widetilde{\mathbf{y}}_{i, j}^{p} \| \widetilde{\mathbf{y}}_{i^{\prime}, j^{\prime}}^{p}\right]\right)\right)}{\sum_{\left(i^{\prime}, j^{\prime}\right) \in \mathcal{N}(i, j)} \exp \left(L R\left(\boldsymbol{\alpha}^{T}\left[\widetilde{\mathbf{y}}_{i, j}^{p} \| \widetilde{\mathbf{y}}_{i^{\prime}, j^{\prime}}^{p}\right]\right)\right)} ω(i,j);(i′,j′)h=∑(i′,j′)∈N(i,j)exp(LR(αT[y i,jp∥y i′,j′p]))exp(LR(αT[y i,jp∥y i′,j′p])) 用于表示潜在 the underlying attentive relevance (并不知道咋翻译…),其中 y ~ i ′ , j ′ p = y i ′ , j ′ p ⋅ W p \widetilde{\mathbf{y}}_{i^{\prime}, j^{\prime}}^{p}=\mathbf{y}_{i^{\prime}, j^{\prime}}^{p} \cdot \mathbf{W}^{p} y i′,j′p=yi′,j′p⋅Wp。
- the aggregated feature embedding of 区域 r i , j r_{i,j} ri,j 表示为 z i , j p = f ( ∑ r i ′ , j ′ ∈ N i , j m ( i , j ) ← ( i ′ , j ′ ) p ) \mathbf{z}_{i, j}^{p}=f\left(\sum_{r_{i^{\prime}, j^{\prime} }\in \mathcal{N}_{i, j}} m_{(i, j) \leftarrow\left(i^{\prime}, j^{\prime}\right)}^{p}\right) zi,jp=f(∑ri′,j′∈Ni,jm(i,j)←(i′,j′)p)
- 高阶信息传递(从第 l l l 层传到第 l + 1 l+1 l+1 层) z i , j p , ( l + 1 ) ← Aggregate i ∈ N u ( j ) ; j ′ ∈ N v ( j ) ( \mathbf{z}_{i, j}^{p,(l+1)} \leftarrow \underset{i \in N_{u}(j) ; j^{\prime} \in N_{v}(j)}{\text { Aggregate }}\left(\right. zi,jp,(l+1)←i∈Nu(j);j′∈Nv(j) Aggregate ( Propagate ( z i , j p , ( l ) , G ) ) \left.\left(\mathbf{z}_{i, j}^{p,(l)}, G\right)\right) (zi,jp,(l),G))
- 全局表征 z i , j p = z i , j p , ( l ) ⊕ … ⊕ z i , j p , ( L ) \mathbf{z}_{i, j}^{p}=\mathbf{z}_{i, j}^{p,(l)} \oplus \ldots \oplus \mathbf{z}_{i, j}^{p,(L)} zi,jp=zi,jp,(l)⊕…⊕zi,jp,(L)
Region-wise Relation Learning with Graph Diffusion Paradigm
该部分利用图扩散网络对区域间的空间关系建模。先看公式: f ( z i , j p ) Θ = ∑ k = 0 K − 1 ( θ k , 1 ( D o − 1 A ) k + θ k , 2 ( D i − 1 A ⊤ ) k ) z i , j p f\left(\mathbf{z}_{i, j}^{p}\right)_{\Theta}=\sum_{k=0}^{K-1}\left(\theta_{k, 1}\left(D_{o}^{-1} \mathbf{A}\right)^{k}+\theta_{k, 2}\left(D_{i}^{-1} \mathbf{A}^{\top}\right)^{k}\right) \mathbf{z}_{i, j}^{p} f(zi,jp)Θ=k=0∑K−1(θk,1(Do−1A)k+θk,2(Di−1A⊤)k)zi,jp
- K K K 表示扩散阶数,即当前区域在计算时和 K K K 阶邻居建立了关系
- θ k , 1 , θ k , 2 ∈ R K × 2 \theta_{k, 1}, \theta_{k, 2} \in \mathbb{R}^{K \times 2} θk,1,θk,2∈RK×2 是参数
- A A A 根据顶点距离计算出的加权邻接矩阵, D o = A ⋅ I D_o = A·I Do=A⋅I 表示出度对角矩阵
diffusion convolutional layer 的输出为:
Λ
q
p
=
Leaky
ReLU
(
∑
d
′
=
1
d
f
(
Z
d
′
p
)
Θ
q
,
d
′
)
\mathbf{\Lambda}_{q}^{p}=\operatorname{Leaky} \operatorname{ReLU} \left(\sum_{d^{\prime}=1}^{d} f\left(\mathbf{Z}_{d^{\prime}}^{p}\right)_{\Theta_{q, d^{\prime}}}\right)
Λqp=LeakyReLU(∑d′=1df(Zd′p)Θq,d′)
融合多粒度交通模式的表征为:
Evaluation
略
思考
看这篇文章时首先被复杂模型图震住了,边看边想为什么要这样设置各个模块,简单理一下:
- Temporal Hierarchy Modeling 部分是个 self-attention,目的是将weekly、daily、hourly 三类时序数据映射到相同空间表示中
- Traffic Dependency Learning with Global Context 部分使用了多头注意力机制,用于进行全局表征。有个问题,这里的每个多头注意力,都是在当前类型时间序列数据下做的,能算得上全局吗,不太明白。而且conclusion部分又说是“ local spatial contextual information” 实在是太让人迷惑了…$^&&!&#@&
- Region-wise Relation Learning with Graph Diffusion Paradigm 部分使用扩散卷积,这里是基于之前的注意力编码的结果继续表征,这真的可以吗。
总之,是个没看明白的文章。代码也没看明白(attention部分代码和STDN)这篇文章的代码一毛一样,但是这篇文章除了简单self-attention之外,你还有个多头注意力阿…而且里面还做了修改,代码是咋体现的。迷惑。