李宏毅机器学习2022年学习笔记(六)-- 图神经网络 (GNN)
一 Introduction
GNN 可以理解为是由 Graph(图) + Nerual Networks 组合而成的,图结构应该都在数据结构与算法里了解得很清楚,关键要解决的问题是:将图的结构和图中每个节点和边的特征转化为一般的神经网络的输入(张量)。
GNN 可以应用于许多分类和生成的场景,例如:
① 对化学分子结构特征进行分类,判断其特征是否属于会导致突变的那类

② 学习若干个分子结构特征后,能够去生成类似结构的分子(GraphVAE)
二、实现方法(模拟卷积神经网络)
将图结构中各节点和边的特征信息代入到特征矩阵中,之后选择相应大小的过滤器进行卷积神经网络操作。卷积有两种方式:基于空间的卷积(Spatial-based convolution)和基于频域的卷积(Spectral-based convolution)
1. 基于空间特征的图神经网络(Spatial-based Convolution)
思想:
(1)Aggregate:模仿卷积神经网络工作(每一次操作考虑的是某个点的所有联通邻居的特征信息,因此在 GNN 当中也是通过这样的方式下更新下一层(在GNN中叫做aggregation),当然会包括这个节点本身的特征 feature。
(2)Readout:整个图所有结点的 feature 集合起来,用一个特征值代表整个 graph 的信息
衍生模型应用:
① NN4G (Neural Network for Graph)
input layer 首先经过基本的 embedding 之后到 hidden layer 0。然后更新的话是将其相邻的节点相加然后乘以权重再加上之前 input layer 的原始输入。
Aggregate 更新方法:
每个隐藏层都是一个图,图中每个结点的权值 = 一个待学习的参数 w × 上一层这个结点所有相邻结点的权值和 + 原本在第一层 input layer 这个结点输入的值(例如:w1 * x3 就是 h30 )
需要注意的是,全连接神经网络的神经元是固定的,因此对于每个图输入后,最后进入全连接层的 vector 维度应该是一样的。因此 NN4G 使用的方法特点是:对于每个图都固定隐藏层数量,然后取每层的均值送入全连接神经网络,这样可以避免图大小的影响
关于为什么要相加的问题:如果不用相加的话,你就很难去处理节点间邻居数量不同这个巨大的区别 。另外,相加是最简单也是被证实最有效的利用邻点信息的方法。
Readout 方法:
通过求出整个图中的每个顶点间的特征均值(按照层数求平均),然后各自乘以相应的权重(需要学习)再把每个结点得到的结果相加。
②DCNN (Diffusion-Convolution Neural Network )
思想:对每一层进行更新时,第 n 层看离当前节点距离 n 的节点信息。
例如在第一层,更新结点 3 首先找到与它距离为 1 的节点(有 0、2、4),然后用这三个与节点距离为 1 的 结点的原始的输入相加取平均值(mean)再乘以权重;
在第二层,更新节点 3 首先找到与它距离为2的节点(有 1 和 自己本身,注意结点 3 和 3 本身的距离也是 2),然后用这几个符合条件的结点的原始的输入相加取平均值再乘以权重。
这样就可以将每一层的节点特征组成一个矩阵,然后叠在一起。
当我们需要每个节点的feature 信息的时候,采用以下的方式来表示图中每个节点的特征:
如对节点 1 来说,也就是将每一层的结点 1 提出来,然后乘以权重得到最后结点 1 的表示。按照类似的操作可以得到其余结点的表示。
另一种方法:DGC (Diffusion Graph Convolution) —— 直接将每一层的结点 1 所在信息提出来相加求和
③ MoNET (Mixture Model Networks)
特点:与之前只是将相关联结点信息相加求和相比,MoNET 考虑到一个节点的邻居跟之间的区别(例如,有的相邻结点和该结点之前的关系可能更重要一点)
思路:
- deg(x) 表示x的出入度数
- u(x,y) 自定义的距离计算方式
这里定义的距离公式可以有不同的。也就是给每个节点不同的权重 weighted sum。
P.S. 图中有个地方写错了,第一行公式的第三个部分应该是 u3,4 而不是 u3,2。
④ GAT (Graph Attention Network)
特点:与 MoNET 相比,GAT 在定义距离公式时所用的权重 weighted sum 需要学习而得(相当于对邻居结点做 attention ,不同的邻居结点给出不同的 weight ),而不是事先规定好的。
相关文献:https://arxiv.org/pdf/1710.10903.pdf
⑤ GIN (Graph Isomorphism Network)
特点:首先把邻居结点都求加相见 + 结点自己本身信息 × 系数,不用 maxpooling 和 meanpooling(例如在下图中,a 中 每个结点的特征值都一样,若选择 maxpooling 和 meanpooling,都无法确定最后选择的到底是 v 的哪个邻居结点 )
思想:用 sum 的方式对每个相邻结点的特征值相加 + 选用多层感知器
公式中 ε 可以为 0,代表 其实 Graph 中所有相邻结点和其本身节点相加就可以。
二、基于频谱的图神经网络(此部分知识与信号系统课程相关,等我先补一下这方面的知识再更新完这部分)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)