图神经网络(7)-续 GNN的具体实践(BN,dropout等)

目录

实践中的GNN层

GNN的过渡平滑问题(节点嵌入趋同)

增强GNN的表达能力

增加跳跃连接


摘要:GNN层的变换,over-smoothing问题以及解决办法增强GNN的表达能力增加跳跃连接

在实际应用中,也就是在编程的时候,基本就可以把GNN层看作是CNN层,可以往上面加上各种在深度学习中应用的模块。

实践中的GNN层

图神经网络(7)-续 GNN的具体实践(BN,dropout等)_第1张图片

BN以及dropout之类的具体操作,参考神经网络中的内容。

后面自己补一个,神经网络优化内容的总结。

GNN的过渡平滑问题(节点嵌入趋同)

在GNN中,如果大量GNN层堆叠,就很有可能出现over smoothing问题——通过图神经网络处理得到的各个节点embeddings变得大同小异。显然这样是不行的,各个节点的embeddings都是一样的,那么你怎么做节点分类??!!其他的tasks也很难搞啊!

那为什么会出现这个问题呢??

课程中,老师引入一个概念:接受域

节点的embeddings都是由接受域决定的。

图神经网络(7)-续 GNN的具体实践(BN,dropout等)_第2张图片

因为每个节点计算embeddings时,都是通过message和aggregataion操作的,都是通过从邻居节点那边得到信息在做处理的。如果你的GNN层数越多,最后得到embeddings它汇集的节点就会越多(接受域越大),而所有节点汇聚的节点都多,那么显而易见,不同节点汇集的对象就会重叠(也就是大家都从相似的接受域汇集),最后汇集的结果就会相似。

其实,也可以用另一个角度去理解,从计算图去理解。

在最开始介绍GNN的时候,提过计算图,如下

图神经网络(7)-续 GNN的具体实践(BN,dropout等)_第3张图片

 如果用GNN实现这个计算图,那么GNN应该是两层。对于上面这个图,如果GNN变成四层或者更多,它对应的计算图会变成什么样子呢??当层数过多之后,计算图就变成俄罗斯套娃,你中有我我中有你,最后得到的结果就会相似。

其实,计算图和接受域是类似的意思。

因此,在设计GNN模型时,得注意GNN的层数。对于GNN模型来讲,不是GNN层数越多,模型的能力越强,而是最开始层数增多,模型能力变强,后来层数增多,模型能力变弱!!

可以通过分析接受域的大小去设计GNN层数。

图神经网络(7)-续 GNN的具体实践(BN,dropout等)_第4张图片

 GNN层数数量有一个总思想,就是层数不能太多!!那么这样又会带来一个问题:GNN层数太少了,模型的表达能力就不强!

增强GNN的表达能力

方法1:增强GNN层内部的表达能力

在transformation和aggregation操作中增加可以训练的参数,可以把transformation和aggregation操作变成深度神经网络DNN。 

方法2:在GNN模型中增加其他类型的NN层(譬如MLP)——常用

在节点数据被传入GNN层之前,和数据传出GNN层后,我们都可以增加NN层去做预处理和后处理。

增加跳跃连接

如果我们就是想要GNN层数多一点,那么我们就可以采取增加跳跃连接的方式。

在谈GNN的过渡平滑问题的时候提过,节点embeddings在GNN的前几层差异会比较大,当层数变多,后面的embeddings就会相似。那么我们把前几层的数据直接传到后面的GNN层中,这样也能解决过渡平滑问题。

增加跳跃连接的方式各式各样,就不介绍了。跳跃连接在深度神经网络DNN中也经常会用,是为了防止网络层数增加而导致的梯度弥散问题与退化问题。

你可能感兴趣的:(GNN,神经网络,深度学习,人工智能)