tech share
  • tech-share
  • Engineering
    • 登录鉴权
    • SSR 页面路由
    • npm 版本号
    • 缓存
    • 数据库容灾
    • 动态效果导出 gif
    • Chrome-devtools
    • C 端 H5 性能优化
    • Docker
    • Monorepo 最佳实践
    • 技术架构演化
    • 项目规范最佳实践
    • snowpack
    • 静态资源重试
    • 前端页面渲染分析
    • Git
    • 前端重构
    • 微前端
    • 项目依赖分析
    • 前端监控原理
    • webpack
    • BS 架构与 CS 架构
    • HTTPS
    • package-lock.json 生成逻辑
    • SVN(Subversion)
    • 数据库分类
    • gulp
    • 前端架构
    • Bundle & Bundless
    • 控制反转 IoC
  • JavaScript
    • Javascript 性能
    • JavaScript 原型(2) - 原型与原型链
    • JavaScript 原型(1) - 构造函数
    • JavaScript - Promise
    • ES6 解构赋值
    • 前端离线化
    • Proxy
    • Object.defineProperty()简介
    • TypeScript
  • MachineLearning
    • GAN生成对抗网络
    • 虚拟对抗训练
    • 深度度量学习
    • 原型网络
    • PyTorch优化器
    • 隐马尔可夫模型2
    • Shapley Value 算法
    • Embarassingly Autoencoder算法
    • AutoRec算法及其后续发展
    • 深度学习常用激活函数
    • 序列预测ConvTran算法
    • 联邦学习
    • 深度学习推荐系统算法整理
    • 隐马尔可夫模型
    • 黎曼优化方法
    • FM算法
    • 机器学习常见评价指标
    • VAE算法
    • Adam优化器详解
    • Transformer算法
    • Self-attention 推荐算法
    • CNN 卷积神经网络
    • 图嵌入
    • 集成学习算法
    • RecBole开源框架
    • NCE-PLRec
    • 深度学习初始化方法
    • RNN循环神经网络
    • PyTorch数据处理
    • PyTorch安装和基本操作
    • XGBoost算法
    • NCF算法与简单MF的对比
    • 计算最佳传输
  • CSS
    • 什么是BFC
    • 纯CSS实现可拖动布局
    • 滚动穿透解决方案
  • React
    • React 生命周期
    • React Ref
    • React Hooks
    • SWR
    • React 数据流
    • React 函数式组件和类组件的区别
  • 可视化
    • OffscreenCanvas
    • Echarts 平滑曲线端点为什么不平滑
    • 颜色空间
    • 词云布局解析
    • 3D 数学基础
    • Canvas 图片处理
    • GLGL ES
    • WebGL 中绘制直线
    • Graphics API
    • 现代计算机图形学基础
    • Canvas 灰度
  • Vue
    • Vue2.x全局挂载整理
    • Vue2.6.x源码阅读
      • Vue2.6.x源码阅读 - 2.目录结构分析
      • Vue2.6.x源码阅读 - 4.源码阅读-platform
      • Vue2.6.x源码阅读 - 1.准备工作
      • Vue2.6.x源码阅读 - 5.源码阅读-core-Vue构造函数
      • Vue2.6.x源码阅读 - 7.源码阅读-core-响应式原理
      • Vue2.6.x源码阅读 - 3.源码阅读-shared
      • Vue2.6.x源码阅读 - 6.源码阅读-core-组件挂载
    • Vue + TypeScript Web应用实践
    • Vue2.x指令
    • nextTick()的使用
    • vue-cli2.x 的使用与项目结构分析
    • Vue响应式原理及总结
    • VueX的使用
    • Electron-Vue + Python 桌面应用实践
    • Vite
    • Vue组件通信整理
    • 记录一个问题的探索过程
  • Linux
    • memcg
  • GameDev
    • 游戏中的几种投影视图
    • 从零开始写软渲染器06
    • 从零开始写软渲染器05
    • 从零开始写软渲染器04
    • 从零开始写软渲染器03
    • 从零开始写软渲染器02
    • 从零开始写软渲染器01
    • 从零开始写软渲染器00
    • 现代游戏常用的几种寻路方案(一)
  • Node
    • NPM Dependency
    • Node 优势
    • Node Stream
    • Node 模块系统
  • HTML
    • html5语义与结构元素
  • 跨端
    • Flutter 介绍
  • Golang
    • Golang 基础
  • AR
    • SceneKit
由 GitBook 提供支持
在本页
  • 图嵌入基本思想
  • 基于DeepWalk的算法
  • 结构深度网络嵌入
  • 完整图嵌入

这有帮助吗?

  1. MachineLearning

图嵌入

