deepwalk详解

目录

    • 1. 算法思想
    • 2. 随机游走
    • 3. 如何把随机游走中得到的信息用来点表示学习?
    • 4.适用场景
    • 5. 不足和改进

1. 算法思想

源于word2vec,word2vec通过语料库中的句子序列来描述词与词的共现关系,进而学习到词语的向量表示。deepwalk则使用图中节点与节点的共现关系来学习节点的向量表示。这种借鉴的前提是点在图中的分布和词在句子中的分布都是幂律分布。

2. 随机游走

deepwalk详解_第1张图片
第2步是构建Hierarchical Softmax,第3步对每个节点做γ次随机游走,第4步打乱网络中的节点,可以加快随机梯度下降的速。第5步以每个节点为根节点生成长度为t的随机游走,第7步根据生成的随机游走使用skip-gram模型利用梯度的方法对参数进行更新。
这里得到的随机游走就相当于自然语言中的语句,包含了点在图中的分布信息。

3. 如何把随机游走中得到的信息用来点表示学习?

1> skipgram:
deepwalk详解_第2张图片
对于每个random walk ,对每个点选取附近的点(i-w,i+w)组成(vi ,uk)作为skipgram的输入,根据(vi ,uk)出现的频率调整点表示嵌入。
目标函数:给定vi的表示嵌入,最大化walk中出现的其他邻居的概率
目标函数

概率部分的意思是,在一个随机游走中,当给定一个顶点 vi时,出现它的w窗口范围内顶点的概率。
同时考虑左边窗口和右边窗口,不考虑顺序。

2> softmax

为什么使用softmax?
-为了方便计算在这里插入图片描述
基本思想:将词典中的每个词按照词频大小构建出一棵Huffman树,保证词频较大的词处于相对比较浅的层,词频较低的词相应的处于Huffman树较深层的叶子节点,每一个词都处于这棵Huffman树上的某个叶子节点。
deepwalk详解_第3张图片

计算方法:
在二叉树的每一个节点上都存放一个向量,需要通过学习得到,最后的叶子节点上没有向量。显而易见,整棵树共有|V|个向量。规定在第k层的节点做分类时,节点左子树为正类别,节点右子树是负类别,该节点的向量用 v(k)表示。
那么正负类的分数如公式(2)(3)所示。在预测的时候,需要按照蓝色箭头的方向做分类,第0层分类结果是负类,第1层分类结果是正类,第2层分类结果是正类,最后到达叶子节点 v(5) 。最后把所有节点的分类分数累乘起来
deepwalk详解_第4张图片

4.适用场景

i. 图表示学习,捕捉节点局部的结构信息
ii. 适合无权图,同构网络
iii. 在图稀疏的时候也能取得较好的表现
iv. 对大型的图也能取得较好的表现,能够并行计算

5. 不足和改进

无法对图中边的信息(权重 和 不同的关系)进行处理
随机游走是对节点选取的概率不够完善,没有区分广度优先和深度优先搜索,node2vec模型对此进行了改进

你可能感兴趣的:(深度学习,图嵌入,社交网络)