图机器学习及图神经网络学习笔记(三)——————基于CS224W课程及同济子豪兄

图神经网络(GNN)及图卷积网络GCN

图上面有三种常规类型的预测任务:图层面,节点层面,边层面。GNN是对保持图对称性(排列不变性)的图的所有属性(节点、边、全局上下文)的可优化转换。对称信息指的是把这个顶点进行另外一个排序后,整个结果是不会变的。一个函数f将节点映射到d维嵌入,以便图中的相似节点紧密嵌入在一起。

编码器(encode)

将每个节点映射到一个低维向量,直观上解释为将我们图中的节点转化为计算机可输入的矩阵(向量),如下图所解释:

相似度函数:指定向量空间中的关系如何映射到原始网络中的关系:

浅层编码:

最简单的编码方法:编码器只是一个嵌入查找:

浅层嵌入方法的局限性:

1.需要\color{red}{O(|V|d)}个参数:节点之间不共享参数;每个节点都有自己独特的嵌入

2.固有的“转换”:不能为训练中看不到的节点生成嵌入

3.不包含节点特征:许多图中的节点有我们可以而且应该利用的特征

深度图编码器:

现在将讨论基于图神经网络(GNNS)的深度学习方法:(ENC)=基于图结构的多层非线性变换。所有这些深度编码器都可以与前面定义的节点相似度函数相结合。通过GNNS,我们可以解决:节点分类(预测给定节点的类型)、连接预测(预测两个节点是否连接)、社区检测(识别节点的密集连接)、簇网络相似性(两个(子)网络的相似程度)。

现代深度学习工具箱是为简单的序列和网格而设计的,但是网络要复杂得多:任意大小和复杂的拓扑结构(即,没有像网格那样的空间局部性);没有固定的节点排序或参考点;通常是动态的和具有多模态的特性。

深度学习的基础知识

损失函数:\min_{\color{red}{\Theta}}{L(y,f_{\Theta}(x))},f可以是一个简单的线性层,一个MLP,或其他神经网络(例如,稍后的GNN);采样一小批输入x;向前传播:计算给定x的L;反向传播:使用链式规则获取梯度\nabla_{\color{red}{\Theta}}\mathbb{L};使用随机梯度下降(SGD)在多次迭代中优化Θ的L。

局部网络邻域:描述聚合策略、定义计算图

叠加多层:描述模型、参数、训练;如何拟合模型;无监督和有监督训练的简单例子

假设我们有一个图:V是顶点集,A是邻接矩阵(假设为二进制矩阵),X\in\mathbb{R}^{|V|\times m}是一个包含节点特征的矩阵;v:在V中的节点; N(v)表示v的邻域(与节点v相连的所有节点的集合)。一个直接的想法是连接邻接矩阵和特征,将它们输入一个深度神经网络,如下图,

但这个想法的问题是:O(|V|)个参数,参数量爆炸会发生过拟合;对节点排序敏感,不具备变换不变形;不适用于不同大小的图形,没法泛化。邻接矩阵与节点编号顺序密不可分,用邻接矩阵是行不通的。我们需要的是一个置换不变性的函数。另一个想法是我们可以用卷积网络,例如我们将CNN用在图像image上,目标是利用节点特征/属性(例如,文本、图像)来推广简单格之外的卷积。但是我们的图是这样的:

在图上没有固定的参考点或也没有滑动窗口,并且图自身具有变换不变性。

图卷积神经网络GCN

图的深度学习

通过传递和聚合来自邻居的信息,设计出排列不变/等变的图神经网络!

基于局部邻域生成节点嵌入(构建计算图):

上图我们构建A节点的计算图:找到节点A的邻居B、C、D,再分别找出他们的邻居,每个节点的邻居是固定的和他的取名没有关系,将AC属性特征输入黑箱得到B的属性特征、依次ABEF输入得到C,A输入得到D;再结合BCD属性得到A的embedding。

类似的,没给节点都能构建自己的计算图。计算图结构相同则节点功能角色相同。模型理论上可以具有任意的深度:节点在每一层都有嵌入;节点的第0层嵌入是它的输入特征x_v;k层嵌入从k跳后的节点中获取信息;图神经网络的层数是计算图的层数而不是神经网络的层数。

K层GNN的感受野:确定感兴趣节点的嵌入的节点集,每个节点都有一个k跳邻域的接受域;两个节点的接受域重叠,当我们增加跳跃数(GNN层数)时,共享邻居迅速增长。

一个GCN的不变性和等方差性质

给定一个节点,计算其嵌入的GCN是排列不变

考虑到图中的所有节点,GCN的计算是置换等变的,详细的推理方法:1。输入节点特征和输出嵌入的行对齐2。我们知道用GCN计算一个给定节点的嵌入是不变的。 3.因此,经过置换后,改变给定节点在输入节点特征矩阵中的位置,给定节点的输出嵌入保持不变(节点特征和嵌入的颜色匹配),这是置换等变的。如下图:

邻域聚合

关键的区别在于不同的方法如何跨层聚合信息

基本方法:获取来自邻居的平均信息,并应用一个神经网络(改进是加上自己的信息并赋予不同的权重)

在训练GCN来生成嵌入时,需要在嵌入上定义一个损失函数:我们可以将这些嵌入输入到任何损失函数中,并运行SGD来训练权重参数。W_k:邻域聚合的权重矩阵,B_k:变换自隐向量的权值矩阵。

