当前位置: 首页 > article >正文

其他图嵌入方法(6)

        前面写了图神经网络可以把节点或图映射到一个低维空间,我们将其称为图嵌入。然而,除了图神经网络还有许多的图嵌入方法。本节将介绍其他浅层图嵌入方法。早在图神经网络发明之前,图嵌入的概念就经常出现在流形学习和网络分析的研究中。相对于图神经网络来说,最初的图嵌入方法被认为是浅层的嵌入方法,它们大多可以被归类为基于矩阵分解的图嵌入方法和基于随机游走的图嵌入方法。

1.基于矩阵分解的图嵌入方法

        很多早期的图嵌入方法来源于经典的降维技术,如矩阵分解。具体来说,这些方法针对一个表示图的连接关系的矩阵(如邻接矩阵、拉普拉斯矩阵、卡兹相似度矩阵等)进行分解,分解后得到的节点表示保留了原图的一些性质。

1.1拉普拉斯特征映射

        原始的拉普拉斯特征映射算法需要先建立数据点的相似关系图,这里假设图已经给出,图中的边可以表示节点之间连接的强度或者相似度。这个算法假设两个节点i j 很相似,那么它们在降维之后的嵌入表示应该也尽量接近。给定图的邻接矩阵 A∈Rn×n, 度矩阵D∈Rn×n, 拉普拉斯矩阵L=D-A 和点降维后的嵌入表示Z∈Rnxm,  它的目标函数可以表示为:

=tr(Z^{T}LZ),其中tr表示矩阵的迹。可以看出,这实际上使得图的嵌入尽量光滑。为了保证这个优化问题有解,而且解空间不会被任意的伸缩,我们对Z 加一个限制Z^{T}DT=I   这样优化问题就变为

mintr(Z^{T}LZ),s.t.Z^{T}DZ=I  ,对其做拉格朗日变换,得到:   min tr(Z^{T}LZ)-λ(Z^{T}Dz-I)这个式子的导数是2(LZ-\lambdaDZ),根KKT 条件,这个优化问题的解对应于求解L 的广义特征值为:LzDz,可以看出,拉普拉斯特征映射最终是在对拉普拉斯矩阵进行特征值分解,然后取前m个最小非0特征值对应的特征向量。拉普拉斯特征映射作为一个经典的降维方法,至今仍然被广泛使用。在使用图神经网络的分类任务中,在原图没有节点特征的情况下,可以先采用拉普拉斯特征映射得到节点的嵌入表示,然后将它作为图神经网络中节点的初始状态。这种预处理一般会在某种程度上加快图神经网络的收敛,并且可能提升图神经网络的分类准确率。

1.2图分解

        图分解采用了另外一种保持节点间距离的策略。 它的主要思想是,希望节点vi和节点 vj嵌入后的表示zi zj 的内积和原来的边的权重尽量接近。以Z 作为节点的嵌入矩阵,希望最小化以下目标函数:

        为了控制模型的复杂度,我们一般在上式中加上一项L2 正则化项,λ是它的系数。第5章曾经介绍了图自编码器模型,如果把上式中的(Z) 看成一个 编码器的输出,那么这个目标函数实际就是一个自编码器的目标。不同的是,这里我们只考虑原图中已有的边的重构,不考虑所有的邻接矩阵元素(包含0元素)。图分解的方法是对邻接矩阵进行分解,因为只考虑图中已有的边,所以能够将复杂度控制在O(|\epsilon|)。GraRepHOPE则对图分解的方法进行了改进,仍然采用类似的框架,不同的是,它们的重构目标不再是原始的邻接矩阵。GraRep 从概率角度出发,考虑的是点与点之的 k 阶相似性(转移概率),它的目标函数可以近似地写成:

这里的X^{k}由一个转移矩阵T=D-1A得到,代表k阶非负对数概率。X^{k}中的每个元素X^{k}ij,可以被认为是节点vi和vj间的某种相似度度量:

T^{K }就是转移矩阵连乘k次后的k阶转移概率矩阵,\beta是一个超参数。HOPE 则采用了一个更一般化的形式:

S不再局限于边的权重或者节点之间的转移概率,而可以是一个更一般的相似度矩阵。它可以是一个卡兹指数,也可以是雅卡尔共同邻居,还可以是PageRank 等。

2.基于随机游走的图嵌入方法

        基于随机游走的图嵌入在数据挖掘领域被称为网络嵌入。不同于图神经网络通常利用整个图的信息(如空域图神经网络在整个图上传递信息,频域图神经网络在整个拉普拉斯矩阵上定义图卷积 核),网络嵌入考虑的信息更加本地化,只考虑每个节点利用随机游走得到的邻 居节点。另外,早期的网络嵌入模型只考虑图结构信息,并没有像图神经网络 那样把节点特征加入模型中,不过这一点在最近的模型中得到了改进。本节介绍两种最常见的经典随机游走网络嵌入模型:DeepWalk和node2vec。

2.1  DeepWalk

        作为一种简化的语言模型,word2vec的出发点是用一个词做输入,预测它周围的上下文(即Skip-gram模型);或者用一个词的上下文做输入,预测当前词的出现概率(即CBOW模型)。那么,我们可否把类似的思想移植到图数据中呢? 答案是肯定的,但关键问题是怎么定义一个节点的上下文。DeepWalk采用随机游走的方法在图中随机采样大量固定长度的路径,每个路径相当于一个句子,而每个节点相当于一个词。这样,我们就可以用Skip-gram模型来最大化中心节点和它在这条路径上的前后邻接节点的共现概率,这个共现概率可以根据节点的嵌入表示得到。假设一个节点vi嵌入表示是zi, 我们分别向前、向后采样K 个节点,得到一条采样路径Uv,  目标函数可以写成:

        由于归一化因子的存在,直接解这个目标函数的复杂度会非常高,需要用到所有的节点。因此,我们一般采用一些近似算法,包括层次Softmax和负采样。

