C&S
Huang Q, He H, Singh A, et al. Combining Label Propagation and Simple Models Out-performs Graph Neural Networks[J]. arXiv preprint arXiv:2010.13993, 2020.
本文主要提出了一种图上更好更快的技巧 Correct and Smooth (C&S),以纠正和平滑预测值。搭配这种技巧,很多「不使用图结构」的baseline模型在(直推式)节点分类任务上都能够提升表达能力,特别是像MLP/Linear这样的简单模型,提升的幅度很大。
除了性能提升,C&S方法的最大优点就是「快」,拥有更少的模型参数、更短的运行时长。由于结合毕设,我最近一直在研究ogbn-arxiv上的GNN模型,下面的回顾与实战也都是基于这个数据集进行的。
理论
背景
GNN越来越复杂,很多GNN模型都难以扩展到大型数据集上了。此外,随着模型日趋复杂,训练时间和训练代价都在增加,这也给未来的研究带来了不小的挑战。
C&S方法
C&S方法主要通过2个标签传播(Label Propagation,LP)进行纠正与平滑的,一般会和一些简单的基线模型配合使用(作为一种技巧出现)。需要注意的是,C&S方法并不参与end-to-end的训练过程,而是在训练结束后通过一个后处理步骤(post-processing)来进行LP传播的。
运用此方法的整体训练流程是这样的:
其中基础模型一般选择比较简单的且「不依赖图结构」的模型,例如MLP/Linear (softmax + CrossEntropy Loss)。
核心的C&S操作主要分为2步走。
correct
第一步是校正。
关键:通过Z-Y得到的train节点的误差,并借助图邻接结构通过LP传播到包括valid、test节点在内的整张图中。这也就是所谓的「残差传播」。这背后的直觉是这样的——误差沿着图中的边正相关,即节点i出现的错误很有可能在去邻居节点中也出现了。
这里的残差传播(residual propagation)和剩余连接(residual connection)在表现形式上有异曲同工之妙,均采用了保留前面结果的方法。
e i ( 0 ) = { z i − y i , if i is training node, 0 , else \mathbf{e}^{(0)}_i = \begin{cases} \mathbf{z}_i - \mathbf{y}_i, & \text{if }i \text{ is training node,}\\ \mathbf{0}, & \text{else} \end{cases} ei(0)={zi−yi,0,if i is training node,else
E ( ℓ ) = α 1 D − 1 / 2 A D − 1 / 2 E ( ℓ − 1 ) + ( 1 − α 1 ) E ( 0 ) \mathbf{E}^{(\ell)} = \alpha_1 \mathbf{D}^{-1/2}\mathbf{A} \mathbf{D}^{-1/2} \mathbf{E}^{(\ell - 1)} + (1 - \alpha_1) \mathbf{E}^{(0)} E(ℓ)=α1D−1/2AD−1/2E(ℓ−1)+(1−α1)E(0)
Z
^
=
Z
+
γ
⋅
E
(
L
1
)
\mathbf{\hat{Z}} = \mathbf{Z} + \gamma \cdot \mathbf{E}^{(L_1)}
Z^=Z+γ⋅E(L1)
其中
y
i
\mathbf{y}_i
yi是节点标签的one-hot编码,
e
i
(
0
)
\mathbf{e}^{(0)}_i
ei(0)表示误差。此外还有一点值得注意,调整残差的比例
γ
\gamma
γ对整个模型性能的提升有很大的帮助。后面的实验中我是用的是固定的比例系数而不是通过学习得到。
smooth
接下来是平滑。
关键:已知train节点的label,通过LP传播,鼓励节点之间的平滑性。这背后的动机是这样的——相邻节点可能有相似的label。
z ^ i ( 0 ) = { y i , if i is training node, z ^ i , else \mathbf{\hat{z}}^{(0)}_i = \begin{cases} \mathbf{y}_i, & \text{if }i\text{ is training node,}\\ \mathbf{\hat{z}}_i, & \text{else} \end{cases} z^i(0)={yi,z^i,if i is training node,else
Z
^
(
ℓ
)
=
α
2
D
−
1
/
2
A
D
−
1
/
2
Z
^
(
ℓ
−
1
)
+
(
1
−
α
2
)
Z
^
(
0
)
\mathbf{\hat{Z}}^{(\ell)} = \alpha_2 \mathbf{D}^{-1/2}\mathbf{A} \mathbf{D}^{-1/2} \mathbf{\hat{Z}}^{(\ell - 1)} + (1 - \alpha_2) \mathbf{\hat{Z}}^{(0)}
Z^(ℓ)=α2D−1/2AD−1/2Z^(ℓ−1)+(1−α2)Z^(0)
进行平滑操作后的结果
Z
^
(
L
2
)
\mathbf{\hat{Z}}^{(L_2)}
Z^(L2)就是最终需要进行test的值。和APPNP不同的一点在于,这种平滑操作是作为一种后处理步骤出现的,而出现在非端到端的训练过程。
此外,因为基础模型可以不使用图的结构信息(图结构信息在C&S方法的传播过程中会用到),这也就使得其速度更快,参数量更少!
实战
主要在ogbn-arxiv数据集上进行了实验,并向OGB排行榜提交了修改后的代码。在我改进后的GCN_res框架下,加入了C&S方法,使得模型的性能有了提升。
实验与提交的结果
一共提交了2个版本的代码:GCN_res + C&S和GCN_res + C&S_v2。
GCN_res + C&S_v2在前一个版本的基础上进行了机械调参以及一些小调整,其最终排名为13,达到了ogbn-arxiv上目前为止以GCN为内核的模型的最佳性能。(前面的都是基于GAT的)
实验总结与思考
- 关于各数据集中GNN模型竞争的激烈程度。
我觉得ogbn-arxiv无论是最激烈的。一方面,这个数据集有最多的提交代码以及全面的节点分类模型。另一方面,在我下面一名的MLP+C&S方法在ogbn-products数据集中排名第一,但是到了obn-arxiv中只能排到14名(当时发paper的时候是第2名)。可见其激烈程度。 - 关于以GCN为内核的模型的讨论。
文章中并没有关于GCN模型搭配C&S方法的结果,我猜可能是实验之后发现还没有其他模型好,所以就没有提(按理说这种经典模型都要提一下才对的)。我这里用我改进后的GCN_res框架,发现其性能还是超过了MLP+C&S方法。一方面,这说明了我提出的GCN_res框架具有鲁棒性、灵活性和有效性;另一方面,我也大胆猜测,GCN_res中的各种剩余连接策略促进了这里的残差传播,使得模型具有更好的性能。 - 关于平滑与过平滑的思考。
通过实验可以发现,「平滑」输出很重要。但是很多模型堆叠多层又会出现「过平滑」的问题。而一些解决过平滑问题的动机和直觉对于平滑输出是具有误导性的,很容易让人误认为不需要平滑!我们既要平滑,但是又不能过度平滑,掌握一个度是很重要的。 - 关于未来发展的思考。
因为前12名都是基于GAT的,所以下一步想要再去研究一下GAT,看看我的框架能不能套用到GAT模型当中。