【Graph Embedding/Network Embedding 图嵌入/网络表示学习】主要工作(Deepwalk/LINE/node2vec)总结

前言

首先,花了两年时间从Web开发往AI转行,也阔别CSDN已久。这是回归后第一篇笔记,最开始先放一张非常全面的图,来自清华大学唐杰老师的演讲PPT,很全面地总结了近几十年来人工智能/深度学习算法发展进程中的主要工作和大佬们:从上往下的四个区域分别代表着卷积神经网络CNN、自动编码器AutoEncoder、循环神经网络RNN、强化学习Reinforcement Learning
DL算法发展史
而没有提到的图神经网络(Graph Neural Network, GNN),算是目前比较新且逐渐热门的方向,它以CNN的延伸泛化(GCN)为模型基础、以语言模型(word2vec)衍生出来的图嵌入/表示学习方法为数据基础,解决图结构中的分类、预测、可视化等问题。
这篇主要总结图嵌入/表示学习方法,侧重于思路和算法,不涉及具体代码实现。


基础

概念

图嵌入(Graph Embedding)/图表示学习(Graph Representation Learning),也称作网络嵌入(Network Embedding)/网络表示学习(Network Representation Learning),本质上就是给定一个图(网络),学习其中每一个节点Vertice甚至边Edge在低维空间上的表示,即稠密、实值的低维向量

word2vec

简单介绍一下word2vec:它是2013年被发明出来的工具,已经成为自然语言处理领域的基础,它的主要作用是把词内容表示成向量,即Word Embedding,向量可以表达不同词之间的相似度和类比关系,用来作为后续具体机器学习任务的模型的输入。
word2vec是基于语言模型(language model)的一种“副产物”:语言模型尝试在词语x和上下文y之间建立映射f,在模型训练后,神经网络中被x的one-hot encoder模式激活的部分权重参数W组成一个向量vx,这个vx就是词x的唯一表示,也就是x的词向量。
1-1 CBOW模型
上文说到的语言模型,主要有两类:

  1. Skip-gram模型:用一个词作为输入,预测它的上下文。(1-n)
  2. 词袋(continuous bag of words, CBOW)模型:用一个词的上下文作为输入,来预测这个词本身。(n-1)
    此外,在训练语言模型时,由于实际工作中文本的词语个数会非常多,导致计算困难,所以需要使用*分层softmax(Hierarchical Softmax)负采样(negative sampling)*这两种技巧来加速训练过程。

这一块的内容是DeepWalk的基础,没有深入细节,知道原理即可。总而言之,word2vec利用词与词的共现关系,通过两类语言模型Skip-gram和CBOW实现了文本中词的向量表示


DeepWalk

生活中有许多天然形成的图(Graph)结构,比如社交网络、交通路网、化学元素,也有人为制造的图结构比如知识图谱,这些图不同于NLP中的文本和语音识别中的声波序列,也不同于CV中规则方网状结构的图片。

思路

关于一张图G的定义如下,其中V是顶点vertice的集合,E是边edge的集合。
G = ( V , E ) G=(V, E) G=(V,E)在word2vec中,文本或者句子可以理解为由词组成的序列,所以该方法也可以理解为对于序列中节点特征的嵌入/表示学习。但是,当我们的对象是图时,因为数据结构的根本区别,加上图的稀疏性,word2vec就失效了。
那么如何在图上做嵌入/表示学习呢?作者认为既然已经有成熟的word2vec了,大可将其利用起来而不需要另起炉灶。所以问题就转化为:如何将图转换为序列以供word2vec使用?解决方案是:随机游走(random walk)

算法

随机游走是一种可重复访问已访问节点的深度优先遍历算法
DeepWalk核心算法如下图所示。首先初始化顶点的表示矩阵 Φ \varPhi Φ,用V构建二叉树T用于分层softmax。算法中的核心是3-9行,外层循环指定了游走次数 γ \gamma γ,即每个节点会产生多少个游走序列。内层循环遍历了图中每一个节点 v i v_i vi给定当前访问起始节点,不断从当前节点的邻居中随机选择一个访问,直到访问序列长度达到t,生成当前节点的游走序列 W v i W_{v_i} Wvi,然后用SkipGram(前文中的Skip-gram)更新其向量表示 Φ \varPhi Φ ω \omega ω是语言模型中的窗口大小)。
DeepWalk核心算法
SkipGram算法如下图所示。外层循环是序列中的每个词,内层循环是其窗口大小为 ω \omega ω的词序列,运用似然函数J对当前词的表示向量 Φ \varPhi Φ进行学习率为 α \alpha α梯度下降更新。
SkipGram核心算法

流程概览

以上介绍了DeepWalk的算法,下面从流程角度再过一遍。
如下图所示,由节点 v 4 v_4 v4开始的随机游走序列为 v 4 v_4 v4- v 3 v_3 v3- v 1 v_1 v1- v 5 v_5 v5- v 1 v_1 v1…将其中的中间节点 v 1 v_1 v1映射到初始的表示向量 Φ ( v 1 ) \varPhi(v_1) Φ(v1)分层softmax将序列转为二叉树以降低复杂度加速训练,然后计算 P r ( v 3 ∣ Φ ( v 1 ) ) Pr(v_3|\varPhi(v_1)) Pr(v3Φ(v1)) P r ( v 5 ∣ Φ ( v 1 ) ) Pr(v_5|\varPhi(v_1)) Pr(v5Φ(v1)),即序列路径从根 v 1 v_1 v1开始到 v 3 v_3 v3 v 5 v_5 v5结束的概率分布,从而使得节点 v 1 v_1 v1的表示向量 Φ ( v 1 ) \varPhi(v_1) Φ(v1)向着最大化其上下文为 v 3 v_3 v3 v 5 v_5 v5的方向更新。
在这里插入图片描述
其他两点补充说明:

  1. 随机游走可以获得图中节点的局部上下文信息,越近的节点游走到的概率越大,因此在图上相似节点的表示也会相似。
  2. 随机游走是局部的,可以同时在图的不同节点同时游走,并行化以减少采样时间。同时也可以适应图的局部变化,不需要 每一次变化都重新计算整个网络的游走。

总结

DeepWalk是该领域非常经典的工作,可以说开辟了新纪元。它巧妙地通过随机游走将图/网络转换为序列,再使用word2vec进行表示学习。后续若干重要工作都是在DeepWalk的基础上展开的。


LINE

DeepWalk的工作逐渐引起关注,也逐渐暴露出了它的一些不足:

  1. 并没有提供明确的目标来阐明保留哪些图/网络属性。
  2. 仅适用于未加权的图/网络。

思路

为了弥补上述DeepWalk的不足,LINE被提出来,主要是建立了一套新的体系来定义节点间的关系
如下图所示,其中边可以是无向/有向的、加权/未加权的。顶点6和7应该被紧密地放置在低维向量空间中,因为它们通过一个强连接连接在一起。顶点5和6也应该被紧密放置,因为它们有相似的邻居。
LINE思路实例
所以LINE

  • 将节点6和7的关系定义为一阶相似度(first-order proximity)
    u , v u, v u,v之间存在直连边,则边权 ω u v \omega_{uv} ωuv

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值