图神经网络入门


感谢:https://distill.pub/2021/gnn-intro/ 博客

https://www.bilibili.com/video/BV1iT4y1d7zP 李沐介绍视频

0. 前言

首先,让我们确定什么是图。图代表了一组实体(结点)之间的关系(边)。

V node 节点

E link 连接

U master node 整个图

1. 描述(抽象)

为了进一步描述每个节点、边或整个图,我们将图中的每一部分信息进行储存。

在存储方面 我们存下了点,边,整个图的信息 进行存储

图 也分为有向图和无向图

2. 图的实例化讲解

作者 使用了两个反直觉的数据类型用图来表示

2.1 图像

我们通常认为图像是具有图像通道的矩形网格,将它们表示为数组(例如244x244x3的浮点)。另一种思考图像的方式是具有规则结构的图,其中每个像素代表一个节点,并通过边连接到相邻的像素。每个非边界像素正好有8个邻居,每个节点存储的信息是一个代表像素RGB值的3维矢量。

通过邻接矩阵来可视化图形的连通性的一种方法。我们对节点进行排序,在这种情况下,在一个简单的5x5的笑脸图像中,每个节点都有25个像素,如果两个节点共享一条边,就用一个条目来填充n×n的矩阵。请注意,下面这三种表示方法都是对同一份数据的不同看法。

图像的三种表示方法

2.2 文本

我们可以通过为每个字符、词或标记关联索引来数字化文本,并将文本表示为这些索引的序列。这就形成了一个简单的有向图,其中每个字符或索引都是一个节点,并通过一条边与后面的节点相连。

当然,在实践中,这通常不是文本和图像的编码方式:这些图表示是多余的,因为所有图像和所有文本都会有非常规则的结构。例如,图像的邻接矩阵有一个带状结构,因为所有的节点(像素)都是以网格方式连接的。文本的邻接矩阵只是一条对角线,因为每个词只与前一个词和后一个词相连接

3. 什么样子的问题会用到图结构

3.1 图级

看起来很弱智的 找圈圈个数

3.2 节点级

​ 节点级任务关注的是预测图中每个节点的身份或角色。
​ 节点级预测问题的一个典型例子是Zach的空手道俱乐部。
​ 该数据集是一个单一的社会网络图,由在政治裂痕后宣誓效忠于两个空手道俱乐部之一的个人组成。正如故事所言,Hi先生(教练)和John H(管理员)之间的争执在空手道俱乐部中造成了分裂。节点代表空手道练习者个人,边则代表这些成员在空手道之外的互动关系。预测问题是对一个给定的成员在争斗后是否会效忠于Hi先生或John H进行分类。在这种情况下,一个节点与教官或管理员之间的距离与这个标签高度相关

[]

​ 按照图像的类比,节点级预测问题类似于图像分割,我们试图标记图像中每个像素的作用。对于文本,类似的任务是预测句子中每个词的语音部分(如名词、动词、副词等)。

3.3 边级

通过语义分割 分析出实体对象 然后对实体对象之间的关系 使用机器学习进行预测 之后用图来进行表示

4. 图的表示

XsLtgK.md.png

自己的看法

  1. dim = 0 的位置上 每个节点一一对应

  2. 节点有节点 自己的分类 边也是一样

  3. 如果想表示一个图两个节点是否相互连接 可以使用【node,node】来表示

  4. global 也有其自己的分类表示

4.1 网络表示

这个GNN在图的每个分量上使用一个单独的多层感知器(MLP)(或你最喜欢的可微分模型);我们称之为GNN层。对于每个节点向量,我们应用MLP并得到一个学习的节点向量。我们对每条边做同样的工作,学习每条边的嵌入,也对全局背景向量做同样的工作,为整个图学习一个单一的嵌入。

4.2 通过池化信息 来完成图预测(简单gnn模型)

可能 我们知道了边的信息 如果通过边的信息来 计算 节点的信息 对节点进行预测
池化分两步

  1. 收集节点的边信息

  2. 通过汇总这些信息来进行预测

所以 如果我们只知道 边的信息 使用池化来路由(或传递)信息到它需要去的地方。该模型看起来像这样。(这个机制貌似叫 消息传递)

使用点信息来 信息传递出 边的总类

使用点信息来算出 图的种类

对点的信息进行汇聚 然后 就像cnn 一样 对这个图的信息进行处理

Xsx3pn.md.png

4.3 通过信息传递 完成 图的更新

信息传递分为三步

  1. 收集每个节点 所有相邻节点的嵌入 g函数

  2. 通过聚合函数 聚合消息

  3. 所有汇集的消息 通过一个更新函数(通常学习神经网络)

正如池化可以应用于节点或边一样,消息传递也可以在节点或边之间发生。

这些步骤是利用图的连接性的关键。我们将在GNN层中建立更详细的消息传递变体,以产生表现力和力量不断增强的GNN模型。

XyS3LV.md.png