GNN
数据域的角度进行区分:
数据域(欧几里得数据与非欧几里得数据) - 知乎 (zhihu.com)
gnn的任务和工作方式:
图神经网络(GNN)最简单全面原理与代码实现! - 知乎 (zhihu.com)
(六)节点预测与边预测任务 - 知乎 (zhihu.com)
gnn输入是图,输出是更新后的图。
工作方式包括:GNN,GCN,GAT。区别是消息传递机制不同,然而无论是哪种机制,其核心目的都是转化原始图,获得能够更好体现图的表示
更新的步骤是:消息传递(Message Passing);聚合(Aggregation);更新(Update);
gnn工作的直观的例子:
初始图示例:(属性向量如何获取见附录)
- 节点 A: 属性向量 [2, 3]
- 节点 B: 属性向量 [1, 4]
- 节点 C: 属性向量 [3, 2]
- 节点 D: 属性向量 [4, 1]
消息传递:节点之间根据连接关系传递消息,每个节点接收邻居节点的属性向量。
邻居节点通常指的是与当前节点直接相连的,比如A关注了B,C。就会获取到他们的信息(比如兴趣爱好,动态)
节点 A 接收来自节点 B 和 C 的属性向量。
节点 B 接收来自节点 A 和 C 的属性向量。
节点 C 接收来自节点 A 和 B 的属性向量。
节点 D 作为孤立节点没有邻居。聚合:对于每个节点,将接收到的邻居节点属性向量进行聚合。
节点 A 聚合来自节点 B 和 C 的属性向量:[1, 4] + [3, 2] = [4, 6]
节点 B 聚合来自节点 A 和 C 的属性向量:[2, 3] + [3, 2] = [5, 5]
节点 C 聚合来自节点 A 和 B 的属性向量:[2, 3] + [1, 4] = [3, 7]
节点 D 作为孤立节点无需聚合。更新:将聚合后的信息与节点的属性向量进行融合,得到新的属性向量。
节点 A 更新:[2, 3] + [4, 6] = [6, 9]
节点 B 更新:[1, 4] + [5, 5] = [6, 9]
节点 C 更新:[3, 2] + [3, 7] = [6, 9]
节点 D 作为孤立节点无需更新。
更新后的图示例:
- 节点 A: 属性向量 [6, 9]
- 节点 B: 属性向量 [6, 9]
- 节点 C: 属性向量 [6, 9]
- 节点 D: 属性向量 [4, 1]
上面的例子类似最简单的原始gnn,原始gnn采用sum求和传递机制。
图神经网络和一些GNN应用程序:你需要知道的一切 (neptune.ai)
GNN 是可以直接应用于图形的神经网络,并提供了一种执行节点级、边缘级和图级预测任务的简单方法
附录
属性向量获取过程
假设我们有一个社交网络,其中包含3个用户节点。我们希望为每个用户节点生成属性向量,以表示其特征。
我们收集了关于这3个用户的信息,并将其表示为一个表格:
用户 | 年龄 | 性别 | 兴趣爱好 |
---|---|---|---|
A | 25 | 男 | 电影、音乐 |
B | 30 | 女 | 旅行、阅读 |
C | 20 | 女 | 运动、游戏 |
对于每个用户节点,我们可以将其属性表示为一个向量。例如,我们可以使用独热编码来表示性别和兴趣爱好,将其转换为二进制向量形式。
通过独热编码和其他特征处理方法,我们可以得到每个节点的属性向量:
- 节点 A: [25, 1, 0, 1, 0, 0, 1, 1, 0, 0] (年龄为25,性别为男,兴趣爱好包括电影和音乐)
- 节点 B: [30, 0, 1, 0, 1, 1, 0, 0, 1, 0] (年龄为30,性别为女,兴趣爱好包括旅行和阅读)
- 节点 C: [20, 0, 1, 0, 0, 1, 0, 1, 0, 1] (年龄为20,性别为女,兴趣爱好包括运动和游戏)
可以看到,原始的向量表示,不能体现节点与其他节点之间的连接关系,因此我们希望进一步处理来获取能够体现他们相似性的表示