运营商|可以改善图神经网络,提升GNN性能的三个技巧

运营商|可以改善图神经网络,提升GNN性能的三个技巧

文章图片

运营商|可以改善图神经网络,提升GNN性能的三个技巧

文章图片

运营商|可以改善图神经网络,提升GNN性能的三个技巧

GNN 提供了一种在图结构化数据上使用深度学习技术的方法 。 图结构数据无处不在:从化学(例如分子图)到社交媒体(例如社交网络)以及金融投资(例如 VC 投资网络) , GNN 在各种任务中显示出最先进的性能1 2 。

在我的以前的一个实践:在投资者、初创公司和个人组成的投资网络上预测初创公司未来的融资轮次 , 其基线随机森林模型已经相当强大(AUC = 0.69) 。 但是GNN 模型一直落后于基线模型的性能 , 并且增加层数和隐藏维度并没有帮助 。 所以我开始研究 , 发现 GNN 并不简单 。
为了解决这个问题 , 本文总结了一些技巧来提高 GNN 模型的性能 。
什么是 GNN?在讨论如何改进 GNN 之前 , 让我们快速回顾一下它们的工作原理 。假设我们有一个简单的图表 , 如下所示:


图包含节点(i、j 和 k)和连接这些节点的边(e) 。 此外 , 图还包括每个节点(X1 , ...)和可能的每条边(黑色)的节点特征 。 目标节点以黄色着色 , 其 1 跳邻居为蓝色 , 2 跳邻居以绿色表示 。 包括不同类型节点的图称为“异构”图 , 就像上面的例子一样 。
消息传递
步骤 0 中节点的嵌入只是由其自身的特征向量(由特征 X1、X2……组成) 。 为了获得新的 (l + 1) 节点嵌入 h , 对于目标节点 i(黄色) , 需要从其相邻节点 j(蓝色)中提取所有嵌入 , 提取其自身的表示以及潜在的边缘特征e(黑色)并聚合该信息 。 这具体步骤参考下面的公式 。 但是 , 目前大多数著名的 GNN 架构都没有使用边缘特征? 。 在提取特征之后就可以将这些新的节点嵌入用于各种任务 , 例如节点分类、链接预测或图分类 。

GNN 的问题许多最近跨领域的研究发现 GNN 模型没有提供预期的性能? ? ? 。当研究人员将它们与更简单的基于树的基线模型进行比较时 , GNN 甚至无法超越基线的模型 , 例如我们上面提到的随机森林 。
一些研究人员对 GNN 有时表现不佳提供了理论解释? 。根据他们的实验 , GNN 只进行特征去噪 , 无法学习非线性流形 。因此他们主张将 GNN 视为图学习模型的一种机制(例如 , 用于特征去噪) , 而不是他们自己的完整的端到端模型 。
为了解决这些问题并提升 GNN , 本文总结了 3 个主要技巧/想法:

  • 在 GNN 中利用边缘特征
  • 【运营商|可以改善图神经网络,提升GNN性能的三个技巧】GNN 的自我监督预训练
  • 分离前置和下游任务
利用边缘特征利用边缘特征的想法在很大程度上取决于正在使用的数据类型 。如果数据包含(多维)边缘特征 , 则利用边缘特征可以对模型的性能产生影响 。
但是很少有已建立的 GNN 模型架构支持多维边缘特征? 。以到我的经验 , 使用过并且效果很好的一个简单的解决方法是创建人造节点:
通过使用人造节点 , 可以继续使用以前使用的相同模型 。而唯一要改变的是图本身 , 新增节点会使图变得更复杂 。每条边都将成为连接到原始深蓝色节点的自身节点(浅蓝色) , 而不是保存边特征的边 。

通过将边缘特征作为人造节点的节点特征传递给模型来间接利用边缘特征 。如果边缘特征与任务相关 , 这可以提高模型的性能 , 但也会增加复杂性 。并且需要考虑向模型中添加更多 GNN 层(以允许更多邻居跳) 。人造节点可以使 AUC 增加约 2%(我的经验) 。
除此以外还可以创建自己的 GNN 层实现 。这听起来很难; 但是如果使用 DGL 之类的图学习库 , 那绝对是可行的 。
例如 , 下面根据 GAT1? 和 R-GCN1 的现有想法制定了自己的实现 , 称之为 Edge-GCN11:

我自己的 Edge-GCN 公式(v 代表节点 , e 代表边 , sigma 是非线性激活函数 [在这种情况下为 RELU
, alpha 是每个关系类型的学习注意力分数 , c 是归一化常数)
Edge-GCN 使用注意力机制来学习边缘与节点特征对所有不同关系类型的重要性11 。E-GCN 架构在 AUC 中将 GNN 模型的结果提高了约 2%(人造节点也是如此) 。
自监督预训练这可能是提高 GNN 性能的最重要技巧 。 尽管预训练 GNN 已经在理论上进行了探索12 , 但在实践中的应用仍然很少? ? ? 。