GNN从入门到精通 -- Graph Embedding (2)

1.什么是图嵌入
  • 将图中的每个节点映射为一个低维的向量表示,映射后的向量应尽可能多的保留原图中节点的关键信息,以便更好地进行下游任务。
2.哪些信息需要被保留?
  • 不同的图嵌入算法信息保留的侧重点也不一样,根据不同的下游任务,原图中需要保留的信息重要性程度也不一样(例如节点的邻域信息,结构角色,社区信息等)。
3.如何保留关键信息?
  • 大多数技术共同思想就是(个人理解:先给节点一个随机表示,定义一个损失函数,不断迭代优化损失函数来学习节点表示),利用嵌入域中的节点表示,重构出要保留的图域信息(因为良好的节点表示应该能够重构出希望保留的原图关键信息),所以整个节点嵌入的学习过程就是,最小化重构误差来学习这个映射。
4.图嵌入通用框架
  • 映射函数:将节点从图域映射到嵌入域
  • 信息提取器:提取图域中需要保留的关键信息Q
  • 重构器:利用嵌入域的嵌入信息,重构图的关键信息Q,重构后的信息为Q’
  • 优化:以提取的关键信息Q和重构的信息Q’为目标优化(定义损失函数),学习映射函数及重构器涉及的参数
    在这里插入图片描述
5.DeepWalk嵌入算法–保留节点共现关系
  • 映射函数
    得到每个节点的映射(每个节点的one-hot编码e与训练出的权重矩阵W相乘,结果即此节点映射,权重矩阵每一行表示一个节点的映射),one-hot维度1×N,权重矩阵W维度N×d,映射后向量维度1×d。权重矩阵系统会给一个初值,通过优化损失函数来学习权重矩阵,权重矩阵得到之后,意味着每个节点的嵌入表示也得到。
    在这里插入图片描述

  • 信息提取器:根据随机游走提取节点的共现信息
    随机游走(Randow walk):给定一个图节点,从它的邻居节点中随机选取一个并前进到这个节点,接着从选中的节点中重复此过程,直至访问T个节点。这些被访问的节点组成的序列,即图上长度为T的随机游走。为每个节点生成γ个长度为T的随机游走序列。

    Random Walk & Skip-gram:随机游走看成自然语言中的句子,节点集是句子中的词汇表,中心节点和其上下文节点(Vcon,Vcen)视为一个共现元组。遍历每个随机游走序列中的节点,将提取到的共现元组添加到信息提取器中。第二步信息提取器的工作完成(提取有共现关系的元组)
    在这里插入图片描述

  • 重构器:根据嵌入信息重构原图共现信息
    对于原图中的共现元组,一个良好的嵌入,应该能够推断出原图的信息。这里原图的重要信息就是共现元组,所以重构器对元组出现的概率进行建模,认为共现元组出现的概率要尽可能大,这样学习到的嵌入意味着尽可能的保存了原图中的共现信息。
    图注:每个节点有两种映射(中心节点映射+上下文节点映射)
    在这里插入图片描述
    图注:对元组概率建模(softmax),重构器中的共现元组/该中心节点其他所有节点生成的元组(此概率越大,表明嵌入域学习到的共现信息越多)
    在这里插入图片描述图注:对所有共现元组出现的概率建模(利用嵌入域重构图域提取的共现元组信息)
    在这里插入图片描述
    图注:去掉上式中的重复元组,幂数表示重复元组的频次
    在这里插入图片描述

  • 优化器:(学习目标单词和上下文权重参数)
    优化目标是将上式所有共现元组的概率最大化,为了使用梯度下降,取上式负对数,使目标函数最小化,通过多次迭代更新学习,权重参数即更新完成
    在这里插入图片描述

6.加速DeepWalk学习过程
  • 分层softmax
    直接计算元组出现的概率时,分母计算量很大,要对所有节点求和。将图的节点当成二叉树的叶子结点,通过二叉树从根节点到叶子结点路径,对共现元组出现的概率建模(中心节点作为输入的二分分类器,分类器不断地选择路径的下一节点)。
    在这里插入图片描述

