图嵌入表示学习—Node Embeddings随机游走

article/2025/8/23 16:23:00

Random Walk Approaches for Node Embeddings

一、随机游走基本概念

请添加图片描述
想象一个醉汉在图中随机的行走,其中走过的节点路径就是一个随机游走序列

随机行走可以采取不同的策略,如行走的方向、每次行走的长度等。

二、图机器学习与NLP的关系

请添加图片描述

从图与NLP的类比关系可以看出,图机器学习和NLP相似度很高,了解两者的类比关系可以加深对图机器学习的理解。

随机游走的根本目标是对图中的各个节点进行编码,将图中的各个节点编码成可供下游任务使用的向量,即编码器。因此,随机游走是一个无监督/自监督算法,没有使用任何标签。

三、概念定义(可以先看后面,用到时再看概念)

请添加图片描述

  1. z u \mathbf{z} _u zu:期望获得的节点 u u u的嵌入向量,是算法的目标

  2. P ( v ∣ z u ) P(v|\mathbf{z} _u) P(vzu):从 u u u节点出发的随机游走序列经过 v v v节点的概率。

    如果 u u u节点和 v v v节点出现在同一个随机游走序列,那么 P P P值应该高;如果 u u u节点和 v v v节点没有出现在同一个随机游走序列,那么期望 P P P应该低,这也是之后优化算法的根本思路。

  3. P ( v ∣ z u ) P(v|\mathbf{z} _u) P(vzu)的计算:本文使用softmax计算 P P P值,具体计算方法在“五、优化算法”中,这里只介绍两个非线性函数

    • softmax:将k维的向量的值通过softmax改为k维的概率值,其中:
      σ ( z ) [ i ] = e z [ i ] ∑ j = 1 K e z [ j ] \sigma(z)[i]=\frac{e^{z[i]}}{\sum_{j=1}^K e^{z[j]}} σ(z)[i]=j=1Kez[j]ez[i]

    • sigmoid:将k维嵌入向量的值映射到0-1,其中:
      S ( x ) = 1 1 + e − x S(x)=\frac{1}{1 + e^{-x}} S(x)=1+ex1

  4. 相似度similarity:数量积(余弦相似度)

    因为嵌入向量 z z z在最后都通过计算使其度量(向量长度)相同,所以可以直接求向量积来代表其相似度。
    s i m i l a r i t y = z u T z v similarity=\mathbf{z} _u ^T \mathbf{z} _v similarity=zuTzv

  5. N R ( u ) N_R(u) NR(u):选定游走策略为R,在 u u u节点为起点的条件下,访问得到的节点的集合。

四、随机游走算法

1、特征学习优化策略:

请添加图片描述

优化算法总目标:对于给定的图 G G G,随机游走的目标是找到一个函数 f f f,其可以将节点 u u u映射为 d d d维的向量 z u \mathbf{z} _u zu

似然目标函数:如图,在确定出发节点 u u u的条件下(即向量 z u \mathbf{z} _u zu),与 u u u节点同一序列的节点集合 N R ( u ) N_R(u) NR(u)中的节点出现的概率最大。可以看出其本质是极大似然估计。

2、随机游走优化策略:

请添加图片描述

  1. 选定游走策略R,对每个节点 u u u进行固定长度的随机游走。
  2. 对每个节点 u u u,收集 N R ( u ) N_R(u) NR(u)
  3. 对于给定的节点 u u u N R ( u ) N_R(u) NR(u),更新 z u \mathbf{z} _u zu,使优化目标函数最大。最终得到的 z u \mathbf{z} _u zu即维节点 u u u的嵌入向量。

其中,优化目标函数在随机游走算法中等同于:

请添加图片描述

其中,第一个求和符号 u ∈ V u \in V uV代表遍历图 G G G的所有节点,第二个求和符号 v ∈ N R ( u ) v \in N_R(u) vNR(u)代表遍历所有 N R ( u ) N_R(u) NR(u)中的节点, l o g log log加负号使求最大变为求最小,这样,优化目标函数变为了损失函数。

P ( v ∣ z u ) P(v|\mathbf{z} _u) P(vzu)使用softmax进行求解。

进一步解释如图:

请添加图片描述

3、随机游走算法的优化—负样本:

