美文网首页
两种GraphEmbedding详解(DeepWalk及node

两种GraphEmbedding详解(DeepWalk及node

作者: Jarkata | 来源:发表于2021-04-28 19:31 被阅读0次

本文为转载,原文链接:https://wmathor.com/index.php/archives/1531/

Introduction

既然你点进了这篇博客,我就默认你了解图的最基本概念,包括但不限于有向图、无向图的定义,这里我不再多做赘述,下面我只阐述一些比较重要的部分

图神经网络是一种直接对图结构进行操作的神经网络。GNN 的一个典型应用是节点分类。本质上,图中的每一个节点都与一个标签相关联。如下图所示,a节点的向量表示为[0.3, 0.02, 7, 4, ...],将该向量送入下游继续做分类即可得到a节点的类别。

a 节点的向量表示究竟是如何得到的,等会儿我会详细阐述,不过在这我们可以简单的思考一下,a 节点的向量表示一定应该与其相邻节点和**相邻边有关系,假设每个节点v的one-hot向量表示为X_v,则
h_v=f(X_v, X_{co[v]}, h_{ne[v]},X_{ne[v]})

其中X_{co[v]}表示与v相连边的one-hot表示,h_{ne[v]}表示与v相邻节点的embedding,X_{ne[v]}表示与v相邻节点的one-hot表示。最终再将h_v向量和真实标签计算loss,不过也有的地方是将h_v向量和X_v经过一轮融合之后再计算loss,例如
\begin{aligned} O_v&=g(h_v,X_v)\\ loss &= \sum_{i=1}^p (t_i-o_i) \end{aligned}

上述公式以及符号可能不好理解,这里其实可以类比 Word2Vec。在 Word2Vec 中,输入的是每个词对应的 one-hot,即 X_v。输出的是这个词对应的 embedding,即 h_v

作为一个典型的非欧式数据,对于图数据的分析主要集中在节点分类,链接预测和聚类等。对于图数据而言,图嵌入(Graph / Network Embedding)和图神经网络(Graph Neural Networks, GNN)是两个类似的研究领域。图嵌入旨在将图的节点表示成一个低维向量空间,同时保留网络的拓扑结构和节点信息,以便在后续的图分析任务中可以直接使用现有的机器学习算法。一些基于深度学习的图嵌入同时也属于图神经网络,例如一些基于图自编码器和利用无监督学习的图卷积神经网络等。下图描述了图嵌入和图神经网络之间的差异:

DeepWalk:第一个无监督学习节点嵌入的算法

DeepWalk 用一句话概述就是:随机生成图节点序列,然后对该序列进行 Word2Vec

具体来说,给定一个图,我们随机选择一个节点作为起始,然后随机 "步行" 到邻居节点,直到节点序列的长度达到给定的最大值。例如下图,分别选择 d,e,f 作为起点进行游走,得到三条节点序列


在这种情况下,我们可以将节点和节点序列分别看作是“单词”和“句子”,然后利用skip-gram或者cbow算法训练得到每个节点的embedding。

DeepWalk算法主要包含两个部分:一个随机游走序列生成器和一个更新过程。
随机游走序列生成器首先在图G中随机抽样一个随机游走W_{v_i}的根节点v_i,接着从根节点的邻居中均匀地随机抽样一个节点直到达到设定的最大长度t。对于一个生成的以v_i为中心左右窗口为w的随机游走序列v_{i-w},...,v_{i-1},v_i,v_{i+1},...,v_{i+m},DeepWalk利用SkipGram算法通过最大化以v_i为中心,左右w为窗口的同其他节点共现概率来优化模型:
\text{Pr} \left(\left\{v_{i-w}, \dotsc, v_{i+w}\right\} \setminus v_i \mid \Phi \left(v_i\right)\right) = \prod_{j=i-w, j \neq i}^{i+w} \text{Pr} \left(v_j \mid \Phi \left(v_i\right)\right)

DeepWalk和Word2Vec的类比如下表所示:

node2vec: bias random walk

一般的随机游走公式
{P}\left(c_{i}=x \mid c_{i-1}=v\right)=\left\{\begin{array}{cc} \frac{1}{|N(v)|}, & \text { if }(v, x) \in E \\ 0, & \text { otherwise } \end{array}\right.
其中,|N(v)|表示v节点的邻居节点数量c_{i-1}表示当前节点,c_i表示下一个选择的节点

一般的随机游走存在以下几个问题:

  1. 如果是带权图,没考虑边权值的影响
  2. 太过于随机,不能由模型自行学习以何种方式游走更好

实际上图的游走分为两大类:DFS和BFS

为了引入边的权重,以及依概率选择DFS或BFS,我们首先要将一般的随机游走公式进行修改:
{P}\left(c_{i}=x \mid c_{i-1}=v\right)=\left\{\begin{array}{cc} \frac{\pi_{vx}}{Z}, & \text { if }(v, x) \in E \\ 0, & \text { otherwise } \end{array}\right.
其中,\frac{\pi_{vx}}{Z}在值上与\frac{1}{|N_{(v)}|}是相等的,Z可以理解为归一化的缩放因子

假设当前随机游走经过边(t,v)到达顶点v,节点vx之间的边权为w_{vx},则可以将\pi_{vx}改写为\alpha(t,x) \cdot w_{vx}
\alpha_{{pq}}(t, x)=\left\{\begin{array}{l} \frac{1}{p}, &\quad{ \text { if } d_{t x}=0} \\ 1, &\quad{\text { if } d_{t x}=1} \\ \frac{1}{q}, &\quad{ \text { if } d_{t x}=2} \end{array}\right.

其中,d_{tx}表示当前节点v的一节邻居节点到节点t的最短距离

  • p: 控制随机游走以多大的概率“回头”
  • q: 控制随机游走偏向DFS还是BFS
    • q较大时(q>1),倾向于BFS
    • q较小时(q<1),倾向于DFS
  • p=1=1时,\pi_{vx}=w_{vx}

到此为止,GNN 中节点 Embedding 算法我就不再多叙述,其实还有很多更好的算法,例如 LINE,Struct2vec 等,不过我个人感觉这些 embedding 算法并不重要,或者说它们并不是 GNN 的核心部分,只要当作工具来用就行了,类比 Transformer 中 Word Embedding 的地位

References

相关文章

  • 两种GraphEmbedding详解(DeepWalk及node

    本文为转载,原文链接:https://wmathor.com/index.php/archives/1531/[h...

  • 【Graph Embedding】Node2Vec

    Node2Vec原理 node2vec 跟deepwalk类似,同样是通过随机游走产生序列,再将序列通过skip ...

  • GraphSAge

    一、原理 相对于DeepWalk、Node2vec等transductive网络表示方法[GCN方法],Graph...

  • Node 定时器详解

    Node 定时器详解

  • node2vec

    1.背景 DeepWalk中根据边的权重进行随机游走,而node2vec加了一个权重调整参数,最终生成的随机序列是...

  • [持续]关于 node.js 的优质博客

    [转]Node.js的线程和进程详解:https://feclub.cn/post/content/node_pr...

  • win10下DeepWalk安装配置运行中遇到的问题

    最近在做NE方面的毕业论文,慢慢摸索,先看了DeepWalk的论文《DeepWalk:Online Learnin...

  • DeepWalk

    1.背景 DeepWalk是一种学习网络中节点的隐式表征的新颖方法。这些隐式表征把社会关系编码到统计模型易于使用的...

  • DeepWalk

    Random Walk and Word2Vec

  • Deepwalk

    random wlak:就是在网络上不断重复地随机选择游走路径,最终形成一条贯穿网络的路径。从某个特定的端点开始,...

网友评论

      本文标题:两种GraphEmbedding详解(DeepWalk及node

      本文链接:https://www.haomeiwen.com/subject/kcovrltx.html