【从零开始】CS224W-图机器学习-2021冬季学习笔记6.2 Graph Neural Networks 1: GNN Model

文章目录


1  图深度学习(Deep learning for graphs)

1.1  Setup

这里的X代表节点的特征矩阵,节点的特征可能是节点的度、社交网络中的用户资料、 生物网络中的基因信息等等。当图像数据集中没有节点特征时,也可以用one-hot编码或所有元素均为1的常量向量表示。

1.2  卷积神经网络(CNN)的思路

关于CNN的详细介绍请参考:吴恩达deeplearning之CNN—卷积神经网络入门

我们的思路是将网格上的卷积神经网络泛化应用到图上,并利用上节点的特征和属性。

但是,我们不清楚如何定义一个窗口的概念,如上图所示,一个滑动的卷积窗口中可能包含不同数目的节点,节点的顺序也不是固定的。所以,在图上使用卷积存在很大的复杂性和挑战性。

Permutation Invariant指:节点之间没有固定顺序,其特征之间也是无序的。

如:在以下两种不同的节点排序中,我们希望都能得到一个相同的图嵌入表示:

对于有m个节点的图,节点的排序方式也有m种,这时,对于每一种排序方式,能让它们都有一个相同的嵌入的函数f被称为排列不变性(Permutation Invariant)函数。

在这个函数中,我们能让节点保留原来的位置:

解释:在上图两种不同的排序方式中,嵌入中的节点的位置和原网络中的位置是保持一致的,A1的嵌入中表示棕色的是A节点,A2的嵌入中表示棕色的是E节点,这两个节点在原网络中位置相同。
 
GNN网络中包含了许多层排列等变和不变(Permutation Equivariant / Invariant)的函数:

而普通的神经网络比如MLPs中,当我们改变输入的顺序,输出的会随之改变(如下图),不具有位置不变性(Permutation Invariant),所以原始的MLP方法不能运用到图结构的输入上。


所以下一步,我们要 研究通过传递和聚合来自邻居节点的信息,设计具有排列不变性的图神经网络!

2  图卷积神经网络(Graph Convolutional Networks,GCN)简介

2.1  从图像(image)到图(graph)

在CNN中,一个单独的卷积层的卷积方式是:利用一个3×3的像素滤波器(fliter)提取图上的像素信息并将信息存到一个新的像素点中,然后不断在图像上滑动这个滤波器,直到提取所有信息。

那么如果把卷积的思路运用到图上呢?我们取图上的一个节点作为中心节点,向它周围的邻居中收集信息并进行汇总,然后创建一种新的信息,如上图。

上述思路可以大致分为两步:

  1. 通过节点邻居来确定计算图
  2. 通过学习如何从图上传播和转换信息来计算节点的嵌入

GCN的核心思想:节点通过神经网络来聚合来自其邻居节点的信息,从而得到节点嵌入

如上图所示,我们通过一层层神经网络不断汇总来自邻居节点的信息,但与传统神经网络不同的是,每个节点都可以定义自己的神经网络架构,或者说基于周围的邻居来定义自己的计算图

在上图中,因为D点只有一个邻居A,所以它的计算图(或神经网络架构)很窄;而C点因为有4个邻居,所以它的计算图很宽;除此之外,还可以看到E点和F点的神经网络架构是一致的。

该神经网络模型的深度是任意的(可以自己定义),节点在每一层都有不同的嵌入向量。下图中,Layer-0层的u节点的嵌入就是节点的特征向量X_{u},Layer-k层的节点是通过聚合k跳邻居后所形成的表示向量。

例如:Layer-1中B节点的嵌入就由Layer-0中节点A的特征向量X_{A}和节点C的特征向量X_{C}经过聚合后再加上自己的特征向量得到。所以Layer-2的A节点和Layer-0的A节点有完全不同的嵌入。

不同聚合方法的区别就在于如何跨层聚合邻居节点信息,也就是上图的“黑箱”中选择怎样的计算函数。(这种聚合信息的方式必须是Permutation Invariant的,因为聚合节点信息的过程与顺序无关)

那“黑箱”中应该选择什么方法呢?最简单的方式是取邻居信息的平均值并应用于神经网络:

2.2  深度图编码器模型

上述取邻居节点平均值应用于神经网络的方式即深度图编码器的编码方式:

2.3  模型训练

上面给出了深度图编码器模型,我们需要训练的参数是W_{k}B_{k}。和传统的机器学习一样,我们需要定义损失函数来帮助训练模型。

我们通过将每一层的嵌入向量输入损失函数中,使用随机梯度下降(SGD)来训练参数。

模型中可以学习的参数有:W_{k}(邻居节点聚合后的权重)、B_{k}(转换节点自身隐藏向量的权重)注:每层的参数权重矩阵在不同节点之间是共享的。

2.3.1  矩阵表示

很多种聚合方式都可以表示为(稀疏)矩阵操作的形式,上面损失函数的聚合过程可以表示为:

通过三个矩阵相乘的形式来表示邻居节点聚合的过程
  • H^{\left ( k \right )}:第k层所有节点的嵌入
  • A_{v,:}H^{k}汇总来自邻居节点的嵌入(A代表邻接矩阵)
  • D_{v,v}:表示所有邻居节点的数量

进一步地用矩阵形式重写整个损失函数得到:

在实践中,我们也可以使用上述稀疏矩阵乘法高效地进行训练。(\widetilde{A}通常是稀疏矩阵)
注:当聚合函数很复杂时,并不是所有的GNN都可以用矩阵形式表示。

2.3.2  有监督训练过程

y是节点标签,在损失函数L的选择上,回归问题可以用L2 loss,节点分类问题可以用交叉熵,如下,我们要区分安全或有毒的药物,结点的标签就为Safe/Toxic: 

2.3.3  无监督训练过程

在无监督学习中,我们以图的结构作为监督目标,比较嵌入中节点的相似性和原始图结构中节点的相似性,不断缩小两者的差距。(第三课中有详细介绍)

  • 在原始图中,若u和v相似,则我们简单地让y_{u,v}=1
  • CE是使用交叉熵作为损失函数;
  • DEC是解码器,如:用向量点积来衡量嵌入中节点的相似度;
  • 节点相似性的定义有多种形式:随机游走、矩阵分解等…

2.4  深度图编码器模型总结

模型的设计大致包括以下四个步骤:

  1. 定义邻居聚合函数
  2. 定义节点嵌入上的损失函数
  3. 在节点的训练集(如计算图的batch)上做训练
  4. 训练后的模型可以为任意一个节点(包括没有训练过的节点)生成嵌入

模型优势:强大的推导能力(Inductive Capability)

因为聚合邻居的参数在所有节点之间共享,所以训练好的模型可以应用在没见过的节点/图上。

 也就是说,我们在一个图上训练出来的模型可以应用到一个全新的图上:

3  总结

本节课,我们学习了通过聚合邻居节点的信息来生成节点嵌入的思路,并采用了最简单的取平均的聚合方式进行编码嵌入,而不同的GNN方法的主要区别就在于聚合过程的完成方式。

接下来将学习的GNN模型是GraphSAGE。

4  参考资料

http://web.stanford.edu/class/cs224w/slides/06-GNN1.pdf

cs224w(图机器学习)2021冬季课程学习笔记7 Graph Neural Networks 1: GNN Model_诸神缄默不语的博客

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值