请添加图片描述

从图中可以看出,在计算softmax时,需要遍历图 G G G的顶点两次,时间复杂度为 O ( ∣ V ∣ 2 ) O(|V|^2) O(V2),这是不可接受的。

在此使用负采样解决softmax难算问题:

请添加图片描述

如图,在计算softmax时,对于分母,不用计算图中所有的节点,而是采样 k k k个负节点进行计算。注意:图 G G G中每个节点的采样概率是不同的,在Node2Vec中采用类似于Word2Vec中词频的方法。

此方法原理解释如下:

请添加图片描述

关于K的取值是一个超参数:

请添加图片描述

更高的K意味着采样更多的点,这回增加模型的健壮性。但是相同的更多的会引入更多的负样本,这回导致正负样本失衡,影响训练,因此一般来说K的取值在5到20之间。理论上,同一个随机游走序列中的节点不应被采样为负样本。

4、优化过程—随机梯度下降

因这里是机器学习的基础,故在此不做赘述:

请添加图片描述
请添加图片描述

五、总结

请添加图片描述

  1. 选定游走策略R,对每个节点 u u u进行固定长度的随机游走。
  2. 对每个节点 u u u,收集 N R ( u ) N_R(u) NR(u)
  3. 利用损失函数,采用随机梯度方法对 z u \mathbf{z} _u zu进行优化。损失函数可以采用负样本算法简化计算。

本文只是将游走策略抽象为R,那么具体什么样的策略是真正有效的呢,DeepWalk和Node2Vec提供了可以参考的具体思路。

图片截选自——斯坦福CS224W: Machine Learning with Graphs


http://chatgpt.dhexx.cn/article/4Z31mXZQ.shtml

相关文章

图机器学习——2.1 节点嵌入:基于随机游走

嵌入(embedding)方法是目前文本分析,知识图谱相关中非常常见的一种算法。其为表示学习的一类方法,可以自动地从数据中学习“有用”的特征,并可以直接用于后续的具体任务。后面学习的相关嵌入学习均为表示学习中的内容。…

Python模拟随机游走

随机游走模型由首先由爱因斯坦在1926年以数学方式描述。由于自然界中的许多实体会以不可预知的方式移动,因此随机游走模型用来描述这种不稳定的移动。在这种移动模型中,移动节点随机选择一个方向和速度来从当前位置移动到新的位置。下面展示一维和多维情…

Python基于随机游走模型的PageRank算法及应用

资源下载地址:https://download.csdn.net/download/sheziqiong/86812933 资源下载地址:https://download.csdn.net/download/sheziqiong/86812933 基于随机游走模型的 PageRank 算法及应用 一、课题背景介绍 1.1 随机游走模型 随机游走也称随机漫步&…

图——随机游走算法

