图神经网络(GNN)

原文链接

原文有作者写的playground,并且网页上的图很多具有互动性,推荐大家去玩一下~~~

图的几个属性


图片1
图一共有三个部分:节点(node)、边(edge)、全局(global)
每个结点我们都用一个embedding来编码,具体如何实现的,暂时还不清楚,现在我们先假设已经对整个图进行了编码。

图信息的存储


图的几类信息需要表示:nodes V, edges E, global-context U and connectivity,其中V, E, U已经用embedding向量表示出来了,主要是图之间的关联性如何表示。

邻接表存储

  • 邻接表存储的空间大小是 n n o d e ∗ n n o d e n_{node}*n_{node} nnodennode,如果我们的节点数量过多,将会内存爆炸。
  • 同时,邻接表存储对节点的顺序十分敏感,不同的顺序,会有完全不相同的邻接矩阵,但他们表示的是同一张图。下图是同一张图不同顺序所表示的邻接矩阵。
    图片2

所以我们排除了邻接表存储,如何解决空间大小和顺序无关的问题是关键,下图是另一种构造方式,这种方式对节点顺序没要求,并且存储空间也不大:
图片3

图结构需要处理的任务


Graph-level task

全局图的任务,例如判断该图是否存在环
在这里插入图片描述

Node-level task

节点任务,例如判断某个节点属于哪个类别,下图是个二分类问题
在这里插入图片描述

Edge-level task

边的任务,判断图中某条边所代表的信息
在这里插入图片描述

GNN


The simplest GNN

下面我们构造一种最简单的GNN,就是将U, V, E这些向量,分别作为输入,中间经过一个f,这个f可以是mlp(多层感知机),也可以是其它你喜欢的神经网络,并且我们可以将U, V, E合并在一起作为输入更新,只要它们的维度相同。同时我们注意到,此处并没有用到图的属性间的相关性。根据任务不同,我们分别对U, V, E做预测。
在这里插入图片描述

Pooling Information

汇聚信息,我们试想一个任务,我们只知道你和我是好基友,让你预测你和我是男生还是女生。我们只有图的边的信息,并没有节点的信息,如果有的话我们也不需要预测了~~~所以我们需要将节点周围的边的信息汇聚到节点上面,从这里开始我们使用了图的相关性,做法分为两步:

  1. 先将与节点相关的信息收集到一个矩阵里面
  2. 然后将它们相加,或者取平均、最大值

上面总结说句人话就是,将节点周围的边的向量相加同时加上一个全局向量U,之后再将得到的向量丢到我们的预测模型里面做最后的预测即可。当然根据任务不同,我们所需要汇聚的信息也不同,例如有可能我们只有节点信息,但需要对边的信息做预测,或者对全局做预测。
在这里插入图片描述
在这里插入图片描述

Passing messages between parts of the graph

“邻居”之间传递信息,以便于让我们的模型学习到整个图的相关性。具体的传递做法分为三步,以下用节点举例:

  1. 将该节点周围的节点的embedding提取到一个矩阵当中。
  2. 再将该节点本身和提取到的节点做一个汇聚操作,例如相加、平均
  3. 再将操作过后的向量最为 f 的输入,用来更新该节点

还是说句人话,就是将周围的节点信息包括自己本身相加起来最为模型的输入,这样经过几步迭代之后,该节点就汇聚很大范围的信息了,这里是不是很像CNN。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Learning edge representations

学习边的信息,如果我们只有边的信息,没有节点的信息,我们不一定要在最后预测的时候做才汇聚边的信息,可以在每个节点更新的过程中就做汇聚,如果边和节点embedding的向量维度不同,中间可以通过一个线性映射投影到同一维度。
在这里插入图片描述
对于先将节点信息汇聚到边,也可以先将边的信息汇聚到节点,或者直接交叉汇聚。
在这里插入图片描述

Adding global representations

加上全局信息,之前介绍 pooling(汇聚)的时候,我们加上了global embedding(全局信息),现在解释一下原因。对于一个节点,如果它离其它节点很远的话,可能需要迭代很多层的 passing information 才可以获取它的信息,而全局节点里面包含了所有节点的信息,这使得其它节点可以更快速的获取全局信息,所以有时候也称 global representation of a graph (U) 为 master node,通过下面这张图我们来看看master node是如何参与更新的
在这里插入图片描述

小结


我们这里只是介绍了GNN是什么东西,并没有深入的讨论,如果感兴趣的话,可以参考这篇论文 The Graph Neural Network Model,虽然这篇论文我是没看懂了。还有就是,推荐大家去原文上看一看,这个文章的剩余部分可以在原文看到。如果觉得文字很无聊,推荐去看李沐老师的视频 零基础多图详解图神经网络(GNN/GCN)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值