论文笔记|DeepWalk

news2024/9/22 7:57:54

简介

DeepWalk是由Bryan PerozziRami Al-RfouSteven Skiena在2014年提出的,它是一种基于图的无监督特征学习方法,它有趣的点是将文本处理任务中词向量的处理思想迁移到了图特征学习上,就像处理句子得到word embedding一样,通过处理由网络中节点组成的序列从而得到Node embedding,算是图特征学习的开山之作。

 示例的输入是一个网络,输出是图中每个节点的二维向量,DeepWalk通过截断随即游走学习出一个网络的社会表示,从两张图的对比也可以发现,越是在网络中拓扑结构相近的点,其对应的二维向量在二维空间上的距离越近。

文章中提出,在学习一个网络的特征表示时,需要注意几个问题:

  • 适应性(Adaptabilty):网络表示必须适应网络的变化,因为网络是一个动态变化的网络,不断的有新的节点加入时,网络的拓扑结构也跟随着变化。
  • 社区意识(Community aware):节点在潜在维度上的距离,应该能够表示社会成员之间的相似性度,所以必须使得学习到的向量必须相似。
  • 低维(Low dimensional):每个节点的向量维度不能过高(要远远小于节点规模N),泛化能力要好,速度要快。
  • 连续(Continuous):低维向量应该是连续的,通过低维连续向量表示空间中的顶点。

那如何得到图中节点的向量表示?

方法

总结一下就是随机游走+语言模型

  • 针对网络中的每个节点进行随机游走遍历,在游走的过程中会得到一系列的有序节点序列,然后将这个有序节点序列类比为文本处理时的句子,而序列中的节点相当于句子中的单词。
  • 借助文本处理word embedding思想,对其进行训练,得到对应的向量。

随机游走

所谓随机游走(random walk),就是在网络上不断重复的随机选择游走路径,最终形成一条贯穿网络的路径,有点类似与图搜索中的深度优先遍历,但此处是随机的深度优先遍历。随机遍历有以下几点好处:

  • 局部:能够捕捉到图的局部特征;
  • 并行化:随机游走是局部的,对于一个大的网络来说,可以同时在不同的顶点进行一定路径长度的游走,并行游走时可以相应的减少采样时间;
  • 适应性:可以适应网络的局部变化,就像上文提出的一样,网络是一个动态变化的网络,所以需要解决适应性的问题,当网络中局部的节点和边发生变化时,这样只对部分随机游走的路径产生影响,这样不用每次网络结构发生变化时计算整个网络的随机游走;

幂律分布--为什么图可以用语言模型生成向量表示

文章中提到网络中随机游走的分布规律与NLP中句子序列在语料库中出现的规律有着类似的幂律分布特征,既然网络的特征与自然语言的词特征有着十分的类似,那为什么不能借助处理自然语言处理中词向量的方法,计算网络顶点的向量表示呢?

语言模型

语言模型这里不做过多的介绍,相信接触过自然语言处理的同学肯定对词向量(word embedding)不会太陌生。

算法过程

算法一共分为两个部分:

1、随机游走生成器:首先随机选择一个顶点,然后执行随机游走方法,每次游走均匀的采样一个邻居节点,直到最后一个节点达到最大长度。重复N次,重复N次,可以得到N个随机游走序列。

上述算法的3-9行是该算法的核心。外围循环的循环次数 γ ,每次都会重新在某个节点(作为根节点)开始随机游走。每次迭代都会在数据中形成一个PASS,在PASS中每个节点采样一个随机游走。在每个PASS的开始,产生随机序列遍历节点。虽然不是严格的要求,但是能加快随机梯度下降的收敛速度。 在内循环中,在每个节点上进行迭代。对于每个节点 vi ,我们产生一个随机游走 |Wvi|=t ,然后用它来更新表示(Line7)。

2、更新顶点向量:将随机游走序列变成一个窗口长度为w的Skip-Gram编码序列,然后利用梯度下降进行更新权重。

word2vec有两种训练方式,cbow和skipgram,cbow是用周围的字预测中间字,而skipgram用中间字预测周围的字。为什么DeepWalk采用后者?(个人理解) 原因在于skipgram没有过分关注“顺序”这个概念,在图结构的学习中,节点周围的节点更能反映出该节点的信息,需要更注重“局部”的刻画。所以在图中,“局部”的刻画并不需要一个很强的“顺序”的限制,所以cbow通过连续的上下文去预测中间字的方式,不太适合在该场景下使用。 

原论文也基于现有算法提出了优化策略,总的来说这篇论文为后续的学习网络特征提供了很好的思路。但是此篇论文也存在一些缺点,比如随机漫步可以当做是随机的深度优先遍历,深度往往增加了复杂度,而且没有考虑广度带来的周围邻居结构的影响;另一个是文中没有提出一个明确的优化目标函数,但这些并不妨碍其是一篇优秀的论文。

总结:

万物皆可embedding,DeepWalk是使用自然语言处理中的word2vec模型skipgram无监督算法去学习图中节点的局部表示,由于是无监督的算法,训练的时候不依赖下游的具体任务,因此学习到的embedding可以作为非常好的特征表示,天然的适应下游的各种任务,包括节点分类,异常检测,节点链接预测等。

最后,不仅是图模型,对于推荐系统的数据结构,也很适合用DeepWalk去解决,比如电商,用户点击商品序列就是一个天然的walk,由此可以学习到商品的embedding表示等,Airbnb在kdd上就发过类似的文章进行房源的embedding和用户的embedding,有兴趣的可以看看。DeepWalk是最基本的一个方式,后续出现了很多变种和改进,后续继续学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入linux内核架构--进程线程