文章目录 推荐基本概念PageRankPersonalRankTextRankSimRank 推荐基本概念 其中用户user[A,B,C],物品item[a,b,c,d],用户和物品有以下的关系 上述便是一个典型的二分图,我们用G(V,E)来表示,其中V为用户user和物品item组成的顶点集即[A,B,C,…

python二维随机游走_Python模拟随机游走图形效果示例

本文实例讲述了Python模拟随机游走图形效果。分享给大家供大家参考,具体如下: 在python中,可以利用数组操作来模拟随机游走。 下面是一个单一的200步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现。纯Python方式实现,使用了内建的 random 模块: # 随机游走 i…

随机游走 推荐系统论文阅读

emmmm本篇博客主要写了,自己阅读的一些论文,做了一些笔记,主要是记录。 基于深度随机游走的协同过滤推荐算法_刘靖凯 推荐算法:召回和排序 召回步骤常用的算法有协同过滤算法、隐语义算法 常用的协同过滤算法有基于用户的协同过…

理解随机游走

随机游走 基本思想 从一个或一系列顶点开始遍历一张图。在任意一个顶点,遍历者将以概率1-a游走到这个顶点的邻居顶点,以概率a随机跳跃到图中的任何一个顶点,称a为跳转发生概率,每次游走后得出一个概率分布,该概率分布…

随机游走问题

随机游走指的是在一个点以等可能的概率走向下一个点。 问题1: Link:https://www.luogu.com.cn/problem/P3232 题意:这道题其实相当于求每条边经过的期望次数。 思路:每条边经过的期望次数不好算,我们想到点经过的期望次数。于…

随机游走 Random Walk

随机游走(英语:Random Walk,缩写为 RW),是一种数学统计模型,它是一连串的轨迹所组成,其中每一次都是随机的。[1][2]它能用来表示不规则的变动形式,如同一个人酒后乱步,所…

时间序列:时间序列模型---随机游走过程(The Random Walk Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 随机游走过程是一种特殊的ARMA序列。从分子运动到股价波动等现象都被建模为随机游走。 随机游走过程是AR(1)序列,而且,时间序列在时刻的值为: 随机游走过程本质上是到当前时间…

随机游走(Random Walk)算法

随机游走 英文:random walk 定义:随机游走,概念接近于布朗运动,是布朗运动的理想数学状态。 核心概念:任何无规则行走者所带的守恒量都各自对应着一个扩散运输定律。 随机游走算法的基本思想是: 从一个或一系列顶点…

ArrayList分页Lists.partition遇到的坑

一、问题的发现 最近在用分布式任务powerjob的时候,发现了一个关于数组分页之后的序列化问题。事情是这样的,在我执行MapReduce模式的时候,发现了在生成子任务时报了com.esotericsoftware.kryo.kryo5.KryoException: Class cannot be created…

partition list java_Java之Lists.Partition项目中的使用

开心一笑 【媳妇儿问我:“孩子都快出生了,你名字想好了没呀?” 我说:“都想好了,要是生个儿子名字就叫“好帅” 媳妇儿问:“为什么呀?” 我说:“别人看到我就会说,好帅的爸爸。】 提出问题 Java之Lists.Partition在项目中的如何被使用??? 学习地址 解决问题 前言 具…

Lists.partition的使用和里面的坑

作用 partition(List list, int size): 将list集合按指定长度进行切分&#xff0c;返回新的List<List<??>>集合。 案例 引入pom文件 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><vers…

Lists.partition集合分组使用以及注意事项

1.介绍 Lists.partition是com.google.common.collect包下的一个方法。 作用是将目标集合按照传入的size分组。 2.使用场景 一般用于固定大小的集合处理&#xff0c;比如&#xff1a;我有两百个商品类型&#xff0c;要求前一百个一种处理方式&#xff0c;后一百个一种处理方…

Guava Lists.transform踩坑小记

1.问题提出 1.前段时间在项目中用到Lists.transform返回的List&#xff0c;在对该list修改后发现修改并没有反映在结果里&#xff0c;研究源码后发现问题还挺大。 下面通过单步调试的结果来查看Guava Lists.transform使用过程中需要注意的地方。 a.对原有的list列表修改会影响L…

Google guava工具类中Lists、Maps、Sets简单使用

Google guava Guava是对Java API的补充&#xff0c;对Java开发中常用功能进行更优雅的实现&#xff0c;使得编码更加轻松&#xff0c;代码容易理解。Guava使用了多种设计模式&#xff0c;同时经过了很多测试&#xff0c;得到了越来越多开发团队的青睐。Java最新版本的API采纳了…

Java常用工具类 : StringUtils、CollectionUtils、ArrayUtils、Lists、Maps等

文章目录 StringUtils引入依赖判断函数 (isNotBlank系列)大小写函数 (转换)删除函数 (remove)字符替换函数 (replace)拆分合并函数 (split)截取函数 (substring)删除空白函数 (trim)判断是否相等函数 (equals)是否包含函数 (contains) CollectionUtils集合判断函数并集、交集、…

Lists的使用

List&#xff08;接口&#xff09;顺序时List最重要的特性&#xff1a;它可保证元素按照规定的顺序排列。List为Collection添加了大量方法&#xff0c;以便我们在List中部插入和删除元素&#xff08;只推荐对LinkedList这样做&#xff09;。List也会生成一个ListIterator&#…

Lists 方法汇总

一、Lists.partition(List<T> list, int size) 将 list 集合按指定长度进行切分&#xff0c;返回新的List<List<T>>集合。 import com.google.common.collect.Lists; import org.junit.Test; import java.util.List;public class ListDemo {Testpublic voi…