前言

在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等。如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于Random Walk的节点表示方法。

Embedding Nodes

既然要对node进行embedding,那么我们可以参考下word embedding,在nlp中,embedding过后的同意词,通常会聚在一起,
同样的,如果我们对图的节点进行embedding,有关系的节点,我们自然希望其embedding之后能聚在一起,如下图所示

也就是说,我们希望embedding之后的node vector点乘之后的值(可以理解为未归一化的cosine)接近于原graph中的节点相似度,原图的相似度可以采用是否节点相连,是否有相同的邻居节点等方式来定义。
similarity(u,v)=zvTzusimilarity(u,v)=z_v^Tz_usimilarity(u,v)=zvTzu

根据上面的内容,我们为生成node embedding定义三个步骤

  • 定义生成embedding的encoder
  • 定义一个节点相似度的计算函数
  • 优化encoder的参数,让其点乘后的结果约等于相似度

一种简单的Embedding方法

采用类型word embdding的方式,定义一个embdding lookup矩阵

encoder(v)=Zvencoder(v)=Zvencoder(v)=Zv

其中Z是嵌入矩阵,v是节点的one-hot表示方式

这样每个节点就能对应唯一的一个embedding vector。

接下来我们考虑第二步,怎么来定义我们上面提到的原图的相似度呢,判断节点是否有关系?是否有相同的邻居节点?显然,这些都不是很好的方式,并且没法进行度量。

Random Walk

随机游走是指给定一个图和一个起始节点,随机选择一个邻居节点,走到该处后再随机选择一个邻居,重复length次。length是指随机游走的长度。

使用随机游走从起始节点到终止节点的概率值,实际上就可以用来表示相似度,也就是说,从u节点到v节点的概率值,应该正比于u节点与v节点embedding之后的点乘结果。

zvTzu∝P(v∣u)z_v^Tz_u \propto P(v|u)zvTzuP(vu)

这种方法有两个优点

  • 相似度的定义结合了局部信息与高阶领域信息。
  • 只需要考虑随机游走的节点,不需要考虑全局信息,效率高。

参数优化

接下来是第三步,参数优化,给定图G=(V,E)G=(V,E)G=(V,E),定义NR(u)N_R(u)NR(u)表示采用策略R得到的邻居节点,我们的目标就是学习映射关系z

z:u→Rdz:u\rarr \Bbb{R}^dz:uRd

表示为对数似然函数为

max∑u∈VlogP(NR(u)∣zu)max \sum_{u \in V} log P(N_R(u) | z_u)maxuVlogP(NR(u)zu)

简单解释下,即我们希望给定uuu的embedidngzuz_uzu,我们希望其邻居节点出现的概率最大。最终损失函数可以表示为:

L=−∑u∈V∑v∈NR(u)log(P(v∣zu))L = -\sum_{u\in V} \sum_{v \in N_R(u)} log(P(v|z_u))L=uVvNR(u)log(P(vzu))

P(v∣zu)=exp(zuTzv)∑n∈Vexp(zuTzn)P(v|z_u) = \frac{exp(z_u^Tz_v)}{\sum_{n \in V} exp(z_u^Tz_n)}P(vzu)=nVexp(zuTzn)exp(zuTzv)

注意softmax的分母z的下标是n,我们只想让u的邻居出现概率最大。

到了这一步,我们就可以采用SGD等方法来优化参数了。但是,如果你仔细看损失函数,可以发现L的计算复杂度是很高的,因为其外面嵌套了两层的求和,因此时间复杂度是∣V∣2|V|^2V2,有什么方法能降低其复杂度吗?

负采样

在计算分母的时候,上面的方面会针对有所有的几点进行一遍计算,为了简化该过程,使用类似word2vec中的负采样,只采样k个负样本

log(exp(zvTzu)∑u∈Vexp(zvTzn))=log(σ(zvTzu))−∑i=1klog(σ(zvTzni))log(\frac{exp(z_v^Tz_u)}{\sum_{u\in V}exp(z_v^Tz_n)}) = log( \sigma(z_v^Tz_u))-\sum_{i=1}^klog(\sigma(z_v^Tz_{n_i}))log(uVexp(zvTzn)exp(zvTzu))=log(σ(zvTzu))i=1klog(σ(zvTzni))

k是一个超参数,k越高表示负样本的偏见越高,较高的K能得到更可靠的估计结果,通常k取5-20。

Node2Vec

random walk的每一步都是无偏游走,也就是说走到下一个邻居节点的概率都相同的,那么游走的结果可能会只关注局部信息类似BFS(甚至是两个节点来回跳),或者只关注全局信息类似DFS,如下图所示。

NBFS(u)=s1,s2,s3N_{BFS}(u)={s_1,s_2,s_3}NBFS(u)=s1,s2,s3

NDFS(u)=s4,s5,s6N_{DFS}(u)={s_4,s_5,s_6}NDFS(u)=s4,s5,s6

