图机器学习——5.8 图神经网络:网络层连接
正常的图神经网络叠加应该是如下图所示,直接前一层的输出接后一层的输入。

但这样简单的连接会出现 over-smoothing 的问题,即:所有的节点嵌入收敛到相同的值。这显然是不合理的。出现这种现象的原因如下。
首先引入一个新概念——接受域(Receptive field),其决定一个感兴趣节点嵌入的一组节点。在K层GNN中,每个节点都有一个K阶邻居的接受域。下图分别为1-3阶邻居示意图:

当我们增加邻居的阶数(GNN层数)时,共享邻居个数会快速增长,两个邻居节点的接受域会有非常多重合的邻居结点。

回到前面的 over-smoothing 问题。我们知道节点的嵌入是被其接受域所决定,如果两个节点的接受域高度重叠,那么它们的嵌入将会高度相似。因此,若我们堆叠非常多层的图网络,那么节点之间将会有高度重合的接受域,节点的嵌入也将变得非常相近,最终导致了 over-smoothing 的发生。
下面我们设计一些连接方式来克服上述问题:
方式一:增加每个GNN层的表达能力
在前面的示例中,每个转换或聚合函数只包含一个线性层。这里,我们可以使聚合/转换变成一个深度神经网络。

其中MLP为多层感知机(multilayer perceptron)。
方式二:添加不传递消息的层

GNN并不一定只包含GNN层,例如我们可以在前后添加MLP层(应用于每个节点)GNN层,分为预处理层和后处理层。
- 预处理层:在编码节点特征时很重要(当节点表示图或者文本时)。
- 后处理层:当需要对节点嵌入进行推理/转换时很重要(在进行图分类,知识图谱任务时)。
在实际操作时,这种方法表现通常会更好。
方式三:添加在GNN网络中添加跳跃连接(Skip connections)
实际的单纯堆叠的网络训练中可以发现,在开始的GNN层中的节点嵌入有时可以更好地进行嵌入表达,只是当网络层数一直增加后,后面的GNN层的节点嵌入趋于一致。因此我们可以通过在GNN中添加 shortcuts,增加前面的GNN层对最终节点嵌入的影响。
这一思想来自ResNet,添加跳跃连接后,网络结构如下所示:

通过跳跃连接,我们可以自动得到浅层GNN和深层GNN的混合,每一次都有可能直接跳跃过去,或者不跳跃:

公式如下:
hv(l)=σ(∑u∈N(v)W(l)hu(l−1)∣N(v)∣+hv(l−1)) \mathbf{h}_{v}^{(l)}=\sigma\left(\textcolor{red}{\sum_{u \in N(v)} \mathbf{W}^{(l)} \frac{\mathbf{h}_{u}^{(l-1)}}{|N(v)|}}+\textcolor{blue}{\mathbf{h}_{v}^{(l-1)}}\right) hv(l)=σ⎝⎛u∈N(v)∑W(l)∣N(v)∣hu(l−1)+hv(l−1)⎠⎞
上式的红色部分可以理解成传统残差网络中的F(x)\textcolor{red}{F(\mathbf{x})}F(x),蓝色部分即为x\textcolor{blue}{\mathbf{x}}x。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)