《第9章-基于GNN的图表示学习》学习笔记

第9章-基于GNN的图表示学习

图表示学习是图学习领域中十分热门的研究课题,而GNN的出现又给图表示学习带来了新的建模方法。


9.0 端到端学习是一种强大的表示学习

与传统的特征工程不同,端到端(end-to-end)学习将原始数据作为输入,直接将任务学习的结果作为输出。

网络的前部主要进行表示学习,自动提取特征;网络后部主要进行任务学习。端到端学习可以看作是表示学习和任务学习的组合,但两部分并不是割裂的,它们是联合优化的。

低层的网络主要提取低层特征,高层的网络主要提取抽象的、与任务有关的特征。低层次的特征更加通用,可以基于这个特性进行迁移学习,针对某些特定的任务对某些模型进行微调,已达到针对特定任务的良好效果。

9.1 图表示学习

图表示学习(graph embedding)又可以称为网络表示学习(network embedding),或者称为网络嵌入,主要目标是将图数据转化成低维稠密的向量化表示,同时确保图数据中的某些性质在向量空间中也能够得到对应。

图数据的表示可以是节点层面的、边层面的和全图层面的,其中节点表示学习一直是图表示学习的主要对象。如果能够将图数据表示成包含丰富结构和属性信息的向量,那么后续的任务学习就能够得到更好的效果。

由于图数据自身非线性结构的特点,再加上图数据本身包含着丰富的结构信息,图表示学习就显得十分重要,主要体现在两个方面:
(1)方便计算机处理
(2)为之后的任务学习奠定基础

在这里插入图片描述
图表示学习从方法上来说可以分为3类:
(1)基于分解的方法
(2)基于随机游走的方法
(3)基于深度学习的方法

类别主要思想代表模型优点缺点
基于分解的方法对结构信息进行矩阵分解--具有很高的计算复杂度
基于随机游走的方法将随机游走所产生的序列看作是句子,节点看作是词,类比词向量Skip-gram等模型的学习方法DeepWalk、Node2Vec等将图转化为序列,实现了大规模图的学习①图本身的结构信息没有充分利用 ②很难融合属性信息进行表示学习
基于深度学习的方法主要是使用基于GNN的方法进行表示学习GraphSAGE、GAE、DGI等①融合结构和属性信息进行表示学习 ②可以将表示学习和任务学习有机结合 ③能够适应大规模图在模型深度、过平滑问题等方面仍面临挑战

9.2 基于GNN的图表示学习

依据损失函数(Loss Function)的不同,基于GNN的无监督图表示学习方法可分为2类:
(1)基于重构损失的GNN
(2)基于对比损失的GNN

9.2.1 基于重构损失的GNN

主要思想类似于自编码器(AE),将节点之间的邻接关系进行重构学习,并将重构的矩阵与原矩阵进行相似度对比,来更新参数。因此,这类方法也叫作图自编码器(GAE)。
Z = G N N ( A , X ) A ^ = σ ( Z Z T ) Z=GNN(A,X) \\[2ex] \hat A=\sigma(ZZ^T) Z=GNN(A,X)A^=σ(ZZT)
其中 Z Z Z是所有节点的表示矩阵, A ^ \hat A A^是重构后的邻接矩阵,重构损失定义如下,
L o s s r e c o n = ∣ ∣ A ^ − A ∣ ∣ 2 Loss_{recon}=||\hat A-A||^2 Lossrecon=A^A2
为了防止过平滑的问题,需要加入一些噪声,迫使模型学习到有用的信息:
(1)将 X X X增加随机噪声或置零
(2)将 A A A删除适当比例的边或修改边的权重

接下来,是比较重要的变分图自编码器(VGAE)。说实话,我暂时还看不懂,nb就完事了,什么时候看懂了再写吧。。。

9.2.2 基于对比损失的GNN

对比损失通常会设置一个评分函数 D ( ⋅ ) D(\cdot) D(),用来提高正样本的得分、降低负样本的得分。

类比词向量的学习,在图中,节点看作是词,如何定义节点的“上下文”就成为一个值得研究的问题。目前为止共有3中定义方式:
(1)邻居作为上下文
(2)子图作为上下文
(3)全图作为上下文