那么有没有什么方法能控制其游走的策略呢?node2vec提出了一种游走的策略,该策略包含两个参数

  • p p用来控制返回上一个节点
  • q q用来控制远离上一个节点,改参数也可以理解为采用dfs还是bfs的一个比例值

看个具体的例子

首先我们穿过了边(S1,W)走到了节点W,下一步该怎么走呢,此时,不同的路径会对应不同的概率值

  • 如果是返回原节点,则概率为1/p
  • 如果是原理原节点,则概率为1/q
  • 如果和原节点具体保持不变,则概率为1

注意,这里的概率是一个非归一化的概率值

显然,如果我们想采用BFS,那么只需要调低p的值,如果想采取DFS,只需要调低q的值。这样游走的过程中,我们就可以自由的控制是想得到更多的局部信息还是全局信息。

最后总结一下node2vec的算法流程

  • 定义随机游走的概率值
  • 从节点uuu开始,随机游走lll
  • 定义node2vec的的损失函数,并采用SGD进行参数优化

References

cs224w 7. Graph Representation Learning

基于随机游走Random Walk的图节点Node表示相关推荐

  1. 随机游走(Random Walk)模型详解:历史||数学表示||物理意义

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

  2. 随机游走 Random Walk

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

  3. 【图像融合】基于随机游走算法实现多焦点图像融合含Matlab代码

    1 内容介绍 近几年来,随机游走模型(random walk)与引导滤波器(guided filter)在图像处理领域受到了研究者们的广泛关注.前者已经被应用于图像处理的多种领域--图像融合.图像平滑 ...

  4. 基于随机游走的图嵌入之快速指南

    1. 背景 1.1 何为图嵌 图嵌入是利用节点属性.节点间拓扑关系将复杂.高维图数据进行向量化的一项技术. 图数据结构突破传统数据库按记录组织数据的限制,具备更灵活的现实数据建模能力.如何将图数据结构 ...

  5. 随机游走模型 matlab,基于随机游走的图像分割matlab代码

    [实例简介] 利用随机游走模型对图像进行了分割 编程环境是matlab 含有示例图片 可以直接运行 [实例截图] [核心代码] Randomwalksforimagesegmentation_matl ...

  6. python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)

    什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...

  7. garch模型python步骤_利用python进行时间序列分析——从随机游走到GARCH模型(一)...

    本文是主体是翻译Time Series Analysis (TSA) in Python - Linear Models to GARCH.但是文章主要是python操作,而理论较少,因此在此基础上补 ...

  8. [图神经网络] 图节点Node表示(DeepWalk与Node2Vec)

    一 前言 在图中,如果能把节点表示成合适的数值,能做很多任务,例如节点分类,关系预测,聚类等等.如何把节点表示成计算机能看懂的数值目前也有很多方法,本文主要为大家介绍基于DeepWalk的节点表示方法 ...

  9. 重启随机游走算法(RWR:Random Walk with Restart)

    重启随机游走算法(RWR:Random Walk with Restart) 1 pagerank算法的基本原理 Pagerank算法是Google的网页排名算法,由拉里佩奇发明.其基本思想是民主表决 ...

最新文章

  1. android电话拨号器
  2. Fbric、Ansible、Docker、Chaos Monkey:DevOps工具的年中回顾
  3. 在线教育音视频技术探索与应用
  4. 准备刺第一针了(飞秋官方下载)
  5. Webhook入门教程:Webhook vs API 它们之间有什么区别?
  6. 零基础快速开发全栈后台管理系统(Vue3+ElementPlus+Koa2)—项目概述篇(一)
  7. 你必须了解的基础的 Linux 网络命令
  8. poj 2192 Zipper
  9. Unity3D射线检测
  10. KingbaseES和PostgreSQL兼容
  11. 电脑族:常点眼药水,还得干眼症?
  12. 佐治亚理工计算机科学录取,早规划获佐治亚理工学院GaTech CS硕士录取
  13. 互联网公司的完整开发流程是怎样的?
  14. 面向对象与面向过程编程的区别
  15. 平板电脑性价比排行2022
  16. 电商五十五、商家申请入驻------------商家入驻审核业务分析
  17. LCD1602液晶显示屏的字符显示
  18. STM32F411核心板固件库开发(三) 按键检测
  19. TransactionSynchronizationManager用法和含义
  20. C#入门教程(一)visual studio与winform

热门文章

  1. DSP仿真器的必要性及原理
  2. 第三章 Python基础知识
  3. 静态成员函数和非静态成员函数的区别?
  4. 老李分享:JAVA性能监控工具
  5. 菜学C++ Day57 OJ题目1204 有趣的数字图形I
  6. 格式工厂 wav 比特率_【资源分享】格式工厂FORMAT FACTORY-5.1.0
  7. 判断是否符合 USD 格式
  8. Unity——延时执行的几种方法
  9. Elasticsearch之路由
  10. 网络故障和网络诊断工具(1.0)