【论文精读】node2vec: Scalable Feature Learning for Networks

news/2024/4/26 23:39:35/文章来源:https://blog.csdn.net/L1142456160/article/details/129232654

node2vec: Scalable Feature Learning for Networks

可扩展的 图嵌入 表示学习算法

可扩展:算法可用于互联网规模级别的数据,在有限的时间和空间中

图嵌入:将图的连接信息嵌入到连续、低维、稠密的D维空间中

表示学习:用数据驱动方式,机器学习构造特征,不是人工构造特征。

Abstract

之前的DeepWalk只能将相邻的节点信息捕捉,对于距离较远的节点不能捕捉信息。这是因为DeepWalk的游走长度和游走策略的限制。

Node2Vec不是完全的随机游走,虽然是随机选择起始节点,但对于下一个节点的选择则是由权重决定。对于节点的选择有两种极端方案:

  • DFS(Macro-view of neighbourhood):下图中q值较小,p值较大,当前节点V更倾向于向外走
  • BFS(Micro-view of neighbourhood):p值较小,q值较大,更愿意返回上一个节点ttt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clusqnVI-1677420611865)(C:\Users\THINKPAD\AppData\Roaming\Typora\typora-user-images\image-20230223221958071.png)]

这里用广度优先和深度优先来近似表示这两种方案,DFS更倾向于表示节点的功能角色信息;BFS倾向于捕捉节点间的同质关系,即属于同一类社群。Node2Vec可以通过调参在两种极端方案之间平滑的变化。

特点(优点):

  • 通过调节p、q值,实现有偏的随机游走,探索节点社群、功能等不同属性。DeepWalk可以看做是Node2Vec在p=1,q=1的特例。

  • 首次把Node Embedding用于Link Prediction

  • 可解释性、可扩展性号

缺点:

  • 和DeepWalk一样,仍然需要大量的随机游走序列训练,是管中窥豹
  • 随机游走序列有长度限制,距离较远的两个节点无法直接相互影响,看不到全图信息(图神经网络)
  • 无监督学习,仅编码图的连接信息,没有利用节点的属性特征(图卷积)
  • 没有真正用到神经网络和深度学习

Introduction

很多重要的任务都与预测网络的节点和边有关。在经典的节点分类任务中,我们希望预测节点的最有可能的标签。例如,在社交网络中,我们可能预测用户的兴趣或者在蛋白质相互作用网络中,我们可能预测蛋白质的功能。

在连接预测中,我们也希望预测图中的两个节点之间是否存在相连的边,连接预测在很多领域都是适用的。例如在基因组学中,它帮助我们预测基因之间未经发现的相互连接;在社交网络中,它可以识别两个用户之间的联系。

下面提出一些方案,并给出其缺陷之处,最后引出自己提出的方案

任何监督学习的机器学习算法都需要许多内含丰富语义的、有分类区分性的、彼此相互独立的特征。在图的预测任务中,这要给节点和边构建特征向量。

传统的解决方案是根据专家知识人工设计特征。这样做的弊端,即使不考虑人工设计特征的繁琐,这样的方案只能是为专门的任务设计,并不能适用于大多数预测任务。

一个替代方案是通过求解一个优化问题来学习图中节点和边的特征表示。这里的关键是定义一个合适的目标函数,它涉及到在计算效率和预测精度之间的平衡。

  • 只看预测精度:如果直接求解使得在下游任务上取得最好表现的特征表示;虽然可以取得好的精度,但由于参数数量的激增使得需要花费的训练时间激增
  • 如果将目标和函数定义为与下游任务无关并且用无监督学习方法来学习特征表示,这样产生的特征表示与监督学习方法产生的特征在预测精度上相媲美。

然而,当前的技术还不能定义和优化网络中可扩展的、无监督的特征学习方法所需的合理目标。

基于线性和非线性降维技术(如主成分分析、多维缩放及其扩展[3,27,30,35])的经典方法优化了一个目标,该目标转换网络的代表性数据矩阵,从而使数据表示的方差最大化。由于计算的复杂性,这种涉及到特征值缩减(eigendecomposition)的方法是不适用于真实世界的大规模图数据,并且得到的特征表示在多个预测任务上表现不佳。