图注:从根节点b0前进到左侧节点的概率
在这里插入图片描述

图注:从根节点b0前进到右侧节点的概率

在这里插入图片描述
图注:节点8和节点3共现的概率
在这里插入图片描述

  • 负采样
    选取与中心节点没共同出现的节点,形成负样本,并定义如下的目标函数,使来自正样本的概率最大化,负样本的概率最小化,来学习节点的表示,和softmax相比,计算复杂度明显降低。softmax分母需要对所有节点求和,负采样只需K个负样本求和。
    在这里插入图片描述

  • 实际训练过程
    批处理(batch)方式完成的,每生成一个随机游走序列W后,提取共现信息,基于共现信息形成目标函数,基于目标函数计算梯度,执行所涉及节点的更新。

7.node2vec嵌入–保留节点共现信息
  • 一种有偏的随机游走,根据一定的概率选取下一邻居节点,生成随机游走序列之后,提取共现信息,根据嵌入域重构原图共现元组,优化目标函数,学习参数。和DeepWalk过程一样,区别就是生成随机游走时,DeepWalk选取下一节点是等概率的。
  • 在决定下一节点t+1时,既考虑当前t节点,又考虑t-1节点,dis表明最短路径长度,p和q是两个超参数。P值小,优先选取离t-1较近的节点,类似于广度优先搜索,使类似结构的节点表示相似。如果q值小,选取下一节点时离t-1远,相当于深度优先搜索,使邻居节点表示相似。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 边的Embedding
    可以对节点的Embedding进行平均
8.LINE:Large-scale Information Network Embedding
  • 引入二阶相似度概念(如果两个节点的邻居节点相似,那么这两个节点的映射向量也是相近的),和前面的随机游走最大区别在于重构的信息是边,而不是游走序列中的元组,也可以看成长度为1的游走序列的特例。
  • 一阶相似性
    两个节点的联合概率分布(对两个节点的嵌入向量sigmoid,求出概率),经验概率分布(两节点边的权重 / 图中所有边的权重和),损失函数(两个分布的距离)。KLdiversion(求两个分布的距离),对KLdiversion化简(边的权重是固定值,对其没影响),得到左下侧等式。
    在这里插入图片描述
  • 二阶相似性
    联合概率(给定节点 i 下产生邻居 j 的概率),经验概率(节点 i 和 j 边的权重 / 节点 i 所有边的权重),算两个分布的KLdiverison,最终化简如左下式。在这里插入图片描述
  • 一阶和二阶embedding训练完成后,直接拼接两个embedding即节点的最终嵌入表示。
9.struc2vec嵌入算法–保留结构角色
  • 保留节点共现方法,学习到的嵌入域,使邻近节点的嵌入向量相似。对于有些下游任务,可能希望更多的保留节点结构信息(使结构角色相似的节点,嵌入域向量相近)。
    在这里插入图片描述

  • 距离信息
    f:节点u和v在k跳邻居下的相似性;R:节点的K跳邻居集合;S(s):对集合s中的点按照度排序;g:俩个节点度序列的距离。(对于长度不同的序列使用DTW动态时间调整算法)
    在这里插入图片描述

  • 为什么用DTW算度序列之间的距离
    节点各阶度序列之间距离近,说明节点在图上结构相似(节点结构相似的定义),衡量节点在图上结构的相似性。

  • 构建多层带权重图
    根据两两节点在K跳邻居下的相似度构建每层边的权重,
    在这里插入图片描述

  • 顶点采样序列
    本层游走的概率:U和V边的权重 / 和U相连的所有边的权重和。
    在这里插入图片描述

  • 使用Skip-Gram生成节点embedding
    根据在多层权重图上的游走序列(选取图中中边权重大的节点=即度序列比较相似的节点=结构相似的节点),提取共现元组,生成节点嵌入向量(和DeepWalk过程一样,只是序列生成的方式不一样,这里侧重于提取节点的结构信息),实际应用中应根据不同的下游任务(各下游任务需要提取图的信息侧重点不一样)选择不同的嵌入算法。