上一页CNN 卷积神经网络下一页集成学习算法

最后更新于4年前

这有帮助吗?

图神经网络(Graph Neural Networks)是近年深度学习领域的研究热点。而图神经网络是建立在图嵌入(Graph Embedding)的研究基础上的。本文结合最近学习到的一些知识,对图嵌入的基本思想和方法模型做一个简单的总结。

图嵌入基本思想

图嵌入的基本思想就是将图(Graph)转化到较低维的空间上。图是计算机科学中常见的一种数据结构。早期研究者已经针对图这一数据结构进行了大量算法研究,例如深度优先搜索和最短路径算法等。

随着机器学习技术的发展,图这一模型逐渐发挥了更大的作用。很常见的一个应用就是无监督学习中的谱聚类算法。该算法相对于Kmeans等算法,不仅考虑空间中的绝对距离,也会考虑节点之间的边连接关系,从而达到更好的非线性聚类效果。如下所示:

而在深度学习领域,也开始涉及很多图相关的问题,例如社交网络、通信网络等。包括图分类、节点聚类、链路预测等应用。而要应用到深度学习中最大的挑战就是如何用有限的嵌入来表达复杂的图信息,这包括节点的相对位置关系、边的连接关系等传统算法中很难处理的部分。

图嵌入的主要挑战和试图解决的问题有以下三个:

  • 属性选择:节点的“良好”向量表示应保留图的结构和单个节点之间的连接。第一个挑战是选择嵌入应该保留的图形属性。考虑到图中所定义的距离度量和属性过多,这种选择可能很困难,性能可能取决于实际的应用场景。

  • 可扩展性:大多数真实网络都很大,包含大量节点和边。嵌入方法应具有可扩展性,能够处理大型图。定义一个可扩展的模型具有挑战性,尤其是当该模型旨在保持网络的全局属性时。

  • 嵌入的维数:实际嵌入时很难找到表示的最佳维数。例如,较高的维数可能会提高重建精度,但具有较高的时间和空间复杂性。较低的维度虽然时间、空间复杂度低,但无疑会损失很多图中原有的信息。

早期的常见算法是建立一个固定维数的空间嵌入,然后将图里的节点逐个填入空间中,然后根据需要拉近相邻节点的距离,拉远不相邻节点的距离等。

受篇幅所限,本文主要介绍的是深度学习中常用的图嵌入方法。

基于DeepWalk的算法

基于DeepWalk的算法其实是对节点建立嵌入。只是在每个节点的嵌入中都包含了相邻节点的信息。这其实是基于Word2Vec的设计理念,保证在空间中相似的单词距离更近。

为了构建类似于Word2Vec的句子,DeepWalk采用随机游走的方式寻找相似节点。

首先选择某一特定点为起始点,做随机游走得到点的序列,然后将这个得到的序列视为句子,用word2vec来学习,得到该点的表示向量。

DeepWalk通过随机游走获得图中节点的局部上下文信息,由此学习到的表示向量反映的是该点在图中的局部结构,两个点在图中共有的邻近点(或者高阶邻近点)越多,则对应的两个向量之间的距离就越短。

与DeepWalk相似,node2vec通过最大化随机游走得到的序列中的节点出现的概率来保持节点之间的高阶邻近性。与DeepWalk的最大区别在于,node2vec采用有偏随机游走,在广度优先(bfs)和深度优先(dfs)图搜索之间进行权衡,从而产生比DeepWalk更高质量和更多信息量的嵌入。

结构深度网络嵌入

结构深度网络嵌入(SDNE)不执行随机游走。而是保证两个阶层的节点相似性:

  1. 有边相连的节点之间的相似性

  2. 节点邻近结构的相似性,保证有类似邻居的节点之间的相似性。

对于相似性2,常用的方法是将邻接向量输入到autoencoder中进行重建,得到邻接向量的嵌入向量后,再计算成对的有边相连节点的嵌入之间的损失。

完整图嵌入

完整图嵌入主要是被称为Graph2Vec的算法

Graph2vec方法包括三个步骤: 1. 从图中采样并重新标记所有子图。子图是在所选节点周围出现的一组节点。子图中的节点距离不超过所选边数。 2. 训练跳跃图模型。图类似于文档。由于文档是词的集合,所以图就是子图的集合。在此阶段,对跳跃图模型进行训练。它被训练来最大限度地预测存在于输入图中的子图的概率。输入图是作为一个热向量提供的。 3. 通过在输入处提供一个图ID作为一个独热向量来计算嵌入。嵌入是隐藏层的结果。 由于任务是预测子图,所以具有相似子图和相似结构的图具有相似的嵌入。

spectral clustering
deep walk