这两天稍微看了点图神经网络的东西,稍微做个记录,第一次接触这个名词的推荐可以看一下知乎上一个视频
简单粗暴带你快速理解图神经网络GNN
图神经网络处理的数据一般就是个图,图网络具有节点特征和结构特征,图神经网络的本质提示就是提取特征。
这个特征提取的思路也很make sense,把相邻节点的特征结合起来,这也叫做聚合,结合得到的信息和自身特征进行融合,这就叫更新。所以GNN其实就是不断将相邻节点的信息进行融合的过程。
假设一个图有
个节点,每个节点用一个特征向量来表示,初始特征维度为
,也就是说拿到这个图的时候,我们的原始特征数据是个
的矩阵
,每一行代表一个节点的特征向量。
除此之外,由于这是一个图,我们还知道节点之间的连接关系,因此可以得到这个图的邻接矩阵
,其中
代表
和
两个节点是相连的(对于无向图,“你连我”和“我连你”是一样的,所以这个矩阵是对称的)。
有了原始特征
和节点之间的关系矩阵
,我们就可以进行特征提取了。这个特征提取的过程可以理解为常规神经网络的隐藏层,或者说是一个映射
不同的网络的区别可以体现在映射
的设计上,举个简单的例子,这个映射可以是
可以理解为对该层特征进行加权后通过邻接矩阵进行过滤,再通过relu函数增加点非线性。事实也说明了这样一种形式是可行的,但是有两个需要解决的问题
- 节点聚合得到的特征是相邻节点的特征聚合,不包含节点本身
- 提取出来的特征大小跟图节点的度(可以理解为相邻节点的个数)有关,度大的节点特征较大,这可能会导致梯度消失或爆炸
对于这两个问题自然也有了相应的解决措施:
- 邻接矩阵加入自环:
,其实可以理解为聚合邻居特征是把自己加上去呗
- 度的大小影响特征的大小,那就用度矩阵来归一化一下,
经过改进,得到的映射就是
其中
就是加入自环的邻接矩阵,
就是根据
得到的度矩阵(对角阵,
)。
另外推荐几个不错的参考资料
- THOMAS KIPF的博客
2. @小小将 写的文章
小小将:2020年,我终于决定入门GCNzhuanlan.zhihu.com3. 知乎上的高赞评论
如何理解 Graph Convolutional Network(GCN)?www.zhihu.com