10.SDNE:Structural Deep Network Embedding
  • Deepwalk,node2vec,LINE,struc2vec使用了浅层结构,不能捕获高度非线性网络结构,产生了SDNE方法,使用多个非线性层捕获node的Embedding

  • 算法流程:输入图的邻接矩阵第i行的值,带入encoder中压缩,学习到的中间向量(Embedding),用decoder将Embedding解码成输入向量相同维度的向量

  • 二阶损失函数: 输出向量和输入向量的均方误差,如果i和j节点不相连,b向量=1,如果i和j节点相连,b向量>1,更关注相连接的接点。

  • 一阶损失函数:相邻接点的均方误差。

在这里插入图片描述

  • 总优化目标:一阶+二阶+正则项
  • 为什么正则项有权重参数:削弱权重参数对模型的影响(权重参数是训练数据训练出的),提高模型的泛化能力。
    在这里插入图片描述
11.总结
  • DeepWalk:采用随机游走,形成序列,采用skip-gram方式生成节点的embedding
  • node2vec:不同的随机游走策略,形成序列,类似于skip-gram方式生成节点embedding
  • LINE:捕获节点的一阶和二阶相似度,分别求解,再将一阶和二阶拼接在一起,作为节点的embedding
  • struc2vec:对图的结构信息进行捕获,在其结构重要性大于邻居重要性时,有较好效果
  • SDNE:采用多个非线性层的方式捕获一阶和二阶相似性
12.保留节点状态的图嵌入算法
  • 节点状态=节点共现信息+节点的全局状态
    保留共现信息的组件:与前面介绍的DeepWalk,Node2vec一样
    保留全局状态的组件:目的不是保留图中节点的全局状态分数,而是保留他们的全局状态分数排序,重构器恢复排序信息

  • 提取器
    计算节点的全局状态分数(Degree Centrality,Betweenness Centrality等中心性度量方式均可计算全局状态分数),获得全局状态排名,对其降序排列。

  • 重构器
    从嵌入域中恢复提取器中的排名信息,重构器对节点的相对排序建模
    图注:对节点 i 在节点 j 之前的概率建模
    在这里插入图片描述
    图注:重构节点的全局信息
    在这里插入图片描述
    图注:优化目标函数,该目标函数可以和保留共现信息的目标函数结合,使学习到的节点可以留共现信息和全局状态
    在这里插入图片描述

13.modularity(模块度最大化)–保留社区结构信息
  • 保留面向节点的结构信息
    一种是节点对的连接信息,另一种是节点邻域的相似度信息。这两种信息都可以从原图中提取,并以矩阵形式表示。

  • 提取器
    提取节点对的连接信息:表示成邻接矩阵A的形式
    提取邻域相似度信息:表示成矩阵S
    图注:Ai 表示邻接矩阵的第 i 行,即节点 i 的邻域信息,当节点 i 和 j 共享的邻居越多时,Sij就越大
    在这里插入图片描述

  • 重构器和目标
    重构器旨在恢复 A 和 S 这两种类型的信息,为了同时重构它们,对两个矩阵线性组合,n 控制领域相似度的重要程度。
    在这里插入图片描述
    目标函数:W是两个映射函数的参数,与DeepWalk设计相同
    在这里插入图片描述

  • 保留社区结构–模块度最大值(modularity)
    模块度Q衡量社区内的边数在给定图和随机图之间的差别,较大的Q表明发现了更好地社区,可以通过最大化模块度Q来检测社区。
    图注:代表随机生成图中节点 i 和 j 之间有边连接的可能性(节点的度相乘 / 图的度),h表示 i 和 j 同属于某一社区的标识符值,假定有2个社区
    在这里插入图片描述
    图注:简化成矩阵表示
    在这里插入图片描述
    图注:去掉某些常数项后,Q化简如下,H的每一列表明一个社区,每一行表明一个节点属于某个社区的one-hot编码,tr表示矩阵的迹。
    在这里插入图片描述

  • 总体目标
    同时保留节点的结构信息和社区结构信息,引入矩阵C重构指示矩阵H(将社区信息和节点表示联系在一起)
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值