GCNII《Simple and Deep Graph Convolutional Networks》阅读笔记

GCNII

Chen M, Wei Z, Huang Z, et al. Simple and deep graph convolutional networks[C]//International Conference on Machine Learning. PMLR, 2020: 1725-1735.

本文主要是针对GNN模型的过平滑(over-smooth)问题展开研究与讨论,回顾之前的一些解决方案,并且借鉴ResNet设计了GCNII模型。


过平滑问题以及其相关工作

其实到现在为止,大部分GNN模型都是浅层的,可以称得上深层模型的屈指可数——GCNII和DeeperGCN。之所以不能太深,是因为过平滑问题会导致性能下降。

所谓过平滑,就是指当我们堆叠多个图卷积层时,模型的性能不升反降的现象。至于为什么会这样,一种比较合理的解释是:这些模型都可以看作是一些滤波器,而这些滤波器所模拟的lazy随机游走会最终收敛到一个稳定的向量,因而导致了无法区分出不同的节点。并且,高度节点由于从邻居获得更多的信息,所以更容易出现过平滑问题。

而模型过浅,我们就无法从高阶邻居中提取信息了。

当然,从GNN刚兴起的时候大家就发现这个问题了,很多人都对此提出了各式各样的解决方案,其中一些思路对于我们自己设计model是很有帮助的。

第一类大方向是沿着ResNet中的剩余连接以及图的正则化等方法进行扩展和思考。

  1. skip-connection。一般是把当前层的结果和上一层的结果进行连接/拼接,这样,既可以保留之前的运算结果,又可以加速模型在训练过程中的收敛速度。
  2. JKNet。保存每一层的运算结果,最后统一对所有层的结果进行一个连接,可以减轻过平滑问题。
  3. DropEdge。训练时随机丢弃途中的一些边,是一种图数据增强的方法。

第二类大方向是浅层模型中的深度传播方法。

  1. SGC。
  2. APPNP。
  3. GDC。

第一类方法确实是模型深度有了小幅提升,但是无法更深,还是存在过平滑的问题;第二类方法根本就没有加深模型深度,只是每一层深度传播去聚合更多的信息,也失去了深层模型的非线性结构。

虽然如此,层数一多,仍然会有过平滑问题。

GCNII模型

GCNII(Graph Convolutional Network via Initial residual and Identity mapping),就是带有初始剩余连接和恒等映射的GCN。
PyG官方文档:GCN2Conv
X ′ = ( ( 1 − α ) P ^ X + α X ( 0 ) ) ( ( 1 − β ) I + β Θ ) \mathbf{X}^{\prime} = \left( (1 - \alpha) \mathbf{\hat{P}}\mathbf{X} + \alpha \mathbf{X^{(0)}}\right) \left( (1 - \beta) \mathbf{I} + \beta \mathbf{\Theta} \right) X=((1α)P^X+αX(0))((1β)I+βΘ)
其中 P ^ = D ^ − 1 / 2 A ^ D ^ − 1 / 2 , β = log ⁡ ( θ ℓ + 1 ) \mathbf{\hat{P}} = \mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}} \mathbf{\hat{D}}^{-1/2},\beta = \log \left( \frac{\theta}{\ell} + 1 \right) P^=D^1/2A^D^1/2β=log(θ+1)
看名字也知道,GCNII就2个改进。

  1. 初始剩余连接(Initial residual connection)
    GCN中因为有self-loop的存在,其实也含有比较弱的剩余连接。借鉴了APPNP,初始剩余连接就是让输入X先经过一个FC层得到 X ( 0 ) X^{(0)} X(0),这个 X ( 0 ) X^{(0)} X(0)按比例连接到后面的其它层。一般另超参数 α \alpha α=0.1或0.2即可。
  2. 恒等映射(Identity mapping)
    类比ResNet中的恒等映射,这里按照比例把单位矩阵 I I I加到权重矩阵 Θ \Theta Θ上(注意均为方阵才行),然后比例系数 β \beta β的值随着层数的加深逐渐减小,代表着层数越深越接近恒等变换。恒等映射被证明在半监督学习当中很有用,可以从迭代收缩阈值算法中找到很好的理论动机。

实验

说实话,实验几乎没有参考价值。。

估计是写这篇文章的时候OGB数据集还没出来,所以还是用的一些玩具数据集(Cora等)在实验,根本就没有意义。有一个点需要注意,实验中严格区分了半监督节点分类和完全监督节点分类。半监督就是Cora等数据集的标准方法,完全监督就是按照60%、20%、20%来划分的数据集。

后面作者又补做了OGB数据集的实验。
ogbn-arxiv:https://github.com/chennnM/GCNII/tree/master/PyG/ogbn-arxiv

在这里插入图片描述

总结

最后,作者提出了未来方向:将GCNII与注意力(attention)机制相结合。我觉得这很合理,因为ogbn-arxiv排行榜前面的几乎都用到了GAT,后面我也要重点去关注一下GAT。

总体来说,这篇文章特别是初始剩余连接对我的启发还是很大的(虽然也是借鉴人家APPNP的)。最近看到或者实际去实践的一些改进策略似乎都和ResNet有着密不可分的关系,ResNet真的是经典啊,跨领域也能用得上!

猜你喜欢

转载自blog.csdn.net/weixin_41650348/article/details/114160430