当前位置:   article > 正文

GC-LSTM:用于动态网络链路预测的图卷积嵌入原理+代码(上)原理部分_gclstm

gclstm

一、原理

 

背景

动态网络链路预测因其在生物学、社会学、经济学和工业领域的广泛应用而成为网络科学研究的热点,然而,由于网络结构随着时间的变化而变化,使得添加/删除链接的长期预测尤其困难。

与传统基于CNN的卷积处理操作不同,交通网络更适合被建模为图数据。卷积神经网络CNN只能处理欧式数据,比如图片、音频、视频等,这些数据具有平移不变性。图数据则是一种非欧式数据,由节点和链路集合构成,不具有平移不变性,也无法使用CNN进行处理。

GC-LSTM: graph convolution embedded LSTM for dynamic network link prediction

论文链接:https://doi.org/10.1007/s10489-021-02518-9

模型架构

文章主要提出了一个GC-LSTM模型,用于预测动态网络链路。对于每个图快照,GCN应用于捕捉节点的局部结构属性以及节点之间的关系,采用LSTM作为主要框架,学习动态网络中所有快照的时间特征。

GC-LSTM

 目标

值得一提的是,该模型可以预测动态网络中链路的添加或删除,也就是对动态网络的邻接矩阵A_{t}进行预测\hat{A}_{t}=argmaxP(A_{t}|A_{t-T},\cdots ,A_{t-1})

 原理

(1)使用GCN+LSTM作为编码器

使用GCN聚合节点以及其一阶邻居节点的状态。如图中所示,对于t-1时刻的节点12来说,其一阶邻居节点为7、9、11,同时GCN还会卷积节点自身的信息(A+I_N),也就是节点12。

 利用GCN提取各个节点的空间特征之后,使用LSTM提取时间序列的时序特征,公式如下:

\begin{aligned} &f_t=\sigma\left(A_t W_f+G C N_f^K\left(\tilde{A}_{t-1}, h_{t-1}\right)+b_f\right) \\ &\bar{c}_t=\tanh \left(A_t W_c+G C N_o^K\left(\tilde{A}_{t-1}, h_{t-1}\right)+\right.\left.b_c\right) \\ &i_t=\sigma\left(A_t W_i+G C N_i^K\left(\tilde{A}_{t-1}, h_{t-1}\right)+b_i\right) \\ &c_t=f_t \odot G C N_c^K c_{t-1}+i_t \cdot \bar{c}_t \\ &o_t =\sigma\left(A_t W_o+G C N_o^K\left(\tilde{A}_{t-1}, h_{t-1}\right)+b_0\right) \\ &h_t =o_t \odot \tanh \left(c_t\right) \end{aligned}

(2)使用全连接层MLP作为解码器

由于GC-LSTM模型主要用于预测邻接矩阵A,因此模型输出的P_{t}\in R^{N\times N},也就是说MLP最后一层的output_size大小为N。P_{t}为输出的邻接矩阵的概率矩阵,P_{t}\left ( i,j \right )\in [0,1]代表t时刻存在从i到j的链路的概率。P_{t}\left ( i,j \right )越大,说明节点i和节点j有更高的可能性是相连的。

\begin{aligned} &Y_d^{(1)}=\operatorname{ReL} U\left(W_d^{(1)} h_t+b_d^{(1)}\right) \\ &Y_d^{(k)}=\operatorname{ReL} U\left(W_d^{(k)} Y_d^{(k-1)}+b_d^{(k)}\right) \\ &P_t=o_t \odot \tanh \left(c_t\right) \end{aligned}

(3)损失函数

L_{reg}为正则项,主要为了防止模型过拟合。

\begin{aligned} &L_2=\left\|P_t-A_t\right\|_F^2=\sum_{i=0}^N \sum_{j=0}^N\left(P_t(i, j)-A_t\right.(i, j))^2 \\ &L=L_2+\beta L_{r e g} \end{aligned}

 实验参数

GCN个数(对应LSTM的四个门控单元)4
GCN参数K(卷积K阶邻居节点)3
GCN隐藏层维度(输出维度)256
LSTM隐藏单元256
迭代次数200
输入的连续序列数11
阈值(判断链路是否存在)0.9

二、实验代码

从0到1实现GCN——最详细的代码实现篇文章中,我们详细的讲述了如何使用PyG库中的GCN卷积模块,PyG库中大多只包括一些卷积处理,而GC-LSTM中除了需要对数据的拓扑信息进行卷积处理之外,还需要对数据的时序特征进行处理,这就不得不用到pytorch geometric temporal

点击PyG Temporal进行下载。里面提供了非常多的模型代码可供使用。

 针对GC-LSTM模型代码,里面主要需要如下参数(一般只需要对前三个参数进行调整,因此这里只对前三个参数进行介绍):

 in_channel:输入数据的维度(一般是数据节点特征矩阵的维度X_{t}\in R^{^{N\times F}}N为节点的数量,F为节点特征的维度)。

out_channel:输出数据的维度,可根据需要自己进行设置和调整。

K:这里模型选用的是切比雪夫滤波器,如下公式所示,该滤波器进行化简即可得到GCN,所以本质上与GCN是一样的,K代表了聚合K阶邻居节点特征,也就是说K越大,聚合的邻居节点信息越多,卷积程度越深。

y=g_{\theta^{\prime}}(L) x=\sum_{k=0}^K \theta_k^{\prime} T_k(\tilde{L}) x

 具体的代码见GC-LSTM代码(下)这里代码部分

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/769612
推荐阅读
相关标签
  

闽ICP备14008679号