不论是何种定义方式,我们都可以定义一个通用的损失函数,
L o s s v i = − l o g ( D ( z i c ) ) + l o g ( D ( z i c ‾ ) ) Loss_{v_i}=-log(D(z_ic))+log(D(z_i\overline c)) Lossvi=log(D(zic))+log(D(zic))
其中 c c c为上下文的表示向量, c ‾ \overline c c为非上下文的表示向量。

1、邻居作为上下文

通过损失函数建模节点和邻居节点之间的关系,GraphSAGE中就使用了这种思路。主要思想类似于DeepWalk,将随机游走时与中心节点 v i v_i vi一起出现在固定窗口内的节点 v j v_j vj视为邻居。
Z = G N N ( A , X ) L o s s v i = l o g ( 1 − σ ( z i T z j ) ) + E v n ∼ p n ( v j ) l o g ( σ ( z i T z v n ) ) Z=GNN(A,X) \\[2ex] Loss_{v_i}=log(1-\sigma(z_i^Tz_j))+E_{v_n\sim p_n(v_j)}log(\sigma(z_i^Tz_{v_n})) Z=GNN(A,X)Lossvi=log(1σ(ziTzj))+Evnpn(vj)log(σ(ziTzvn))
其中 p n ( v j ) p_n(v_j) pn(vj)是节点出现概率的负样本分布。由于此方法不需要重构出 A ^ \hat A A^之后再最小化损失,所以省去了 O ( n 2 ) O(n^2) O(n2)的空间复杂度。

2、子图作为上下文

邻居作为上下文强调的是节点之间的共现关系,但是有时候距离远的节点的结构未必没有相似之处,如此一来就缺乏对节点结构相似性的捕捉。

在这里插入图片描述
Z = G N N ( A , X ) , Z c o n t e x t = G N N c o n t e x t ( A , X ) c i = R e a d o u t ( { Z c o n t e x t [ j ] , ∀ v j 是 v i 的 上 下 文 锚 点 } ) L o s s v i = l o g ( 1 − σ ( z i T c i ) ) + l o g ( σ ( z i T c j ∣ j ≠ i ) ) Z=GNN(A,X),Z_{context}=GNN_{context}(A,X) \\[2ex] c_i=Readout(\{Z_{context}[j],\forall v_j是v_i的上下文锚点\}) \\[2ex] Loss_{v_i}=log(1-\sigma(z_i^Tc_i))+log(\sigma(z_i^Tc_{j|j\ne i})) Z=GNN(A,X),Zcontext=GNNcontext(A,X)ci=Readout({Zcontext[j],vjvi})Lossvi=log(1σ(ziTci))+log(σ(ziTcjj=i))
其中一共用到2个GNN。一个用来在 K K K阶子图上提取其特征向量 Z Z Z,另一个提取每个节点作为上下文锚点时的表示向量 Z c o n t e x t Z_{context} Zcontext,使用读出机制来聚合上下文锚点的表示向量 c i c_i ci

3、全图作为上下文

DGI模型实现了节点与全图之间的对比损失的学习机制。

在这里插入图片描述
Z = G N N ( A , X ) , Z ‾ = G N N ( A c u r r u p t , X c u r r u p t ) s = R e a d o u t ( { z i , ∀ v i ∈ V } ) L o s s v i = l o g ( 1 − D ( z i , s ) ) + l o g ( D ( z ‾ i , s ) ) Z=GNN(A,X),\overline Z=GNN(A_{currupt},X_{currupt}) \\[2ex] s=Readout(\{z_i,\forall v_i\in V\}) \\[2ex] Loss_{v_i}=log(1-D(z_i,s))+log(D(\overline z_i,s)) Z=GNN(A,X),Z=GNN(Acurrupt,Xcurrupt)s=Readout({zi,viV})Lossvi=log(1D(zi,s))+log(D(zi,s))
其中 ( A c u r r u p t , X c u r r u p t ) (A_{currupt},X_{currupt}) (Acurrupt,Xcurrupt)为加噪声构造的负采样样本。将正负样本送入同一个GNN中进行学习。使用读出机制得到全图的向量表示 s s s


总结

一刷结束,看看论文再准备二刷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值