-
首先,先推荐一个非常好的公众号:深度学习与图网络,其中真的对图神经网络的介绍非常全面,而且易懂,连续刷里面的一些文章,对GNN的体系差不多就建立的差不多了~尤其是其中的这篇渐进式总结的入门干货分享!!干货分享|深度学习与图网络从入门到进阶【内容丰富】 ,我当时按照顺序看了一上午,真的觉得思路清奇地清晰,完全是下一篇文章的一个算法改进了上一篇更旧的模型的一些不足。 里面资料也很丰富,强烈推荐了~
-
另外,对图卷积部分做个简单的小结。(参考了较多他人成果)
从空域角度看GCN![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/afdd8985197aa3299b2a0926e249545b.png)
- 空域,谱域卷积,两者说白了感觉都是将邻居信息进行一个聚合,而且后面证明是两者虽然理论不同但本质是能够统一的。自己一直对谱域的理论没有理解。上面的例子可以很好地理解空域卷积,即把自己空间上相邻的节点信息进行一个聚合。
H ( l ) 表 示 节 点 在 l 层 的 特 征 , W ( l ) 表 示 待 学 习 的 参 数 H\left ( l\right )表示节点在l层的特征,W(l)表示待学习的参数 H(l)表示节点在l层的特征,W(l)表示待学习的参数
如 果 不 看 前 面 D ~ − 1 / 2 A ~ D ~ − 1 / 2 这 一 项 的 话 , 就 是 一 个 全 连 接 层 。 如果不看前面 \widetilde{D} ^{-1/2} \widetilde{A} \widetilde{D}^{-1/2}这一项的话,就是一个全连接层。 如果不看前面D −1/2A D −1/2这一项的话,就是一个全连接层。
-
那么"DAD"是什么?
根据上面的图,简单来说,A是邻接矩阵,~A=A+I(单位阵),即包含自身信息和邻接信息。 ~ D就是 ~A 的度矩阵, ~D的-1/2次方则是 ~D 归一化后的矩阵。 -
如果我们仅仅关注
这一项 ,可以理解其作用为:对节点的一阶邻居信息的加权聚合,权重与节点的度成反比
- 上面的图举了个例子,大概是说明通过 ~A (包含了节点的自身信息和邻居信息)能够把 H(l)的特征信息按照 “空间临近性” 进行一个聚合,而左右的D-1/2主要是一个归一化操作,W是一个待学习的权重矩阵(待学习参数)。
拉普拉斯矩阵,邻接矩阵
简单用两张图理解一下,参考:关联矩阵,邻接矩阵,拉普拉斯矩阵
拉普拉斯矩阵 : L=D - A
用拉普拉斯矩阵做聚合: 归一化的拉普拉斯矩阵 L,实际是对节点的一阶邻居信息的加权聚合,权重与节点的度成反比;
拉普拉斯矩阵的意义:在谱图分析中,一个图用其相应的拉普拉斯矩阵表示。通过分析拉普拉斯矩阵及其特征值,可以得到图结构的性质。
GCN演变的一些细节
- 我们的每一层GCN的输入都是邻接矩阵A和node的特征H,那么我们直接做一个内积,再乘一个参数矩阵W,然后**一下,就相当于一个简单的神经网络层嘛,是不是也可以呢?
实验证明,即使就这么简单的神经网络层,就已经很强大了。这个简单模型应该大家都能理解吧,这就是正常的神经网络操作。
但是这个简单模型有几个局限性:
- 只使用A的话,由于A的对角线上都是0,所以在和特征矩阵H相乘的时候,只会计算一个node的所有邻居的特征的加权和,该node自己的特征却被忽略了。因此,我们可以做一个小小的改动,给A加上一个单位矩阵 I ,这样就让对角线元素变成1了。
- A是没有经过归一化的矩阵,这样与特征矩阵相乘会改变特征原本的分布,产生一些不可预测的问题。所以我们对A做一个标准化处理。首先让A的每一行加起来为1,我们可以乘以一个D的逆,D就是度矩阵。我们可以进一步把D的拆开与A相乘,得到一个对称且归一化的矩阵 。
- 通过对上面两个局限的改进,我们便得到了最终的层特征传播公式:
GCN的层数
- GCN网络的层数多少比较好?论文的作者做过GCN网络深度的对比研究,在他们的实验中发现,GCN层数不宜多,2-3层的效果就很好了