0
点赞
收藏
分享

微信扫一扫

图神经网络(一)DGL框架搭建GCN图卷积神经网络模型

艾米吖 2022-02-18 阅读 130

一、DGL

DGL是基于pytorch开发的一个专门用于图神经网络模型搭建的框架,到现在为止,DGL已经高度封装了如GCN、GraphSage、GAT等常见的图神经网络模型,可以直接调用,比较方便,当然针对非常想挑战自己的编程能力又或者非常想从更底层的角度去学习图神经网络,建议直接看pytorch搭建的模型。

DGL的安装和使用可以看看这里,一般是先安装pytorch再安装DGL,不然容易出错,图神经网络框架DGL使用记录。

关于DGL各种详细的API和相关使用案例,请参考官方文档,
DGL官方文档。

二、GCN图卷积神经网络

先简单说一下GCN模型,GCN模型是图神经网络里面最早的模型,全称叫图卷积神经网络,先丢张结构示意图如下。
在这里插入图片描述

上图什么个意思呢?一般来说,图中每个节点都对应了一个专属的节点特征node_feat,当然不同节点之间连接的边也可以对应一个边特征edge_feat,一般是点特征的学习研究比较多。

上图怎么个更新法呢?比如x2同时连接了x1、x3和x4,那么更新过程就是:

node_feat[x2] = a1 x node_feat[x1] + a2 x node_feat[x2] + a3 x node_feat[x3] + a4 x node_feat[x4];

其中a表示不同节点的权重,说到这里,是不是感觉很熟悉,没错,这就是我们传统的卷积神经网络CNN的更新过程,GCN就是把欧式空间中的CNN转换到了非欧式空间的图结构上,所以这样一说,就很好理解了吧。

出于严谨,我们还需要知道这个模型具体的更新方程式,为了更好的理解GCN模型的公式是怎么来的,这里进行简单的推演说明,当然也为了加深大家的理解。

首先根据我们刚才说的,或者联系到CNN的计算过程,我们用H表示节点特征矩阵,W表示随机初始化的一个权重参数矩阵,那么就得到节点特征的更新方程如下。
在这里插入图片描述

其中A是邻接矩阵,表示点和点的连接关系,这样相乘的话和节点x有连接关系的其他节点特征就会根据相应权重累加到x的新特征信息上。

这样的公式简单明了,也大体对应上了CNN的更新过程,但是GCN的公式不是这个,虽然上述的公式搭建的模型已经有很好的学习能力了,但是GCN的作者又继续进行了相关的优化。

上述公式存在的问题如下:
(1)首先A是邻接矩阵,那么对角线上就是0,就会导致节点本身的特征信息被忽略,回顾CNN更新过程是把自身的特征信息也加上的,所以可以加个单位矩阵I,让对角线上为1,矩阵计算的时候把自己的特征也加上一起更新。
(2)A是一个没有经过标准化处理的矩阵,我们知道即便是原始数据训练也都应该进行一下原始数据的特征标准化,这样可以带来很多好处,比如模型训练更稳定,收敛效果更好等等,所以这里A应该进行特征标准化。,如果没标准化直接和原始的节点特征相乘,可能会改变节点特征的分布规律,带来一些不好估测的后果。
(3)如何标准化,论文的作者是直接让A乘节点的度矩阵D,度就是某个节点的连接数目(出度和入度之和)。乘度矩阵D的好处就是,度矩阵在一定程度上反应了节点的重要性,如果某个节点度很大,说明可能比较重要,这样子。

于是得到最终GCN的更新公式如下。
在这里插入图片描述
A’ = A + I,D’ 是A’ 的度矩阵,这里为什么要让度矩阵D’ 取-1/2的次幂,相关解释是因为是矩阵运算,不断更新过程中这样处理可以有效避免梯度爆炸等问题,使得训练可以更加平缓。

三、DGL搭建GCN代码

完整工程代码点击这里,如果对你的学习有所帮助,希望给个star,谢谢~。

举报

相关推荐

0 条评论