一、前言
本文为学习图神经网络过程中对搜集到的知识点进行汇总,参考了一些优质博主的学习笔记以及本人的见解,欢迎大家阅读原博文进行学习。同时,本人认知及知识储备有限,如有理解错误,欢迎大家与我进行讨论。以下是参考博文来源:
这篇来自distill的博文能在网页进行交互,可以帮助大家更好的进行理解:
A Gentle Introduction to Graph Neural Networks (distill.pub)https://distill.pub/2021/gnn-intro/以下两篇为学习过程中参考的博文
【图神经网络实战】深入浅出地学习图神经网络GNN(上)-CSDN博客https://blog.csdn.net/weixin_51545953/article/details/127160151
二、什么是图?
图是由一些点和一些线构成的,能表示一些实体之间的关系,图中的点就是实体,线就是实体间的关系。如下图,V是顶点,E是边,U是整张图。attrinbutes 是信息的意思,每个点、每条边、每个图都是有信息的。
怎么表示一张图,参考下面的例子
每个顶点、边和整张图都可以用一个向量来表示,在这个例子中,顶点的向量有六个值,柱体的高矮就表示该值的大小,每条边用一个长为8的向量来表示,全局用一个长为5的向量来表示。
图神经网络要做的事(整合特征):
- 为每个节点整合特征向量,根据其对节点做分类或者回归
- 为每条边整合特征向量,根据其对边做分类或者回归
- 为每张图整合特征向量,根据其对图做分类或者回归
图分为两种,一种是有向图,一种是无向图。有向图就是单边关系图,比如A暗恋B,而B并没有暗恋A,这就是一个单边关系;无向图就是互为这种关系,比如说情侣,双方互相喜欢。
三、怎么把一些内容表示成图?
1、把图片表示成图
比如说一张图片可以表示为一个244*244*3的tensor,244*244个像素,3个RGB通道。就可以像下图这样表示,点表示的是像素,边表示的是像素间的邻接关系
2、把一句话表示成图
句子中的每个单词可以表示成一个节点,有向边表示这些单词的链接关系
四、GNN中的常见任务
图上面有三种常规类型的预测任务:图层面,节点层面,边层面。
1、Graph级别任务
基于整个图,做分类和回归。
例如,给定一个分子结构图,判断它里面存在 几个环 或者 判断该分子结构属于哪一类
2、Node与Edge级别任务
先给出一张图片,然后经过语义分割将人物给分割出来,预测这个点是教练还是学员,即预测点;预测两个点之间的关系(是打架关系还是观看关系),即预测边
五、GNN是如何做预测的?
前面我们知道,节点、边和图都是向量的形式,处理向量可以采用神经网络,以MLP为例。如下图所示,节点、边和图各有一个MLP,同时,所有的点共用一个MLP、所有的边共用一个MLP。下图构成了一个GNN block,也叫GNN层。
另外,Layer N+1与上一层相比,图的连接性没变,只改变了属性向量。也就是可以继续使用初始的图结构。
如果只是简单的节点二分类任务,使用下面的网络即可
但是,如果一个节点没有属性信息,只有边存储了信息,目标是对节点进行分类,则需利用边的属性信息,这个过程称为信息聚合,聚合操作可以使用平均值、最大值、求和。如下图所示,当对一个节点进行预测时,将所有与该节点相连的边的信息进行聚合,聚合结果作为该节点的属性信息。
同理,如果只有节点信息,对边进行分类,则将与边相连的节点信息进行聚合,作为边的属性信息,图分类任务也一样。
最终的GNN结构如下:
上述是针对比较简单的分类任务,节点、边以及整个图的信息都是独立处理的;对于复杂的任务,则需要利用图的连接性信息,实现方法为消息传递,可以理解为更进一步的信息聚合,即相邻节点和边之间交换信息并影响彼此的更新
ps:图神经网络相关应用
- 芯片设计;
- 场景分析和问题推理:剧本杀中的推理、警匪片中嫌疑人的推理等;
- 推荐系统:抖音视频推荐;
- 欺诈系统与风控相关:比如贷款,分析你的收入和日常花销等分析借款额度;
- 道路交通的流量预测;
- 化学、医疗等:对化学结构进行预测、分析;
- ……