这里直接切入网络表示学习(Graph Embedding/Network Representation Learning),本文将总结多个经典的基于游走的网络表示学习算法。因为基于游走的网络表示学习算法和word2vec如出一辙,同宗同源,我觉得还是紧跟着word2vec文章之后讲比较好。如果你对word2vec还有些许疑问,可以先看一看我上一篇文章:
炫云:Word2Veczhuanlan.zhihu.com![eb84061cdbf033c02964283ead3c8f97.png](https://i-blog.csdnimg.cn/blog_migrate/e867224186d418beab36e9aaeaf2a255.jpeg)
1. 图嵌入(Graph Embedding)
图嵌入,也叫网络表示学习,目的是为了学习到网络节点或者边的低维稠密向量表示,这样就能很方便地用于后续任务中。图的最基本形式是邻接矩阵,比如下面左侧4个节点组成的图,经过编号后,我们可以获得右侧的邻接矩阵。
![f671cf2968d908f4f1aee7d845bd2cdc.png](https://i-blog.csdnimg.cn/blog_migrate/af07320be2b7ac1b88299ff2a8701b06.png)
对于一个大一点的图(比如社交网络)可能有数以亿万计的节点,根本没法读入内存,在写算法题的时候N*N大小的二维数组当N=10000
时,就会超内存。而社交网络动辄亿万,这谁顶得住啊...
对于维度较大的矩阵,数学上有着各种优美的矩阵分解算法。以非负矩阵分解为例(NMF),给定矩阵
![equation?tex=A_%7Bm%5Ctimes+m%7D](https://i-blog.csdnimg.cn/blog_migrate/ec6eccbeb0553fdcb1d26fd34f861e72.png)
![equation?tex=B_%7Bm%5Ctimes+k%7D](https://i-blog.csdnimg.cn/blog_migrate/ccf66e1645b59908319a69aa0809e8ae.png)
![equation?tex=C_%7Bk%5Ctimes+m%7D](https://i-blog.csdnimg.cn/blog_migrate/8596fee4edba7205d3824f0e18f90871.png)
![equation?tex=A%3DBC](https://i-blog.csdnimg.cn/blog_migrate/0a5b0fcaf6195e051d1954af757e3450.png)
2. DeepWalk
时间到了2014年,那是word2vec问世的第二年,Bryan Perozzi[1]创造性地提出了DeepWalk,将词嵌入的方法引入图嵌入,将图嵌入引入了一个新的时代。DeepWalk提出了“随机游走”的思想,这个思想有点类似搜索算法中的DFS,从某一点出发,以深搜的方式获得一个节点序列。这个序列即可以用来描述节点。
![34d8023fa159759c11444c41a2c1a86a.png](https://i-blog.csdnimg.cn/blog_migrate/3bb0f3926f0b2679ec87af1538e45491.jpeg)
依照图中的连边关系,从节点1开始,可能依次经过节点2,6,1,3. 能够经过这些节点的原因是因为相邻的两个节点之间彼此有连边。每个节点每次游走的概率为节点的出度分之一,以节点1为例,将以等概率游走至节点2、3、4、6节点。这个过程非常