我们可以设计一种目标函数,保存节点的局部邻域信息。这个目标函数可以使用随机梯度下降有效优化,类似于只有单层的神经网络中的反向传播算法。在这个方向上的研究,例如DeepWalk和LINE,他们虽然可以有效得到特征表示,但其依赖于僵硬的模式,对图特有的连接模式不敏感(总的来说就是不能捕捉全图连接模式,只能捕捉局部信息)。

图中节点的组织有两大类思路:

  • 根据其所属的社群
  • 根据其在网络中扮演的角色

在下图中,节点uuus1s_1s1属于同一社群,节点uuus6s_6s6在图中具有相近的功能角色,都是各自子图的枢纽。而真实世界的网络是这两种模式的混合。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rC0Xw1f6-1677420611867)(C:\Users\THINKPAD\AppData\Roaming\Typora\typora-user-images\image-20230225171238726.png)]

因此,需要一种更灵活的算法,能将距离或功能角色相近的节点嵌入到距离相近的向量中。


这里作者引出了自己的工作

Present Work

我们通常了node2vec,一种可扩展的半监督学习算法在图的特征学习上。我们使用SGD优化了一个自定义的基于图的目标函数,该方法是源于Word2vec在自然语言处理领域的启发。直观上看,我们的方法返回的特征表示最大化了在d维空间中保留节点的网络邻域信息的似然概率。我们使用二阶随机游走去采样节点的相邻节点。

二阶随机游走(二阶马尔可夫性):下一节点不仅与当前节点有关,还与上一节点有关。

key contribution

  • 定义了一种灵活的节点采样策略。

    基于此,node2vec学习到的特征可以将节点根据其所属邻域和功能角色所划分。相比较与DeepWalk和LINE,该算法是灵活的,根据可以调节的参数来控制随机游走搜索的空间。该参数对于随机游走搜索的空间有一个直观的解释,这些参数也可以通过一小部分有标注的数据用半监督学习的方法学习得到。

  • 将节点的特征表示延伸到了边的特征表示,通过对已经学到的一对节点的特征表示进行二元操作,这些可用于边的预测。

参考资料

同济子豪兄

Darts, Dice, and Coins: Sampling from a Discrete Distribution

Alias Method: 非均匀随机抽样算法

DBSCAN聚类算法——机器学习(理论+图解+python代码)

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线文档技术-编辑器篇

这是在线文档技术的第二篇文章,本文将对目前市面上所有的主流编辑器和在线文档进行一次深入的剖析和研究,从而使大家对在线文档技术有更深入的了解,也让更多人能够参与其开发与设计中来。 注意:出于对主流文档产品的尊重&#xf…

基础数据结构--线段树(Python版本)

文章目录前言特点操作数据存储updateLazy下移查询实现前言 月末了,划个水,赶一下指标(更新一些活跃值,狗头) 本文主要是关于线段树的内容。这个线段树的话,主要是适合求解我们一个数组的一些区间的问题&am…

Xcode Developer Document 开发者文档

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroDeveloper Documentation 打开方式菜单栏点击 | 快捷键方式另一种打开方式Intro 2016年我在学校学Java的时候,要查某个Java类/方法的用法还得自己手动下载一种.chm格式的开发文档文件&#xff0c…

Oracle-RAC集群主机重启问题分析

问题背景: 在对一套两节点Oracle RAC19.18集群进行部署时,出现启动数据库实例就会出现主机出现重启的情况,检查发现主机重启是由于节点集群被驱逐导致​。 问题: 两节点Oracle RAC19.18集群,启动数据库实例会导致主机出现重启。 问题分析: 主机多次出现…

DFT基本入门介绍

1.什么是DFT?2.为什么要做DFT?3.“测试”与“验证”的区别4.DFT的核心技术1)扫描路径设计(Scan Design)2)内建自测试(Bist)3)JTAG4)ATPG5.DFT工程师的岗位职责随着芯片的制程越来小(5nm), 芯片的…

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的,而对于因特尔芯片的文章少之又少,这就导致我们还在用老Intel 芯片的Mac本,看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…

Android 分区和内存监控

Andorid之所以是分区,是因为各自有对应的功能和用途的考量,可以进行单独读写和格式化。Android 设备包含两类分区:一类是启动分区,对启动过程至关重要。一类是用户分区,用于存储与启动无关的信息。启动分区boot 分区一…

数据库之高级查询

