GNN等优缺点总结及解决方案

https://www.zhihu.com/question/338051122
https://www.zhihu.com/question/346942899
https://zhuanlan.zhihu.com/p/291230435

  1. GCN的缺点在于它灵活性差transductive,并且扩展性非常差,除此之外这篇论文借助验证集来早停帮助性能提升,跟它半监督学习的初衷有点相悖。训练是full-batch的,难以扩展到大规模网络,并且收敛较慢
  2. GraphSage论文旨在提升gcn扩展性和改进训练方法缺陷。它将模型目标定于学习一个聚合器而不是为每个节点学习到一个表示,这中思想可以提升模型的灵活性和泛化能力。除此之外,得益于灵活性,它可以分批训练提升收敛速度。但是它的问题是因为节点采样个数随层数指数增长,会造成模型在time per batch上表现很差,弱于GCN,这方面的详细讨论可以参考Cluster-GCN这篇论文。虽然支持mini-batch方式训练,但是训练较慢,固定邻居数目的node-wise采样,精度和效率较低。
  3. GAT这篇论文创新之处是加入attention机制,给节点之间的边给予重要性,帮助模型学习结构信息。相对的缺点就是训练方式不是很好,其实这个模型可以进一步改,用attention做排序来选取采样节点,这样效果和效率方面应该会有提升。参数量比GCN多,也是full-batch训练;只用到1-hop的邻居,没有利用高阶邻居,当利用2阶以上邻居,容易发生过度平滑(over-smoothing)

Problem:

  1. Why? gcn增加深度会降低模型效果
  • 数据集太小,overfitting的问题,在一些数据上training acc为100%的大概率是这个问题,需要通过防止过拟合的技术来解决

  • vanishing gradient,这是CNN里一样存在的问题,当层数太深导致网络的参数不能得到有效的训练。这个问题可以加skip connections可以有效解决

  • over smoothing同一个连通分量里的节点会收敛的一个值,一个解决的方法是通过有效地改变图的结构或卷积的领接节点来解决。比如在点云里用动态knn/dilation来建边,但在其他图数据,这个方法会丢失边的信息。

  • 主要解决方案:skip-connection: 残差网络

    • DeepGCNs: Can GCNs Gobas Deep as CNNs?
      • 这篇论文主要讨论了GCN的深度问题,文中用了ResGCN,DenseGCN和Dilation等方法,最后效果比较明显。网络层数可以达到56层,并且有3.7个点的提升。
    • Deep insights into Graph Convolution Networks for Semi-supervised Learning
      • 这篇论文只看前面对于过度平滑的分析即可。
    • Representation learning on graphs with jumping knowledge networks
      • 这篇论文建立一个相对比较深的网络,在网络的最后当一个层聚合器来从所有层的输出中进行选择,来抑制noise information的问题。

PS: 即便使用了残差连接,GCN也不可能做的太深,基本就是3-5层左右的样子。
- 这是因为GCN可以被看作低通滤波器,叠加低通滤波器具有明显的过度平滑现象。如果想要做的更深,可以考虑一下DropEdge的方法,通过在训练过程中随机扔掉一些边来缓解过度平滑的现象,这种方法最近被证明是有效的。
- 修正:在采用了BN层和residual连接时,gcn可以做很深。

你可能感兴趣的:(Model,GNN)