《A Gentle Introduction to Graph Neuron Network》学习笔记

我是听李沐的讲解记得笔记。

原始论文(其实是博客):A Gentle Introduction to Graph Neural Networks (distill.pub)

讲解课程:零基础多图详解图神经网络(GNN/GCN)【论文精读】_哔哩哔哩_bilibili

背景介绍

图神经网络是个比较新的领域,刚刚开始应用在药物发现,物理模拟,虚假新闻的检测,交通检测,推荐系统等等(可以再查查。应用落地是机遇)

哪些数据可以用图存储?

 一些比较常见,例如用有向图存储社会关系网络,用有向图存储文章之间的引用关系,用无向图各个地点和他们之间的距离等等。

但是一些比较特殊:比如文章和图像和分子也可以看成图。

图片表示成无向图

图的节点:用一个三维的向量存储RGB的信息。每个节点有8个节点与之相连。

图的边:表示两个像素有没有相邻。

图的存储:用邻接矩阵来存储。这个矩阵比较稀疏。

(左:原始图片 右:图的直观画法 中:存储图的邻接矩阵)

 文本表示成无向图

图的节点:每个单词。每个节点和他左右两个词相连。

图的边:表示两个单词有没有相邻

图的存储:邻接矩阵。

 分子表示成无向图

图的节点:每一个原子。

图的边:相邻原子间的距离(如单键,双键)

图的存储:邻接矩阵。

哪些任务可以用图解决?

 图层面的问题

例如根据分子的图,预测他可能的化学性质(有没有香味,有没有对某种疾病的治疗效果)。

又比如,根据整个句子的图,判断他的情感倾向。

节点层面的问题

例如一个公司的社交网络,用于预测:给定一个员工,他可能会隶属于哪个老板。

例如图像的物品分割。(本质上是给定一个像素,判断他应该和哪些像素在一起)

又例如文本的词性标注。

边层面的问题

场景理解。例如给一张图片,把里面背景去掉,只留下人物,判断人物之间的关系。

 

运用图神经网络会遇到什么挑战?

首先是如何让神经网络与图这种数据结构相容(compatible)。

传统的神经网络中流动的数据主要是向量或矩阵。而要让图在神经网络中流动,就得想办法表示图。

图主要有四种数据:节点,边,整个图的范围U,以及节点之间的连接性。前三种好办。博客中给出了解决办法:

但是节点的连接性不好存。我们首先想到的是用稀疏矩阵来存。但是这样会导致一些问题:

一是这个稀疏矩阵可能很大,会导致空间浪费

二是节点是不定的,变化的,稀疏矩阵存储不好调整

三是一个表达同一个连接可能有许多邻接矩阵。这种不同的原因是:置换节点的顺序,会导致表示的矩阵不同。也就是说,他们没有置换不变性(they are not permutation invariant)。而矩阵不同会导致在神经网络中的表现不同,做出来的结果不一样。

原文中关于置换可变的说明。(可以去原博客中玩玩,他可视化做得很好)

原博客:A Gentle Introduction to Graph Neural Networks (distill.pub)

所以文章提了另外一种储存方式:邻接列表!

 

 这样就既做到了存储高效,又保证了置换不变性。

接下来,就是如何利用神经网络处理邻接列表了

做一个GNN模型

什么是GNN

GNN是对图中所有元素(包括顶点,边,全局U)的一个变换,并且保持住图的对称信息(置换不变性)从而使不同的表示方法,做出来的结果一样。

  最简单的GNN

对顶点向量,边向量和全局向量分别做三个MLP(multilayer perceptron)。

 其中这些MLP只对节点,边和全局的属性做了改变,而不对位置顺序改变(不做置换)。

用GNN做分类任务

就拿我们之前提到的一个节点层面的分类任务来说:一个公司的社交网络,用于预测:给定一个员工,他可能会隶属于哪个老板。

这个任务是个多分类问题。和以前的神经网络没有什么区别,就做个输出为N的全连接层,最后来个softmax可以了。注意,在这里,所有顶点共享一个全连接层的参数。

这个是比较简单的。复杂一点的:如果我们没有这个顶点的向量,却还想对他做预测,怎么办呢?

这时候要用到pooling技术(池化,或者叫汇聚)。

具体是这样做的:把与这个节点链接的节点拿出来,再把全局的向量拿出来。把这些信息汇集起来(通常是加起来),就得到了这个点的向量。之后像之前一样处理就好了。

同理,要是缺边的信息,也可以通过汇聚来实现。

在节点之间传递信息

为什么要在节点之间传递信息?

为了让神经网络学习到整个图的连接性,我们要把每个节点和他相邻的节点一起考虑进去训练。这个步骤是利用图的连接性的一个关键步骤。

