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=1,
s
0
=
1
s_0=1
s0=1。
从后往前计算公式如下:
r
i
−
1
=
(
r
i
−
1
)
∗
s
i
+
k
i
−
1
r_{i-1} = (r_i-1)*s_i + k_{i-1}
ri−1=(ri−1)∗si+ki−1
2.2 图信号处理
通过对傅里叶变换、滤波等信号处理基本概念的迁移,来研究对图信号的压缩、变换、重构等信号处理的基础任务
其与图卷积模型密不可分,一方面有助于了解图卷积模型的定义和演变,另一方面为图卷积模型的理论研究提供了十分有用的工具
图信号的空域和频域的理解
图信号处理的空域和频域的理解
前置知识
矩阵乘法
设两个矩阵 A ∈ R K × M A \in R^{K \times M} A∈RK×M, B ∈ R M × P B \in R^{M \times P} B∈RM×P,对于 C = A B C=AB C=AB,有三种计算方法
- 内积视角:将A视作一个行向量矩阵,将B视作一个列向量矩阵
C i j = A i , : B : , j C_{ij}=A_{i,:}B_{:,j} Cij=Ai,:B:,j - 行向量视角:将B视作一个行向量矩阵,将A视作系数矩阵,
第
i
行
=
A
第
i
行
∗
B
整体
第i行=A第i行*B整体
第i行=A第i行∗B整体
C i , : = ∑ m M A i m B m , : C_{i,:}=\sum_{m}^{M}A_{im}B_{m,:} Ci,:=m∑MAimBm,: - 列向量视角:将A视作一个列向量矩阵,将B视作系数矩阵,
第
j
列
=
B
第
j
列
∗
A
整体
第j列=B第j列*A整体
第j列=B第j列∗A整体
C : , j = ∑ m M B m j A : , m C_{:,j}=\sum_{m}^{M}B_{mj}A_{:,m} C:,j=m∑MBmjA:,m
图信号与图的拉普拉斯矩阵
拉普拉斯矩阵:用来研究图的结构性质的核心对象,定义:
L
=
D
−
A
,
L=D-A ,
L=D−A,
其中,D是一个对角矩阵,
D
i
i
=
∑
j
A
i
j
D_{ii} = \sum_j A_{ij}
Dii=∑jAij表示的是节点
v
i
v_i
vi 的度
D为度矩阵,A为邻接矩阵
拉普拉斯矩阵原子拉普拉斯算子,将该算子的作用退化到离散的二维图像空间,就成了非常熟悉的边缘检测算子
0 | 1 | 0 |
---|---|---|
1 | - 4 | 1 |
0 | 1 | 0 |
处理图象时,模板如上,拉普拉斯算子描述了中心像素与局部上下左右四邻居像素的差异,该性质通常被用来当作图像上的边缘检测算子
同理,在图信号中,拉普拉斯算子也被用来描述中心节点与邻居节点之间的信号的差异
拉普拉斯矩阵是一个反映图信号局部平滑度的算子
时空域与频域
空域、时域和频域是信号处理和图像处理中的三个重要概念,它们分别表示信号或图像在不同维度上的表示方式。
空域(Spatial Domain)
- 定义:空域是指图像在空间坐标上的表示。对二维图像而言,空域中的像素值是图像在特定位置上的亮度或颜色值。
- 应用:在空域中进行的操作包括滤波、锐化、平滑、边缘检测等。这些操作直接作用于图像的像素值。
时域(Time Domain)
- 定义:时域是指信号在时间坐标上的表示。时域信号表示信号随时间变化的幅值。
- 应用:时域分析用于描述和处理信号随时间变化的特性,例如声音信号的波形、心电图信号等。在时域中,可以进行的操作包括卷积、时域滤波、相关性分析等。
频域(Frequency Domain)
- 定义:频域是指信号在频率坐标上的表示。通过傅里叶变换,可以将时域或空域信号转换为频域表示。频域表示信号的频谱,即信号在不同频率成分上的幅度和相位信息。
- 应用:频域分析用于分析信号的频率特性,例如音频信号的频谱、图像的频谱分析等。常见操作包括频域滤波(低通滤波、高通滤波、带通滤波)、傅里叶变换、逆傅里叶变换等。
对比
- 空间 vs 时间 vs 频率:空域和时域都是信号或图像在原始坐标系(空间或时间)上的表示,而频域表示则通过变换展示了信号或图像的频率成分。
- 操作:在空域和时域中,操作通常直接作用于原始数据;在频域中,操作通常通过变换(如傅里叶变换)来处理频率成分。
- 应用领域:空域主要用于图像处理,时域主要用于时间序列信号处理,频域则广泛用于信号和图像的频率分析。
图傅里叶变换
傅里叶变换是数字信号处理的基石,将信号从时域空间转换到频域空间(频域视角给信号处理带来了极大的便利)
理论定义:信号的滤波、卷积等操作
理论指导:信号的去噪、压缩、重构等任务
图信号处理理论体系:将图信号由空域视角转换到频域视角
权重就是图信号在对应傅里叶基上的傅里叶系数
图滤波器
对给定图信号的频谱中各个频率分量的强度进行增强或衰退的操作
2.3 基本模型概述
2.3.1 GCN与CNN的联系
时域中的卷积运算等价于频域中的乘法运算
- 图像是一种特殊的图数据
- 从网络连接方式来看,二者都是局部连接(大大减少了单层网络的计算复杂度)
- 二者卷积核的权重是处处共享的(有效地避免过拟合现象的出现)
- 从模型的层面来看,感受域随着卷积层的增加而增加
区别:图卷积与卷积看起来都是利用周围的特征,但是图中每个点的邻居都是不确定的
2.3.2 端(数据)对端(任务)学习机制
图数据中的两部分信息:
- 属性信息:描述图中对象的固有性质
- 结构信息:描述对象之间的关联性质
常见任务:
- 节点分类,对每个节点进行预测,不同点是否有连接预测
- 整个图分类,部分图分类等,不同子图是否相似,异常检测等
GCN归根究底还是要完成特征提取操作,只不过输入对象不是固定格式
2.3.3 频域视角
GCN是一个低通滤波器
2.3.4 面临问题——过平滑
GCN模型不能像CNN模型一样堆叠过深,使用多层GCN学习,相关任务效果可能不增反降
多层GCN的过平滑问题:使用多层GCN之后,节点的区分性变得越来越差,节点的表示向量趋于一致,相应的学习任务变得更加困难
解决方法
- 频域视角
如果对一个图信号不断的执行平滑操作,图信号最后就会变得处处相等,也就完全没有可区分性了 - 空域视角
- 层级聚合,通过跳跃连接与最终的聚合层相连,聚合操作可以取如拼接、平均池化、最大池化等
- 回到频域视角去调节图滤波器的值
2.3.5 模型实现
获取特征:将信息交给神经网络即可
交给GCN:
- 各节点的输入特征
- 网络结构图
半监督学习(GCN优势):
- 不需要全部标签
- 用少量标签也能训练
- 计算损失时只用有标签的
基本思想
针对主要节点,计算其特征:平均其邻居特征(包括自身)后传入神经网络
网络层数
跟卷积类似,GCN也可以做多层,每一层输入的还是节点特征
将当前特征与网络结构图继续传入下层不断计算下去
每个GCN层中的每个点都要和自己的邻居做更新,更新完放入激活层(GCN层数较小,防止过平滑)
基本组成
G:输入图
A:图的邻接矩阵
D:图的度矩阵,各个节点的度
F:图的特征矩阵,每个节点的特征
特征计算
实质:邻接矩阵与特征矩阵进行乘法操作(行向量X列向量),表示聚合邻居信息
问题:只考虑邻居,没考虑自身 A ~ = A + λ I N \tilde{A} = A + \lambda I_{N} A~=A+λIN
改进:
- 在邻接矩阵中加上自身
- 度矩阵求倒数
- 计算矩阵scale
目前公式: D ~ − 1 ( A ~ X ) \tilde{D}^{-1}(\tilde{A}X) D~−1(A~X)
由于左乘相当于对行做归一化操作,需要处理列,再右乘
改进公式: D ~ − 1 A ~ D ~ − 1 X \tilde{D}^{-1} \tilde{A} \tilde{D}^{-1}X D~−1A~D~−1X
缺点:行和列都做一次归一化处理,相当于两次
改进公式: D ~ − 1 / 2 A ~ D ~ − 1 / 2 X \tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2}X D~−1/2A~D~−1/2X
基本公式
A ~ = D ~ − 1 / 2 A ~ D ~ − 1 / 2 X \tilde{A} = \tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2}X A~=D~−1/2A~D~−1/2X,对左右进行归一化处理
GCN的层数,在多个图数据集中,都可以发现两三层的比较合适,多了反而差
三、GAT 图注意力网络
图注意力机制
注意力机制的核心:对给定信息进行权重分配。权重高的信息系统对其进行重点加工
注意力机制三要素:
Query:当前中心节点的特征向量
Source:所有邻居的特征向量
Attention Value:中心节点经过聚合操作后的新的特征向量
本质:在GNN的基础上引入权重矩阵,对邻接矩阵重构(加权)
GAT两种计算方式:
全局图注意力:节点与图上所有节点做attention计算(丢失了图的结构特征,运算成本巨大)
掩码图注意力:节点只与邻居节点做attention计算(利用了图的结构特征,减少了运算量)
h i ′ = σ ( ∑ j ∈ N ( i ) α i j W ∗ h j h_{i}^{'} = \sigma(\sum_{j\in N(i) } \alpha_{ij}W*h_j hi′=σ(j∈N(i)∑αijW∗hj
以下图为例展示:
邻接矩阵计算图Attention,邻接点增加权重参数并归一化,以A点为例进行邻接矩阵处理:
特征矩阵变换过程:
以A点为例,其与B、C相连,过程如下:
同样以A点为例,整体计算流程如下:
h 1 ∗ ∗ α 11 + h 2 ∗ ∗ α 12 + h 3 ∗ ∗ α 13 = h 1 ′ h_1^{*}*\alpha_{11} + h_2^{*}*\alpha_{12} + h_3^{*}*\alpha_{13} = h_1^{'} h1∗∗α11+h2∗∗α12+h3∗∗α13=h1′
代码实现对比:
四、Graphsage 图采样聚合网络
Step1 Neighbor Sampling 邻居采样
对于目标节点A:
考虑一阶邻居
A:[B,C,G]
考虑二阶邻居
B:[A,D,E,G]
C:[A]
G:[A,B]
对于二阶不足四个邻居的节点进行重采样补齐,如果邻居节点大于4,为欠采样,多余的节点会被舍弃
Step2 Aggregation 聚合
考虑以下GAT,GCN聚合操作
原理详解
参考视频
【零基础多图详解图神经网络(GNN/GCN)【论文精读】】
英语博客原版distill