本系列是整理关于用图神经网络(特别是图卷积)来建模时序图数据的论文。
这篇文章发表于ICLR 2017,是比较早的一篇对结构数据进行序列学习的文章。
目前很多研究将CNN和RNN融合来用于时空序列建模,但这些方法仅能用于欧式数据。
本文提出了GCRN(Graph Convolutional Recurrent Network),将经典的RNN(Recurrent Neural Network)泛化到到结构化的数据处理。这篇文章的目的是多步预测,作者称为序列建模:
x ^ t + 1 , … , x ^ t + K = arg max x t + 1 , … , x t + K P ( x t + 1 , … , x t + K ∣ x t − J + 1 , … , x t ) \hat{x}_{t+1}, \ldots, \hat{x}_{t+K}=\arg \max _{x_{t+1}, \ldots, x_{t+K}} P\left(x_{t+1}, \ldots, x_{t+K} \mid x_{t-J+1}, \ldots, x_{t}\right) x^t+1,…,x^t+K=argxt+1,…,xt+KmaxP(xt+1,…,xt+K∣xt−J+1,…,xt)针对的数据是图结构不发生改变的无向带权同构图序列。
作者提出了两种GCRN结构,一是对每个序列先进行图卷积处理再将卷积之后的结果输入LSTM;二是将FC-LSTM中的2D卷积替换成图卷积。
x t C N N = C N N G ( x t ) i = σ ( W x i x t C N N + W h i h t − 1 + w c i ⊙ c t − 1 + b i ) f = σ ( W x f x t C N N + W h f h t − 1 + w c f ⊙ c t − 1 + b f ) c t = f t ⊙ c t − 1 + i t ⊙ tanh ( W x c x t C N N + W h c h t − 1 + b c ) o = σ ( W x o x t C N N + W h o h t − 1 + w c o ⊙ c t + b o ) h t = o ⊙ tanh ( c t ) \begin{aligned} x_{t}^{\mathrm{CNN}} &=\mathrm{CNN}_{\mathcal{G}}\left(x_{t}\right) \\ i &=\sigma\left(W_{x i} x_{t}^{\mathrm{CNN}}+W_{h i} h_{t-1}+w_{c i} \odot c_{t-1}+b_{i}\right) \\ f &=\sigma\left(W_{x f} x_{t}^{\mathrm{CNN}}+W_{h f} h_{t-1}+w_{c f} \odot c_{t-1}+b_{f}\right) \\ c_{t} &=f_{t} \odot c_{t-1}+i_{t} \odot \tanh \left(W_{x c} x_{t}^{\mathrm{CNN}}+W_{h c} h_{t-1}+b_{c}\right) \\ o &=\sigma\left(W_{x o} x_{t}^{\mathrm{CNN}}+W_{h o} h_{t-1}+w_{c o} \odot c_{t}+b_{o}\right) \\ h_{t} &=o \odot \tanh \left(c_{t}\right) \end{aligned} xtCNNifctoht=CNNG(xt)=σ(WxixtCNN+Whiht−1+wci⊙ct−1+bi)=σ(WxfxtCNN+Whfht−1+wcf⊙ct−1+bf)=ft⊙ct−1+it⊙tanh(WxcxtCNN+Whcht−1+bc)=σ(WxoxtCNN+Whoht−1+wco⊙ct+bo)=o⊙tanh(ct)
i = σ ( W x i ∗ G x t + W h i ∗ G h t − 1 + w c i ⊙ c t − 1 + b i ) f = σ ( W x f ∗ G x t + W h f ∗ G h t − 1 + w c f ⊙ c t − 1 + b f ) c t = f t ⊙ c t − 1 + i t ⊙ tanh ( W x c ∗ G x t + W h c ∗ G h t − 1 + b c ) o = σ ( W x o ∗ G x t + W h o ∗ G h t − 1 + w c o ⊙ c t + b o ) h t = o ⊙ tanh ( c t ) \begin{aligned} i &=\sigma\left(W_{x i} *_{\mathcal{G}} x_{t}+W_{h i} *_{\mathcal{G}} h_{t-1}+w_{c i} \odot c_{t-1}+b_{i}\right) \\ f &=\sigma\left(W_{x f} *_{\mathcal{G}} x_{t}+W_{h f} *_{\mathcal{G}} h_{t-1}+w_{c f} \odot c_{t-1}+b_{f}\right) \\ c_{t} &=f_{t} \odot c_{t-1}+i_{t} \odot \tanh \left(W_{x c} *_{\mathcal{G}} x_{t}+W_{h c} *_{\mathcal{G}} h_{t-1}+b_{c}\right) \\ o &=\sigma\left(W_{x o} *_{\mathcal{G}} x_{t}+W_{h o} *_{\mathcal{G}} h_{t-1}+w_{c o} \odot c_{t}+b_{o}\right) \\ h_{t} &=o \odot \tanh \left(c_{t}\right) \end{aligned} ifctoht=σ(Wxi∗Gxt+Whi∗Ght−1+wci⊙ct−1+bi)=σ(Wxf∗Gxt+Whf∗Ght−1+wcf⊙ct−1+bf)=ft⊙ct−1+it⊙tanh(Wxc∗Gxt+Whc∗Ght−1+bc)=σ(Wxo∗Gxt+Who∗Ght−1+wco⊙ct+bo)=o⊙tanh(ct)
这两个模型框架不一定局限于LSTM,同样可以应用到任何循环神经网络如GRU。
作者将这两个模型分别应用于预测任务(moving-MNIST dataset)和自然语言建模,并且得出结果Model1的效果比Model2的效果好,原因作者认为可能是Model2中快速增长的维度,隐藏层的维度从200增加到10000。
作者进行的实验都是将欧式数据(如图像、文本)转换为图结构的数据,这样的转换本身就存在信息丢失吧(本人观点)。
这篇文章发表于ICML 2017,它主要是为了解决动态变化的知识图谱的表示学习。提出了点过程(point process)的概念,虽然好像和图卷积没有什么关系,但该作者后续在ICLR 2019又发表了一篇基于点过程的动态图学习模型。
传统的知识图谱都被认为是静态图,但现在的数据呈现出复杂的时间动态,因而传统的知识图谱应该被增强为时序知识图谱(TKG)。
本模型针对的数据是图结构发生改变的有向带权异构图序列。
作者认为,时间点过程可以看成是一个计数过程 N ( t ) N(t) N(t),表示在 t t t时刻前事件发生的次数。描述时间点过程可以用密度函数 λ ( t ) \lambda(t) λ(t),表示在之前的事件发生的条件下,当前时刻发生事件的可能性。作者将事件的发生就用密度函数来进行建模。
TKG的一次事件被记为 ( e s , r , e o , t ) (e^s,r,e^o,t) (es,r,eo,t),该四元组表示在 t t t时刻主体节点 e s e^s es和客体节点 e o e^o eo之间创建了一个类型为 r r r的边连接。事件按时间排序构成一个观察事件集 D D D。
对于一次事件,其密度函数计算为:
λ r e s , e o ( t ∣ t ‾ ) = f ( g r e s , e o ( t ‾ ) ) ∗ ( t − t ‾ ) \lambda^{e^s,e^o}_r(t|\overline t)=f(g_r^{e^s,e^o}(\overline t))*(t-\overline t) λres,eo(t∣t)=f(gres,eo(t))∗(t−t)其中,
g r e s , e o ( t ) = v e s ( t − ) T ⋅ R r ⋅ v e o ( t − ) g_r^{e^s,e^o}(t)=v^{e^s}(t-)^T·R_r·v^{e^o}(t-) gres,eo(t)=ves(t−)T⋅Rr⋅veo(t−)
g g g函数是用于计算主体节点和客体节点之间的相对兼容性,作为评分函数, v e s v^{e^s} ves表示节点的嵌入。 λ r e s , e o ( t ∣ t ‾ ) \lambda^{e^s,e^o}_r(t|\overline t) λres,eo(t∣t)表示在主体或客体在 t ‾ \overline t t时刻发生事件的条件下,本次事件 ( e s , r , e o , t ) (e^s,r,e^o,t) (es,r,eo,t)发生的强度。
主体嵌入更新:
v e s ( t p ) = σ ( W t s ( t p − t p − 1 ) + W h h ⋅ h e s ( t p − ) ) h e s ( t p − ) = σ ( W h ⋅ [ v e s ( t p − 1 ) ⊕ v e o ( t p − ) ⊕ r p − 1 e s ] ) v^{e^s}(t_p)=\sigma(W^s_t(t_p-t_{p-1})+W^{hh}·h^{e^s}(t_p-))\\ h^{e^s}(t_p-)=\sigma(W^h·[v^{e^s}(t_{p-1})\oplus v^{e^o}(t_p-)\oplus r^{e^s}_{p-1}]) ves(tp)=σ(Wts(tp−tp−1)+Whh⋅hes(tp−))hes(tp−)=σ(Wh⋅[ves(tp−1)⊕veo(tp−)⊕rp−1es])客体嵌入更新:
v e o ( t q ) = σ ( W t s ( t q − t q − 1 ) + W h h ⋅ h e o ( t q − ) ) h e o ( t q − ) = σ ( W h ⋅ [ v e o ( t q − 1 ) ⊕ v e o ( t q − ) ⊕ r q − 1 e o ] ) v^{e^o}(t_q)=\sigma(W^s_t(t_q-t_{q-1})+W^{hh}·h^{e^o}(t_q-))\\ h^{e^o}(t_q-)=\sigma(W^h·[v^{e^o}(t_{q-1})\oplus v^{e^o}(t_q-)\oplus r^{e^o}_{q-1}]) veo(tq)=σ(Wts(tq−tq−1)+Whh⋅heo(tq−))heo(tq−)=σ(Wh⋅[veo(tq−1)⊕veo(tq−)⊕rq−1eo])
注:这里面有多个时间表示需要区分, t − t- t−、 t − 1 t-1 t−1、 t ‾ \overline{t} t分别表示什么?
假设 t p t_p tp是节点 e s e^s es参与的本次事件的时间(当前事件是e^s的第p个事件)
t p − 1 t_{p-1} tp−1:表示 e s e^s es参与的上一个事件的时间;
t p − t_p- tp−:表示在 t p t_p tp时刻前,最近一个时刻;
t p ‾ \overline{t_p} tp: = m a x ( t e s − , t e o − ) =max(t^{e^s}-,t^{e^o}-) =max(tes−,teo−),表示 e s e^s es或 e o e^o eo最近一次参与事件的时间。
乍一看好像强度函数并没有用来更新节点嵌入,但在损失函数中,作者通过最小化强度函数的联合负对数似然来学习模型,具体分析可以看论文。
这篇文章发表于IJCAI 2018,它将交通网络构建成无向图,然后运用谱域图卷积和卷积序列模型(convolutional sequence model)来建模。
v ^ t + 1 , … , v ^ t + H = arg max v t + 1 , … , v t + B l o g P ( v t + 1 , … , v t + H ∣ v t − M + 1 , … , v t ) \hat v_{t+1},\ldots,\hat v_{t+H}=\underset{v_{t+1}, \ldots, v_{t+B}}{\arg \max } log P(v_{t+1},\ldots,v_{t+H}|v_{t-M+1},\ldots,v_t) v^t+1,…,v^t+H=vt+1,…,vt+BargmaxlogP(vt+1,…,vt+H∣vt−M+1,…,vt)
图 G = ( V t , E , W ) \mathcal{G}=(V_t,\mathcal{E},W) G=(Vt,E,W),节点表示 n n n个监控位置,边表示这些监控位置之间的连接。针对的数据是图结构不发生改变的无向带权同构图序列
y j = ∑ i = 1 C i Θ i , j ( L ) x i ∈ R n , 1 ≤ j ≤ C o y_j=\sum_{i=1}^{C_i}\Theta_{i,j}(L)x_i∈R^n,1≤j≤C_o yj=i=1∑CiΘi,j(L)xi∈Rn,1≤j≤Co输入的特征是 X ∈ R n × C i X∈R^{n×C_i} X∈Rn×Ci,输出的卷积结果是 Y ∈ R n × C o Y∈R^{n×C_o} Y∈Rn×Co。输入的第 i i i个元素 x i ∈ R n x_i∈R^n xi∈Rn,也就是所有节点的第 i i i个维度特征。对于每个时间步的 V t V_t Vt的特征向量 X t X_t Xt,可以并行地进行空间信息的提取。
时间卷积层包含一个宽度为 K t K_t Kt的1D卷积和gated linear units(GLU),对于图 G \mathcal{G} G中的每个节点,时间卷积会处理其 K t K_t Kt邻居,并且无padding,因而每次卷积都会缩短 K t − 1 K_t-1 Kt−1的序列长度。
1D卷积:卷积核 Γ ∈ R K t × C i × 2 C o \Gamma∈R^{K_t×C_i×2C_o} Γ∈RKt×Ci×2Co,将输入 Y ∈ R M × C i Y∈R^{M×C_i} Y∈RM×Ci(单个节点的时间序列)映射到两个向量,P、Q: [ P Q ] ∈ R ( M − K t + 1 ) × ( 2 C o ) [P{\,}Q]∈R^{(M-K_t+1)×(2C_o)} [PQ]∈R(M−Kt+1)×(2Co);
GLU:1D卷积得到的 P 、 Q ∈ R ( M − K t + 1 ) × C o P、Q∈R^{(M-K_t+1)×C_o} P、Q∈R(M−Kt+1)×Co,作为GLU的输入,进行哈达玛乘积运算:
Γ ∗ T Y = P ⊙ σ ( Q ) ∈ R ( M − K t + 1 ) × C o \Gamma *_\Tau Y=P\odot\sigma(Q)∈R^{(M-K_t+1)×C_o} Γ∗TY=P⊙σ(Q)∈R(M−Kt+1)×Co
可以将这个过程映射到所有节点上,也就是输入不再是 Y ∈ R M × C i Y∈R^{M×C_i} Y∈RM×Ci而是 Y ∈ R M × n × C i \mathcal{Y}∈R^{M×n×C_i} Y∈RM×n×Ci。
一个block就是前面图片中的三明治结构,两个时间层中间一个空间层。 v l ∈ R M × n × C l v^l∈R^{M×n×C_l} vl∈RM×n×Cl表示 l l l层的输入, v l + 1 ∈ R ( M − 2 ( K t − 1 ) ) × n × C l + 1 v^{l+1}∈R^{(M-2(K_t-1))×n×C_{l+1}} vl+1∈R(M−2(Kt−1))×n×Cl+1既是 l l l层的输出又是 l + 1 l+1 l+1层的输入:
v l + 1 = Γ 1 l ∗ τ R e L U ( Θ l ∗ G ( Γ 0 l ∗ τ v l ) ) v^{l+1}=\Gamma^l_1*_\tau ReLU(\Theta^l*_\mathcal{G}(\Gamma^l_0*_\tau v^l)) vl+1=Γ1l∗τReLU(Θl∗G(Γ0l∗τvl))
其中 Γ 0 l \Gamma^l_0 Γ0l表示block中第一个temporal层, Γ 1 l \Gamma^l_1 Γ1l表示block中的第二个temporal层。
疑惑:论文中引用了一个同期的论文Diffusion convolutional recurrent neural network: Data-driven traffic forecasting,称该模型为GCGRU,并作为baseline,而这篇论文提出的方法明明是DCRNN啊……(貌似是作者投稿的版本问题,GCGRU是第一版中命名的模型)