图深度学习(Graph Deep Learning) 多年来一直在加速发展。许多现实生活问题使GDL成为万能工具:在社交媒体、药物发现、芯片植入、预测、生物信息学等方面都显示出了很大的前景。
本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释,图深度学习背后的思想是学习具有节点和边的图的结构和空间特征,这些节点和边表示实体及其交互。
图
在我们进入图神经网络之前,让我们先来探索一下计算机科学中的图是什么。
图G(V,E)是包含一组顶点(节点)i∈v和一组连接顶点i和j的边eij∈E的数据结构,如果连接两个节点i和j,则eij=1,否则eij=0。可以将连接信息存储在邻接矩阵A中:
我假设本文中的图是无加权的(没有边权值或距离)和无向的(节点之间没有方向关联),并且假设这些图是同质的(单一类型的节点和边;相反的是“异质”)。
图与常规数据的不同之处在于,它们具有神经网络必须尊重的结构;不利用它就太浪费了。下面的图是一个社交媒体图的例子,节点是用户,边是他们的互动(比如关注/点赞/转发)。
对于图像来说,图像本身就是一个图!这是一种叫做“网格图”的特殊变体,其中对于所有内部节点和角节点,来自节点的外向边的数量是恒定的。在图像网格图中存在一些一致的结构,允许对其执行简单的类似卷积的操作。
图像可以被认为是一种特殊的图,其中每个像素都是一个节点,并通过虚线与周围的其他像素连接。当然,以这种方式查看图像是不切实际的,因为这意味着需要一个非常大的图。例如,32×32×3的一个简单的CIFAR-10图像会有3072个节点和1984条边。对于224×224×3的较大ImageNet图像,这些数字会更大。
与图片相比,图的不同的节点与其他节点的连接数量不同,并且没有固定的结构,但是就是这种结构为图增加了价值。
图神经网络
单个图神经网络(GNN)层有一堆步骤,在图中的每个节点上会执行:
- 消息传递
- 聚合
- 更新
这些组成了对图形进行学习的构建块,GDL的创新都是在这3个步骤的进行的改变。
节点
节点表示一个实体或对象,如用户或原子。因此节点具有所表示实体的一系列属性。这些节点属性形成了节点的特征(即“节点特征”或“节点嵌入”)。
通常,这些特征可以用Rd中的向量表示. 这个向量要么是潜维嵌入,要么是以每个条目都是实体的不同属性的方式构造的。
例如,在社交媒体图中,用户节点具有可以用数字表示的年龄、性别、政治倾向、关系状态等属性。在分子图中,原子节点可能具有化学性质,如对水的亲和力、力、能量等,也可以用数字表示。
这些节点特征是GNN的输入,每个节点i具有关联的节点特征xi∈Rd和标签yi(可以是连续的,也可以是离散的,就像单独编码一样)。
边
边也可以有特征aij∈Rd '例如,在边缘有意义的情况下(如原子之间的化学键)。我们可以把下面的分子想象成一个图,其中原子是节点,键是边。虽然原子节点本身有各自的特征向量,但边可以有不同的边特征,编码不同类型的键(单键、双键、三键)。不过为了简单起见,在本文中我将省略边的特性。
现在我们知道了如何在图中表示节点和边,让我们从一个具有一堆节点(具有节点特征)和边的简单图开始。
消息传递
gnn以其学习结构信息的能力而闻名。通常,具有相似特征或属性的节点相互连接(比如在社交媒体中)。GNN利用学习特定节点如何以及为什么相互连接,GNN会查看节点的邻域。
邻居Ni,节点I的集合定义为通过边与I相连的节点j的集合。形式为Ni={j: eij∈E}。
一个人被他所处的圈子所影响。类似地GNN可以通过查看其邻居Ni中的节点i来了解很多关于节点i的信息。为了在源节点i和它的邻居节点j之间实现这种信息共享,gnn进行消息传递。
对于GNN层,消息传递被定义为获取邻居的节点特征,转换它们并将它们“传递”给源节点的过程。对于图中的所有节点,并行地重复这个过程。这样,在这一步结束时,所有的邻域都将被检查。
让我们放大节点6并检查邻域N6={1,3,4}。我们取每个节点特征x1、x3和x4,用函数F对它们进行变换,函数F可以是一个简单的神经网络(MLP或RNN),也可以是仿射变换F(xj)=Wj⋅xj+b。简单地说,“消息”是来自源节点的转换后的节点特征。
F 可以是简单的仿射变换或神经网络。现在我们设F(xj)=Wj⋅xj为了方便计算 ⋅ 表示简单的矩阵乘法。
聚合
现在我们有了转换后的消息{F(x1),F(x3),F(x4)}传递给节点6,下面就必须以某种方式聚合(“组合”)它们。有很多方法可以将它们结合起来。常用的聚合函数包括:
假设我们使用函数G来聚合邻居的消息(使用sum、mean、max或min)。最终聚合的消息可以表示为:
更新
使用这些聚合消息,GNN层就要更新源节点i的特性。在这个更新步骤的最后,节点不仅应该知道自己,还应该知道它的邻居。这是通过获取节点i的特征向量并将其与聚合的消息相结合来操作的,一个简单的加法或连接操作就可以解决这个问题。
使用加法
其中σ是一个激活函数(ReLU, ELU, Tanh), H是一个简单的神经网络(MLP)或仿射变换,K是另一个MLP,将加法的向量投影到另一个维度。
使用连接:
为了进一步抽象这个更新步骤,我们可以将K看作某个投影函数,它将消息和源节点嵌入一起转换:
初始节点特征称为xi,在经过第一GNN层后,我们将节点特征变为hi。假设我们有更多的GNN层,我们可以用hli表示节点特征,其中l是当前GNN层索引。同样,显然h0i=xi(即GNN的输入)。
-
芯片
+关注
关注
459文章
51559浏览量
429747 -
神经网络
+关注
关注
42文章
4789浏览量
101592 -
数学
+关注
关注
0文章
99浏览量
19358
发布评论请先 登录
相关推荐
评论