简介 进程和线程这两个词,每个程序员都十分熟悉,但是想要很清晰的描述出来却有一种不知道从何说起的感觉。所以今天结合一个具体的例子来描述一下进程与线程的相关概念:在terminal上敲出a.out这个自己编译出来可执行程序路径后,这…

【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Kafka 3.3.1 Kraft 多端口协议搭建

Kafka 3.3.1 Kraft 多端口协议搭建 序 Kafka 3.3.1 已经出来挺久了,很多公司还停留在 1.X/2.X 甚至 0.8 版本的 kafka,不是说不能用,但是用起来真的糟糕,况且现在 Kraft 已经正式推出了,早就该更新了。 本篇文章从实…

276 t230 二叉搜索树第k小的元素

题解 思路:定义一个全局变量,初值赋予k.中序遍历,每次访问一个,变量–,当该变量为0时,就把val值赋予另一个全局变量返回. class Solution {int resKthSmallest0;int countKthSmallest;// 276 t230 二叉搜索树第k小的元素public int kthSmallest(TreeNode root, int k) {count…

大数据人工智能实验室-大数据培训方案

随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长。企业需要将隐藏在大批杂乱无章的数据中进行信息的集中、萃取和提炼,找出所研究对象的内在规律,从而对决策提供帮助&…

预训练模型-代码补全(二):Copilot(GitHub)

​ GitHub Copilot是一个为开发者提供的突破性的AI编程辅助工具,但这才是开始。 昨天,Copilot团队推出了一个名为GitHub Copilot Labs的VS Code配套扩展。它独立于(并依赖于)GitHub Copilot扩展。它可以用来解释代码和翻译代码。…

【元胞自动机】格子波尔兹曼模型研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【JNA】java springboot 动态读取动态库

【JNA】java springboot 动态读取动态库创建名为dynamic-lib-load.xml的文件资源目录结构如下工具类LibraryLoadDynamicParseUtil工具类调用我们在使用第三方动态库 时长出现动态库无法读取jar包内的动态库文件,以下代码希望对大家有帮助 废话不多说,上代…

【王道计算机网络笔记】数据链路层-局域网广域网

文章目录局域网局域网拓扑结构局域网传输介质局域网介质访问控制方法局域网的分类以太网以太网提供无连接、不可靠的服务以太网传输介质与拓扑结构的发展10BASE-T以太网适配器与MAC地址以太网的MAC帧高速以太网IEEE802标准MAC子层和LLC子层IEEE802.11有固定基础设施无线局域网无…

嵌入式:ARM体系结构详解

文章目录指令集与指令集架构主要计算机指令集架构PC及服务器领域嵌入式领域新生代ARM体系结构的演变ARM发展的历程指令集与指令集架构 指令:就是指挥计算机工作的命令,程序就是一系列按一定顺序排列的指令,计算机就是通过执行程序中的指令来…

11. softmax回归的简洁实现

通过深度学习框架的高级API也能更方便地实现softmax回归模型。 继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch from torch import nn from d2l import torch as d2lbatch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch…

在IDEA中配置Maven

文章目录Maven 简介Maven 下载与安装修改Maven配置文件Maven文件目录的含义配置IDEA的MavenMaven 简介 Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外&#x…

数据库审核工具SQLE接口调用

点击上方蓝字关注我接上文数据库审核接口SQLE的探索使用,本次自定义接口进行调用,实现需求。1、创建自定义审核接口因直接调用SQLE的审核接口,会出现token过期,且审核及结果查询接口是分开的,因此,出于以上…

Mock模拟数据动态字节码编译插件优化

模块介绍 dmc-plugin-java 动态编译字节码 关于动态编译字节码技术参考: https://blog.csdn.net/huxiang19851114/article/details/127881616 优化如下: 动态文本类改为界面配置及数据库保存 数据库表结构: DROP TABLE IF EXISTS compi…

leetcode刷题 log day56(编辑距离总结篇~

583. 两个字符串的删除操作 【思路】这道题只有删除操作,两个字符串相等时,步数不变,不相等时,只能做删除操作,删除有三种情况:删除 word1 或删除 word2 或者两个字符串都删除,取三种情况的最小…

sytem clock for ctrl ms task and us/ms delay

Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTF…

网页性能优化

网页性能优化 文章目录网页性能优化[TOC](文章目录)前言1.前端脚本优化1.1 减少重绘、回流1.2 缓存dom选择与计算1.3 使用事件委托而不是批量绑定2.渲染优化2.1 使用CSS3开启GPU硬件加速提升网站动画渲染性能2.2 touchmove、scroll、input事件添加防抖3.加载优化3.1 合并小图片…

怎么修改图片分辨率提高清晰度?如何调整图片dpi分辨率?

下载的图片有时候会比较模糊,想要改变图片清晰度的话就需要调整图片分辨率,很多小伙伴都不知道怎么去修改分辨率(在线修改照片分辨率(DPI) 调整图片DPI 照片dpi修改工具-压缩图)。今天小编就教大家一个非常…

关系抽取(三)实体关系联合抽取:TPlinker

参考: NLP系列之封闭域联合抽取:CasRel、TPLinker、PRGC、PURE、OneRel,实在是太卷了! - 知乎 (zhihu.com)NLP 关系抽取 — 概念、入门、论文、总结 TPlinker 论文:PLinker: Single-stage Joint Extraction of Entit…

乐观锁思想在 JAVA 中的实现——CAS

前言 生活中我们看待一个事物总有不同的态度,比如半瓶水,悲观的人会觉得只有半瓶水了,而乐观的人则会认为还有半瓶水呢。很多技术思想往往源于生活,因此在多个线程并发访问数据的时候,有了悲观锁和乐观锁。 悲观锁认为…