注意:第一个包含空,第二句不包含空注意:第二句是错的,聚合函数不能出现在where中。注意:相当于,按照分组属性,求出每个组的聚合函数值,所以肯定不能放单个属性有冲突with rollup是最…

一文带你搞定线程池原理

1.使用线程池的意义何在?项目开发中,为了统一管理线程,并有效精准地进行排错,我们经常要求项目人员统一使用线程池去创建线程。因为我们是在受不了有些人动不动就去创建一个线程,使用的多了以后,一旦报错就…

怎么依靠网络赚钱,网上可以做什么副业

如今,网上赚钱已经成为许多人职业生涯的选择之一。网上有很多可靠的兼职,让你在家里轻松赚钱。今天给大家推荐五份可靠的网上兼职。一、怎样选择可靠的网络兼职可靠的网络兼职一般是指在家通过网络平台完成兼职任务,完成任务后即可获得报酬。…

学习python第一天---前缀和

一、3956.截断数组(前缀和)二、前缀和(前缀和)[0]list(map(int,input().split()))三、子矩阵的和(前缀和)range(1,n1)四、K倍区间(前缀和)五、激光炸弹(前缀和&#xff0…

Spring Cache的使用--快速上手篇

系列文章目录 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 完善登录功能–过滤器的使用 更多该系列文章请查看我的主页哦 文章目录系列文章目录前言一、Spring Cache介绍二、Spring Cache的使用1. 导入依赖2. 配置信息3. 在启动类上添加注解4. 添加注解4.1 CacheP…

在Angular项目中引入NG-ZORRO

在Angular项目中引入NG-ZORRO1.前置2.安装NG-ZORRO并进行初始化配置3.引入样式4.引入组件1.前置 首先创建一个angular项目:angular创建一个新项目的步骤 这是我项目的结构: 2.安装NG-ZORRO并进行初始化配置 安装NG-ZORRO:cd 到当前项目位…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统可在微信公众号 *高级嵌入式软件* 里回复 *智能算法* 查看完整版文章摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2…

《MySQL学习》 表中随机取记录的方式

一.初始化测试表 创建表 words CREATE TABLE words ( id int(11) NOT NULL AUTO_INCREMENT, word varchar(64) DEFAULT NULL, PRIMARY KEY (id)) ENGINEInnoDB;插入测试数据 create procedure idata()begin declare i int; set i 0; while i<10000 do insert into words…

第二节类型转换、运算符

类型转换 自动类型转换&#xff1a; 类型小的变量可以赋值给大的类型变量。 表达式的自动类型转换&#xff1a; byte short char在表达式中是当做 int计算的。 强制类型转换&#xff1a; 大类型的变量转化为小类型的变量。 注&#xff1a;浮点型转换为整数是直接丢掉小数部…

尚硅谷nginx基础

nginx1. nginx安装1.1版本区别1.2安装步骤1.3 启动nginx1.4关于防火墙1.5 安装成系统服务1.6 配置nginx环境变量2. nginx基本使用2.1 基本运行原理2.2 nginx配置文件2.2.1 最小配置2.2.1.1 基本配置说明2.3 虚拟主机2.3.1域名、dns、ip地址的关系2.3.2IP地址和DNS地址的区别2.3…

学渣适用版——Transformer理论和代码以及注意力机制attention的学习

参考一篇玩具级别不错的代码和案例 自注意力机制 注意力机制是为了transform打基础。 参考这个自注意力机制的讲解流程很详细&#xff0c; 但是学渣一般不知道 key&#xff0c;query&#xff0c;value是啥。 结合B站和GPT理解 注意力机制是一种常见的神经网络结构&#xff0…

Android安卓中jni封装代码打包为aar

前文【Android安卓中jni与Java之间传递复杂的自定义数据结构】已经介绍jni编译c++代码且已经成功封装成java,但是c++是以源代码形式继承在app中,本文介绍如何将前述jni c++代码以隐藏源代码封装成aar的形式。 1、aar打包 1.1、新建module 按照流程 File -> New Module …

windows服务器实用(4)——使用IIS部署网站

windows服务器实用——IIS部署网站 如果把windows服务器作为web服务器使用&#xff0c;那么在这个服务器上部署网站是必须要做的事。在windows服务器上&#xff0c;我们一般使用IIS部署。 假设此时前端给你一个已经完成的网站让你部署在服务器上&#xff0c;别人可以在浏览器…