2.2负采样

        负采样是提高Skip-gram模型训练效率的一种近似算法。它的主要思想是: 不需要精确地计算p(vj|ui), 只需要尽可能地区分目标节点和其他噪声。这个噪 声就是我们所谓的负样本,噪声的分布就是负采样所遵循的概率分布Pn (为了简洁,很多情况下我们都使用均匀分布,也就是均匀随机采样作为负样本)。假  设我们从Pn 采样K 个负样本,负采样将logp(vj|vi) 近似为:

2.2node2vec

        node2vec和DeepWalk的目标类似,都是最大化观察到邻接节点的概率,它们的主要不同在于采样的方式。DeepWalk采用了无偏的随机采样,每次 向前、向后采样固定长度的一条路径;而 node2vec将采样邻居节点看作一个搜 索问题,它对两个图搜索策略(宽度优先搜索和深度优先搜索)做了权衡,然后用它们进行采样。

        具体来说,node2vec定义了两个随机游走的超参数p q,p   控制立刻访问节点的概率,q控制访问节点的邻居的概率。如果p高,就代表已经被访问的节点在接下来的两步被访问到的可能性更低。在q>1  的情况下,随机游走倾向于访问近的邻居节点;在q<1 的情况下,随机游走倾向于访问远的节点。通过控制p  q,   我们可以平衡宽度优先搜索和深度优先搜索策略,因为宽度优先搜索倾向于保留节点在邻域附近的角色,而深度优先搜索则倾向于获得更加全局的结构信息。

2.3 随机游走与矩阵分解的统一

        早在2014年,Levy 等人就提出了基于Skip-gram 的词向量实际上可以看成一种矩阵分解,那么具有类似目标的网络嵌入模型呢,会不会也有同样的特征?Qiu 等人分析了几种经典的网络嵌入方法,如DeepWalknode2vec LINEI97 PTEI98, 发现它们全都可以统一成矩阵分解的形式。

3.从自编码器的角度看图嵌入

        所有图嵌入的方法实际上都是一个自编码器。前面已经讲到了图分解,GraRep 和HOPE 是一个重构某种相似度矩阵的自编码器。 这个框架其实也可以扩展到几乎所有本章涉及的模型中。总体来说,我们可以先定义一个图中节点的相似度度量sg(vi,vj),然后通过一个线性编码器f(x)=Zx      和一个解码器DEC(vi,vj)重构节点间的相似度。

小结

浅层图嵌入方法广泛应用于数据挖掘领域,是得到图节点的低维表示的一 种很直观的方法,但它们也有天然的局限性。

(1)浅层图嵌入方法是对图中出现的所有节点直接习得最终的表示,它们的编码器是将每个节点线性映射到最终的嵌入向量f(x)=Zx,   因此参数的数量和节点数量相关,在节点数量很多时,参数量会变得过多。相比之下,图神经网络(如图卷积网络)的参数是用来将节点本身的属性向量映射到一个更低维的向量,与节点的数量无关,只与节点属性向量的维度有关。

(2)浅层图嵌入方法通常只考虑图的结构,而忽略了节点本身的属性。图神经 网络则结合了节点本身属性和图的拓扑结构的信息。

(3)浅层图嵌入方法只能采用直推式学习,如果它们要学习一个节点的嵌入, 则这个节点必须是在训练过程中出现的,对于未出现过的节点则无能为力。而图神经网络(如GraphSAGE 等),通过学习一个所有节点共通的编码器,可以很轻易地把嵌入方法推广到未知节点上。


http://www.kler.cn/a/307915.html

相关文章:

  • 嵌入式硬件实战提升篇(一)-泰山派RK3566制作多功能小手机
  • 【常见问题解答】远程桌面无法复制粘贴的解决方法
  • 飞牛云fnOS本地部署WordPress个人网站并一键发布公网远程访问
  • 测试工程师简历「精选篇」
  • 深度学习——优化算法、激活函数、归一化、正则化
  • 【STM32F1】——无线收发模块RF200与串口通信
  • 鸿蒙开发入门day19-使用NDK接口构建UI(二)
  • MFC工控项目实例之十七添加手动测试界面
  • Spring Boot-Swagger相关问题
  • Docker容器技术1——docker基本操作
  • 机器学习算法与Python实战 | 概率、统计学在机器学习中应用:20个Python示例(建议收藏!)
  • 宝塔面板优化:提升服务器性能的实用指南
  • cv2.bitwise_or 提取ROI区域
  • C++ char*和char[] 可能指向的内存区域详解(附实验)
  • 使用随机森林模型在digits数据集上执行分类任务
  • 基于鸿蒙API10的RTSP播放器(三:底部视频滑轨进度显示)
  • 基于python+django+vue的学生管理系统
  • Python 课程13-机器学习
  • CSS调整背景
  • 文档内容识别系统源码分享
  • 绘制简单的激波的图
  • 【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
  • 基于深度学习,通过病理切片直接预测HPV状态|文献速递·24-09-16
  • web技术栈总体概念
  • 有关C# .NET Core 过滤器的使用
  • vue part 11