GNN简单理解
一、GNN 图神经网络综述
1 什么是图
1.1 图基础
图:表示一些实体之间的关系
- 顶点(研究的对象):顶点信息、邻点数目等
- 边(两个对象之间特定的关系):边信息、边权重等
- 全局信息:节点个数、最长路径等
- 顶点:用向量表示
- 边:用向量表示
- 全局信息:用向量表示
1.2 图的分类
无向图、有向图
连通图、非连通图
图存储
邻接矩阵:一维数组表示顶点集合,二维数组表示邻接矩阵
关联矩阵:两个一维数组分别表示顶点集合和边集合,一个二维数组表示关联矩阵
图的遍历
DFS
BFS
1.3 数据成图
图数据的基本分类:
-
同构图:图中的节点类型和关系类型都仅有一种(ps:万维网)
-
异构图:图中的节点类型或关系类型多于一种
-
属性图:相较于异构图,图数据上额外增加了属性信息
-
非显示图:数据之间没有显示地定义出关系,需要一句某种规则或计算方式将数据的关系表达出来,进而将数据当成一种图数据进行研究
1.3.1 图像转图
RGB图像:三通道,一般为三维tensor
转换如下:



邻接矩阵中蓝色的点表示图中的一条边,白色的点表示没有边
1.3.2 文本转图
通过将索引与每个字符、单词或标记关联起来,并将文本表示为这些索引的序列,从而将文本数字化。
创建一个简单的有向图,其中每个字符或索引都是一个节点,并通过一条边连接到其后的节点。

在实践中,文本和图像通常不是这样编码的:这些图形表示是多余的,因为所有图像和所有文本都有非常规则的结构。例如,图像的邻接矩阵具有带状结构,因为所有节点(像素)都以网格形式连接。文本的邻接矩阵只是一条对角线,因为每个单词只连接到前一个单词和下一个单词。
这种表示(字符标记序列)指的是文本在 RNN 中经常表示的方式;其他模型(例如 Transformers)可以被视为将文本视为完全连通的图,我们可以从中学习标记之间的关系。
1.3.3 其他转图
1.4 图结构化数据的问题类型
1.4.1 图层面任务 graph-level task
预测整个图的属性
识别图中是否有环,有几个环
从图的整体结构出发,实现分类、表示和生成任务
1.4.2 节点层面任务 node-level task
涉及预测图中每个节点的身份或角色
判别阵营(看哪个节点的关系多)
节点层面的任务主要包括分类任务和回归任务,例如:用户标签分类、恶意账户检测
1.4.3 边层面任务 edge-level task
边缘预测
顶点之间的属性(做了哪些动作)
边层面的任务主要包括分类任务和预测任务
边分类:对边的某种性质进行预测
边预测:给定两个节点之间是否会构成边
例如:社交用户的推荐业务
2 图神经网络
存储高效,对顺序无关
现在图的描述是具有置换不变性的矩阵格式,GNN是对图的所有属性(节点、边、全局上下文)的可优化转换,可保留图对称性(置换不变性)。
GNN 采用**“图入图出”**架构,这意味着这些模型类型接受图作为输入,将信息加载到其节点、边和全局上下文中,并逐步转换这些嵌入,而不会改变输入图的连接性。
2.1 简单GNN

构造方法:对于节点向量、边向量、全局向量,分别构造一个MLP(输入大小与输出大小相同),三个MLP组成基本的GNN层
最后得到属性被更新过,但是图结构没有变化的图
由于 GNN 不会更新输入图的连接性,因此我们可以用与输入图相同的邻接表和相同数量的特征向量来描述 GNN 的输出图。但是,输出图具有更新的嵌入,因为 GNN 已更新每个节点、边和全局上下文表示。
2.2 结果预测
2.2.1 节点预测

通过汇聚向量得到目标预测值
3 实验
简单GNN结构

给定 输入图 进入一系列GNN层(每一层有三个MLP 点边全局) 得到输出图(结构与输入图相同,属性变化)根据任务目标对相关属性添加合适的输出层进行预测,确实信息加入合适的汇聚层
缺陷:GNN层并没用合理的将整个图的信息更新到属性里面
解决方法如下:聚合

将节点本身的向量和其邻居的向量加在一起得到一个汇聚的向量,将汇聚的向量再进入MLP从而得到该点向量的更新
4 相关技术
信息汇聚
GNN的本质:更新各部分特征
输入为特征,输出为特征,邻接矩阵不变
二、GCN 图卷积神经网络
2.1 卷积基础
2.1.1 卷积神经网络的特点
- 局部连接:感知野(特征图上一个输出与多大区域的输入有关)
- 权值共享:不同区域使用相同的卷积核参数,一方面减少了参数量,另一方面带来了平移不变性(不管输入如何平移,总能得到相同的输出),对感知野的信息进行聚合
- 层次化表达:由低到高,感知野变大
2.1.2 特殊的卷积形式
1X1卷积
功能
- 用于信息聚合,同时增加非线性,一定程度上增加模型的表达能力
- 用于通道数的变换,可以增加或减少输出特征图的通道数
转置卷积
空洞卷积
分组卷积
深度可分离卷积
2.1.3 感受野
概念
卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。
通俗来说,指的是特征图上的每个点对应输入图的区域大小
影响因素
- 卷积层
- 反卷积层
- 池化层
- 残差连接:通过跨层连接将特征图进行element-wise的加和,很显然这样将两种特征图进行耦合的操作会改变感受野的大小。通常将较大的感受野作为最终的感受野大小。
- 连接操作
无关因素:非线性层、归一化层
计算
感受野大小的计算公式是和padding是无关的,当前层的步长并不影响当前层的感受野,感受野的增速是直接和卷积步长累乘相关的,但不包含当前层的步长,想要网络更快速得达到某个感受野的尺度,可以让步长大于1的卷积核更靠前

从前往后计算公式如下:
r l = r l − 1 + ( k l − 1 ) ∗ ∏ i = 0 l − 1 s i r_l = r_{l-1} + (k_l - 1 )*\prod_{i=0}^{l-1}s_i rl=rl−1+(kl−1)∗i=0∏l−1si
其中 r l − 1 r_{l-1} rl−1为第 l − 1 l-1 l−1层的感受野大小, k l k_l kl为第 l l l 层的卷积核大小(也可以是Pooling), s i s_i si 为第 i i i层的卷积步长。一般来说 r 0 = 1 r_0=1 r0=<