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中的剩余连接以及图的正则化等方法进行扩展和思考。
- skip-connection。一般是把当前层的结果和上一层的结果进行连接/拼接,这样,既可以保留之前的运算结果,又可以加速模型在训练过程中的收敛速度。
- JKNet。保存每一层的运算结果,最后统一对所有层的结果进行一个连接,可以减轻过平滑问题。
- DropEdge。训练时随机丢弃途中的一些边,是一种图数据增强的方法。
第二类大方向是浅层模型中的深度传播方法。
- SGC。
- APPNP。
- 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