所以首先,我们要对每个节点和与他相邻的节点做一个pooling,然后把这个汇聚的信息通过MLP。

这样就做好了一个信息传递层。

这和传统的卷积有点像。信息传递和传统卷积本质上来说,都是聚合节点周边的信息来更新节点的值。

这样不断聚合后,就完成了一个长距离的信息传递。最后,我们就可以得到整个图的连接信息了。

在节点和边之间传递信息

和节点之间信息传递类似,节点和边之间的信息传递有两种方法:

1.把一条边连接的两个顶点向量加到这条边的向量上

2.把一个顶点连接的边的向量加到这个顶点上

(如果两者维度不一样的话,需要做一个投影)。

这两种方法都可以,但是结果会不一样。目前也没有固定的结论,说是哪种更好。所以我们一般两种方法交替使用。

将全局信息纳入考虑

由于在节点之间传递信息时,只涉及到相邻的节点。所以K层只能传K步那么远。

所以如果图很大,那很远的节点就无法进行信息传递。

解决方法是:加入一个master node,或者叫context vector。这是一个虚拟的点,和所有的点和边相连。这就是U。

到此为止,节点,边和全局的信息交流就都有了。这样子在某个节点做预测的时候,就可以把它相连的节点,边,还有全局的信息一起拿过来做预测。这有点像attention机制。

一个GNN playground

博客里面加了一个自己可以调超参数的训练模型。里面的超参数包括模型的层数,信息传递的方法(是求和,求最大,还是求平均),在哪些部分之间传递信息,每个属性的embedding(嵌入)有多大等。然后会显示最终的AUC。

我自己调的 效果最好的是0.82

此外,他们下面也附上了他们做的实验以及实验结果。

总体而言的结论就是:

pooling的方式没有太大影响

层数越大,效果上限越高。但是只是上限高,能否达到上限还需要调参数。

 GNN对参数还算是比较敏感的

技术

特殊的图

像左边的,就是一种图中有多条边相连。(比如想社会关系,两个人之间可能既是亲人,也是朋友)

像右边的,就是用超节点链接多个节点(有点像之前的全局向量) 

对图进行采样和batch

之前我们做神经网络,总是随机选几个batch训练。而现在在图这边,随机选几个图的时候,各个图的节点和数量不一样。这就导致不是很好做batch。

所以我们要选一些能够代表整个图特征的子图来训练。这个选取的过程就是采样。

文章中介绍了四种采样方法。

此外,采样还有一个好处:减少内存。

归纳偏置(Inductive biases)

大意是说:每个模型都有基于一些假设,如果没有这种假设,就什么都学不出来。这个假设就是Inductive biases

例如,卷积神经网络是Inductive biases是空间不变性,RNN的Inductive biases是时序性。

而图神经网络的Inductive biases是置换不变性。

此外它还提了各种技术

但是都没有讲的很细。。。以后要是有深入了解再来补充吧。

感觉这方面只有宽度,没有深度。没有深入研究这个领域的话,看了就忘了,,,

 

杂谈

distill博客上的特点:使用图片比较多,比较直观。

这篇文章的图片还可以交互,很好玩。

图论入门 图论是一门研究图的性质和关系的数学分支。图是由节点和边组成的数据结构,节点表示对象,边表示对象之间的关系。图论可以用于解决许多实际问题,如社交网络分析、路线规划、电路设计等。 图可以分为有向图和无向图。有向图中的边有方向,表示从一个节点到另一个节点的单向关系;无向图中的边没有方向,表示两个节点之间的双向关系。 图还可以分为加权图和非加权图。加权图中的边有权值,表示两个节点之间的距离或代价;非加权图中的边没有权值,表示两个节点之间的关系仅仅是存在或不存在。 图的表示方法有邻接矩阵和邻接表。邻接矩阵是一个二维数组,其中每个元素表示两个节点之间的边;邻接表是一个链表数组,其中每个链表表示一个节点的邻居节点。 图的遍历方法有深度优先搜索和广度优先搜索。深度优先搜索从一个节点开始,沿着一条路径一直走到底,然后回溯到上一个节点继续搜索;广度优先搜索从一个节点开始,先访问它的所有邻居节点,然后再访问邻居节点的邻居节点,以此类推。 图的算法有最短路径算法和最小生成树算法。最短路径算法用于找到两个节点之间的最短路径,常用的算法有Dijkstra算法和Bellman-Ford算法;最小生成树算法用于找到一个无向图的最小生成树,常用的算法有Prim算法和Kruskal算法。 图论是计算机科学中的重要分支,它提供了许多解决实际问题的方法和工具。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值