矩阵表示:令D为一个对角矩阵D_{v, v}= Deg( v) = |N( v) |, $D^{-1}$也是对角阵:$D_{v,v}^{-1}=1/|N(\nu)|$。令$H^{(k)}=\left[h_1^{(k)}...h_{|V|}^{(k)}\right]^T$,则 :$\sum_{u\in N_ v}h_u^k=A_{v,:}H^{(k)}$。其中A_{v,.}表示邻接矩阵的第 v 行,因此: $\boxed{\sum_{u\in N(v)}\frac{h_u^{(k-1)}}{|N(v)|}}=D^{-1}AH^{(k)}$

所以,H^{(k+1)}=\sigma(\color{red}{\tilde{A}H^{(k)}W_{k}^{\mathsf{T}}+}\color{blue}H^{(k)}B_{k}^{\mathsf{T}}),其中,\tilde{A}=D^{-1}A。上式子中,红色表示邻域聚合;蓝色表示自转化。D^{-1}A(稀疏的)叫做行归一化矩阵,其最大特征值为1。固有对称标准矩阵$D^{-1}AD^{-1}$是一个对称,矩阵既考虑了自己的度也考虑了对方的度,但特征值在(-1,1),输入向量左乘该矩阵之后幅值会变小。对称归一化矩阵:$D^{\frac{-1}2}AD^{\frac{-1}2}$, 最大特征值为1。

GNN 的训练

节点嵌入 Z_v 是一个输入图的函数

有监督学习:我们想最小化损失\operatorname* { min} _{\color{blue} {\Theta}}\mathcal{L} ( \boldsymbol{y}, f_{\Theta}( \mathbf{z} _{\nu}) ) 其中 y: 节点标签,如果 y 是实数,则£可以是 L2,如果 y 是分类则£ 可以是交叉熵。直接训练模型以执行监督任务 (例如,节点分类)。使用交叉熵损失:

无监督学习:没有可用的节点标签,使用图形结构作为监督!一个可能的想法是:“相似的” 节点有类似的嵌入:min_\theta\mathcal{L}=\sum_{Z_v,Z_v}CE\left(y_{u,v},DEC(z_u,z_v)\right),当 u,v 是相似的时候$y_{u,v}=1;\quad z_u=f_o(u)$和 DEC(·,·)是点积。CE 是交叉熵的损失:$CE(y,f(x))=-\sum_{i=1}^{C}\left(y_i\log f_\theta(x)_i\right),y_i$$f_{\theta}(x)_i$是第 i类的实际值和预测值;损失越低,预测越接近一。节点相似性可以是前面的任何内容, 例如,基于随机游走(node2vec,DeepWalk,struc2vec)、矩阵分解等。

GCN步骤

  1. 定义一个邻域聚合函数
  2. 在嵌入上定义一个损失函数
  3. 在一组节点上进行训练,即一批计算图
  4. 根据需要为节点生成嵌入信息,即使是对于我们从未训练过的节点!

对于所有节点,都将共享相同的聚合参数:

GNNs与CNN的区别

GNN 的公式为:h_v^{(l+1)}=\sigma\left(\mathcal{W}_l\sum_{u\in\mathbb{N}(v)}\frac{h_u^{(l)}}{|N(v)|}+B_lH_v^{(l)}\right),\forall l\in\{0,\ldots,L-1\}; 而CNN 的公式本来为 h_{v}^{(l+1)}=\sigma\left(\Sigma_{u\in\mathbf{N}(v)\cup\{v\}}\mathrm{W}_{l}^{u}\mathrm{h}_{u}^{(l)}\right),\forall l\in\{0,...,L-1\} , 我 们可以把它写 成 h_{v}^{(l+1)}=\sigma\left(\sum_{u\in\mathbf{N}(v)}\mathbf{W}_l^u\:\mathbf{h}_u^{(l)}+\boxed{\mathbf{B}}_l\mathbf{h}_\nu^{(l)}\right),\forall l\in\{0,\ldots,L-1\}.类比两个式子,再看如下两图

我们可以把4*4的卷积看成一个图有9个节点。但是在CNN中,不同位置的邻域分别学习到不同的权重,但是在 GCN 中,卷积核权重由$D^{-1}AD^{-1}$预定义。CNN 可以看作是一个特殊的 GNN, 具有固定的邻居大小和顺序:过滤器的大小是为 CNN 预先定义的。GNN 的优点是它对每个节点处理不同程度的任意图。CNN不是排列不变/等变的。切换像素的顺序会导致不同的输出。

GNN与Tansformer区别

Tansformer是最流行的架构之一,在许多序列建模任务中取得了良好的性能。它的重要部分是注意力机制,注意力的一般定义:给定一组向量值和一个向量查询,注意是一种计算依赖于查询的值的加权和的技术。每个标记/单词都有一个值向量和一个查询向量。

值向量可以看作是标记/单词的表示。我们使用查询向量来计算注意力分数(加权和中的权重)。通过自注意力机制,使得每个单词之间都相互影响。Tansformer可以当成一个特殊的GNN,它运行在一个完全相连的“单词”图上!由于每个单词都关注所有其他单词,所以Tansformer层的计算图与全连接的“单词”图上的GNN的计算图是相同的。

 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值