一、GNN
图神经网络与传统神经网络的最大区别在于:对于图中节点的信息,应当考虑其邻居的特征,即包括邻居节点和自身的信息,然后将其输入到全连接层,去完成任务。
根据节点连接状态,建立邻接矩阵A
为了能够将点的自身特征也加入进去,我们加入一个倍的单位阵:
的取值,决定了各节点本身特征的重要性。当
的取值为1时,意味着节点本身特征的重要性与其邻居重要性一样。
是一个可训练得到的参数(怎么训练?最速下降法?)。我们取
为1.
矩阵为:
通过将新的邻接矩阵与特征向量相乘,可以得到包括节点自身信息和邻居节点信息的新的特征:
二、GCN
GCN网络是GNN网络的进化版,在GNN结构的基础上加入一个新的变量:度矩阵(degree matrix),添加度矩阵的意义在于可以过滤数据,使特征标准化,避免在迭代的过程无效信息掩盖了有效信息。那么,度矩阵是如何避免这些数据冗余的问题呢?
给定无相网络,其中,
中包含网络中所有的
个节点,
,
代表节点之间的边
, 邻接矩阵A中的原始可以为
的二进制编码,也可以是权重;度矩阵
。节点的特征向量矩阵
,其中
为节点数,
为特征向量维度。
邻接矩阵
度矩阵
特征向量矩阵:
在GNN中,我们已经通过加入单位阵来引入了节点自身对自己的影响。
我们就可以得到新的邻接矩阵:
新的邻接矩阵
度矩阵我们能看到,对角线上的数目为节点的边的数量。为了加上节点自身的影响,我们将度矩阵加上一个单位阵,获得新的度矩阵
随后,我们需要对邻接矩阵进行标准化,也就是平均。这里我们可以借助度矩阵的逆。
这里将节点A平均分成两份的意义为,节点A对节点E有一份影响,节点A对本身又有一份影响。那么,我们就将节点A的特征平均分为两份进行赋值。
我们的新的节点特征就为:
但是,由于我们只对行进行了标准化,需要对列也进行标准化。
另一种解释:由于为该计算为图,表示边的矩阵必须为对角阵,所以必须左乘后进行右乘。
再进一步优化,为了避免两次标准化,我们可以来进行单次标准化。
最终,我们的2-layer GCN表达式为:
其中
GCN的层数含义
网络的层数代表着节点特征所能到达的最远距离。比如一层的GCN,每个节点只能得到其一阶邻居身上的信息。对于所有结点来说,信息获取的过程是独立、同时开展的。
当我们层数设定为2~3时,预测效果较好。
三、GraphSage(Graph SAmple and aggreGatE)
GraphSage与上述结构的差别在于不使用邻接矩阵取全部的邻居节点,而是使用采样的方法,采取固定数量的邻居节点,随后进行聚合。GraphSage可以用于监督学习(Cora的点标签预测,化学式的图预测),也可以用于非监督学习(将节点进行聚合分类)。
节点聚合的方式也由相加变为了concat(邻居节点的特征聚合后,再与节点自身进行拼接。如果节点自身和邻居节点特征一起聚合,会在n次聚合之后出现over-smoothing的问题,即节点特征经过多次融合后难以区分。例如:节点B和节点D的邻居相同。)
表示经过
次聚合后的节点embedding,
表示节点
,
为
的邻居节点。
接下来添加非线性函数转换获得更强的特征表达:
为可训练参数。
随后进行使用L2标准化,得到整体的GraphSAGE的聚合算法。(L2标准化就是对向量的每一个值都除以向量的平方和的开方)。经过标准化的点v结果为。
针对不同的任务:
对于无监督学习,目标函数如下:
其中
v为目标节点,u为节点v随机游走的邻居节点
表示负样本数量
和
分别表示节点
和节点
的表示向量。
是sigmoid函数,定义为
,其值在0到1之间
表示负样本采集分布
分析:
第一项:
当节点v与节点u相似时, 为很大的一个正数,经过sigmoid标准化后趋近于1,取对数后
趋近于0
第二项:
当从v的近邻节点集合un中取样本时,我们取负样本,即与节点v不相似的节点un。那么为一个很大的一个正数,经过sigmoid标准化后趋近于1,取对数后
趋近于0,随后乘上选取概率期望以及选取数量,获得这一部分的损失函数
对于监督学习:
监督学习形式根据任务的不同直接设置目标函数即可,如最常用的节点分类任务使用交叉熵损失函数。
Inductive capability
Graphsage可以进行参数共享,当寻良好两层的Aggregator layers后得到权重和
时,可以通过参数共享用于其他的图结构。
GraphSage的优缺点
优点
通过邻居采样的方式解决了GCN的内存爆炸问题,适用于大规模图的表示学习
将 transductive 转化为 inductive learning,而且支持增量特征(transductive表示测试数据也参与了训练,即模型没有迁移性;inductive learning参数可以随时迁移,解决新来的问题)
引入邻居采样,防止过拟合,提升泛化能力
根据不同领域的图场景来定义图聚合方式
缺点
无法处理加权图,仅可以邻居节点等权聚合
邻居采样引入随机过程,推理阶段同一节点 embedding 特征不稳定,且邻居采样会导致反向传播时梯度不稳定
邻居采样的过程会造成信息缺失
GCN 网络层太多会引起 over-smoothing 问题,即嵌入多个节点时共享邻居过多,导致节点嵌入十分相似。
参考: