Graph Neural Networks 1: GNN Model
一、GNN介绍
之前图嵌入方法,是用的浅嵌入(即查找表)的方式。这有三个巨大缺陷:参数量大且不共享参数、不能应用于新节点、不能使用特征信息。本章讲深度模型。
二、深度学习基础
略
三、Deep learning for Graphs
即,如何将神经网络应用于图数据。
最简单的想法,把邻接矩阵和特征向量组合起来作为输入。
但这有三个巨大的缺点:
1. GCN背后的直觉
类比图像的卷积:
图像卷积是,从邻居节点(上图是9个)获取信息,然后求和;在图上,也是这样:从邻居节点获取信息,然后加权求和。这思想和上章讲到的passing massage是一样的:
2.GCN工作过程
GCN是根据这个idea设计的:节点的邻居定义了计算图(应该 就是如何传播信息的网络)。GCN算法分为两步:首先确定计算图,然后根据定义的计算图传播更新消息。
3.Neighborhood aggregation
每个节点收到来自邻居的信息,然后自己处理一下,再发给自己的邻居。这里的处理函数,可以是神经网络(因此每个节点可以有不同的处理函数,即多个神经网络)
上面提到的“计算图”的图示:其中每个节点有不同的邻居,因此对应着不同的计算图。所以计算图这个名字,只是为了称呼方便。
这时,每个节点的计算图都不同,因此其处理消息的函数(即神经网络)也不一样。所以这中网络是同时训练了多个神经网络。
不同的Neighborhood aggregation过程中,聚合操作(处理信息的函数)的区别是最大的区别。
这些聚合函数,应该有置换不变性的特征(即邻居A,B发来的消息顺序对聚合结果没有影响)。
3.求和式 Neighborhood aggregation
最简单的一种聚合函数就是求和(这满足置换不变性)。即,首先对邻居发来的消息求均值,然后用神经网络处理这些平均值。
这种求均值方式的实例:
即,将投影后的自己的向量,和投影后的邻居的向量求和,然后经过非线性变换。
但是上面这种形式不好看,我们想推导如何用矩阵表示这个式子。首先,W和B这俩投影矩阵,虽然有下标l,但是它们都是共享的(即每一层的权重参数实际上是一样的)。这一点很关键。
h是节点的隐藏表示,W和B是变化矩阵
现在,把第
l
l
l层的节点表示一行行排列起来组成
H
(
l
)
H^{(l)}
H(l),那么
h
(
l
)
h^{(l)}
h(l)所有邻居的求就可以用一个矩阵乘积的形式表示。其中
A
A
A是邻接矩阵。然后就会发现,上面的求均值聚合操作,就可以用一个矩阵乘积形式表示:
这真的很优美。(但并不是所有的聚合操作都能用矩阵表示。这取决于聚合函数的复杂度)
5.如何训练GNN
注意到最终的节点表示为:
那么可以用最终的节点表示做监督训练,如节点的毒性预测:
其损失函数为:
也可以用无监督训练。其损失函数是节点的相似性和计算出的embedding之间相似性之间的CE:
其中相似性可以有很多种度量方式,如
5.本节小结
讲了深度编码器。其算法分为四步:
- 定义neighborhood aggregation function(如求平均值)
- 定义损失函数(如监督的、无监督的)
- 在一个batch上训练模型(主要是训练参数W和B(存疑?h应该也是训练的一部分吧))
- 可以将模型应用于新节点上,输出其表示。
这个方法的好处在于,W和B是由不同节点、不同图之间共享的。因此大大减少了参数数量:
同时这样的模型也有泛化能力,对于未见过的图和节点,都能输出其表示:这种能力叫Inductive Capacity