LINE(large-scale information network embedding)
研究问题:
大规模信息网络嵌入低维向量空间。
模型优点:
1、可适应任意类型的网络:有向、无向、有权、无权。
2、采用一阶相似度和二阶相似度结合
3、边采样优化方法解决了SGD的局限性(边的权值变换很大 时,学习率难以选择,并且权值和乘以梯度导致梯度爆炸)
模型描述:
1、一阶相似度的LINE模型(只用于无向图)
为了模拟一阶相似度,对于每个无向边(i,j),我们定义顶点vi和vj之间的联合概率如下:
(sigmoid function,向量越接近,点积越大,联合概率越大。其中,ui表示节点vi对应的向量。)
经验概率可以定义为:(两点之间边的权值越大,经验概率越大)
为了保持一阶相似性,一个简单的办法是最小化下面的目标函数:
我们选择最小化两个概率分布的KL散度,用KL散度代替d(·,·)并省略一些常数,得到:
KL散度公式:
只考虑一阶相似度的情况下,改变同一条边的方向对于最终结果没有什么影响。因此一阶相似度只能用于无向图,不能用于有向图。
2、二阶相似度的LINE模型
二阶相似度可以用于有向图和无向图。下面是针对有向图的算法(在无向图中,可以将每条边看成是两条方向相反且有相同权重的有向边)。
二阶相似度假设共享邻居的顶点彼此相似。每个顶点扮演两个角色:顶点本身和其他顶点的邻居。因此,为每个节点引入两个向量表示ui和ui:ui是vi被视为顶点时的表示,ui
是当vi被视为特定邻居时的表示。
定义vj是vi的邻居的概率为:(vj和vi越相似,对应向量点积越大,vj是vi的邻居的概率越大,用softmax函数表示)
经验概率(网络中,各个点是vi的邻居的概率)定义为:
其中wij是边(i,j)的权重,di是顶点i的出度,di=Σk∈N(i) wik。
二阶相似度假设共享邻居的顶点彼此相似,为了保持二阶相似度,同一个顶点在向量空间中的的条件分布要接近在网络中的条件分布。因为网络中顶点的重要性不同,引入λi表示网络中顶点的重要程度,可以通过PageRank等算法来度量或估计。
因此,我们最小化以下目标函数:
为简单起见,将λi设置为顶点i的度数,即λi= di。这里也采用KL散度作为距离函数, 用KL散度代替d(·,·)。再省略一些常数,得到:
3、结合一阶相似度和二阶相似度
采用分别训练一阶相似度模型和二阶相似度模型,然后将学习的两个向量表示连接成一个更长的向量。更适合的方法是共同训练一阶相似度和二阶相似度的目标函数,比较复杂,文章中没有实现。
模型优化:
1、负采样
优化目标O2计算量太大,在计算条件概率p2(·| vi)时需要对整个顶点集进行求和。 为了解决这个问题,采用负采样方法,根据每个边(i,j)的噪声分布对多个负边进行采样。 更具体地说,它为每个边(i,j)指定了以下目标函数:
其中σ(x) = 1/(1 + exp(−x))是sigmoid函数。 第一项建模观察到的边;第二项建模从噪声分布中得出的负边缘,K是负边缘的数量,设定Pn(v)∝dv3 / 4,dv是顶点v的出度。
对于目标函数O1,存在一个平凡解:uik =∞,对于i = 1,…,| V | 和k = 1,…,d。 为了避免平凡解,我们仍然可以利用负采样方法,通过将上式(7)中的uj`改为uj。
2、边采样
采用异步随机梯度下降算法(ASGD)来进行优化 。如果边(i,j)被采样,则对应的梯度将被计算为:
因为梯度计算过程中,要乘以边的权重,所以当权重的变化范围很大时,就会导致梯度变化大,很难找到合适的学习率。
为了解决这一问题,可以将有权边缘展开为多个无权边,例如,具有权重w的边展开为w个无权边。但是展开后,会显著增加内存需求。解决方案为:现在网络中,对边进行采样,采样的概率与边的权重成正比;再将采样后的边展开成无权边。
这样就可以找到合适的学习率,并且不休要修改目标函数。那么,如何根据权重在网络中对边进行采样呢?LINE采用了别名抽样法https://blog.csdn.net/lily960427/article/details/78582982
参考博客https://www.jianshu.com/p/8bb4cd0df840
代码分析: https://www.jianshu.com/p/82b9c88a23adutm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation
DeepWalk(online learning of social represention)
研究问题:
学习网络中顶点的潜在表示(适用于无权网络,大规模,稀疏图)
模型优点:
1、在信息较少的稀疏网络表现优越
2、在线学习:DeepWalk是可扩展的
3、容易实现并行性。几个随机游走者(不同的线程,进程或机器)可以同时探索同一网络的不同部分。
4、适应性。当图变化后,不需要全局重新计算,可以迭代地更新学习模型
模型描述:
1、主要思想 :
DeepWalk将语言建模和无监督特征学习(或深度学习),从单词序列推广到图中。
将随机游走得到的节点序列当做句子,从截断的随机游走序列中得到网络的局部信息,再通过局部信息来学习节点的潜在表示。
2、幂律分布:
作者发现自然语言和出现在短随机游走中的节点的频率都服从幂律分布,所以用于建模自然语言分布的技术,可以用于对随机游走得到的序列进行建模。
3、随机游走:
将从顶点vi开始的随机游走序列表示为Wvi。Wvij表示序列Wvi中的第j个点。其中,Wvi1为vi,Wvik+1是从Wvik的邻居中随机选择的节点。
优点:随机游走得到的序列中包含了网络的局部结构信息。
当图中节点的度遵循幂律分布(度数大的节点比较少,度数小的节点比较多)时,短随机游走中顶点出现的频率也将遵循幂律分布。
很容易实现并行,在不需要全局重新计算的情况下允许网络结构中有小的变动。
4、语言建模:
为了得到节点的潜在表示,引入映射函数Φ:v ∈ V → R|V|×d,|V|×d的矩阵Φ表示图中每个顶点的在d维空间中的潜在表示。
对于顶点表示建模,就产生了下面的优化问题:
具有相同的上下文的节点的表示相似(使用LINE中的定义,即算法使用的是二阶相似度)。
对语言建模进行下面的relaxation:
1)不是通过上下文预测单词,而是使用单词来预测上下文。
2)上下文由给定的单词左右两边的单词组成(原本只考虑左边的)。
3)不考虑句子中上下文出现的顺序,最大化出现在上下文中的所有单词的概率。
算法实现:
该算法由两个主要组件组成:一个随机游走生成器和一个更新程序。
算法1中的3-9行显示了算法的核心。将每次迭代看作是对数据进行“传递”,迭代次数由输入数据 γ 指定。每次循环中,先生成一个随机排序来遍历顶点;再得到从每个顶点开始的长度为 t 的随机游走Wvi;最后,根据Wvi,利用SkipGram算法实现表示更新。
1、SkipGram:
SkipGram是一个语言模型,用于最大化句子中出现在窗口w内的单词之间的共现概率。它使用独立性假设,将条件概率近似为:
skipgram算法:
对随机游走序列中的每个顶点,先把它映射到它的当前表示向量Φ(vj);然后通过随机梯度下降算法,最大化出现在上下文中的所有单词的概率,以此更新向量表示。
2、Hierarchical Softmax:
给定uk∈V,直接计算第3行的Pr(uk|Φ(vj))是不可行的,我们将使用Hierarchical Softmax来分解条件概率。
我们将网络中的顶点分配为二叉树的叶子节点,将问题转化为最大化层级中特定路径的概率。如果顶点uk的路径由一系列树节点(b0,b1,…,b[log |V|])来标识,其中,b0=vj,b[log |V|]= uk,那么
根据训练样本中单词出现的频率构建一棵Huffman 树(如果我们有先验估计顶点频率的能力),对于每个节点用sigmoid处理节点信息,将变量映射到{0,1}。
3、优化:
模型参数集是θ= {Φ,Ψ},Φ和Ψ的大小是O(d | V |)。使用随机梯度下降(SGD)来优化这些参数(算法2,第4行)。导数使用反向传播算法估算。SGD的学习率α在训练开始时初始设定为2.5%,然后随着到目前为止所看到的顶点数目线性减少。
问题:
1、为什么DeepWalk在数据缺失以及label较少的时候就能取得比较好的效果?
When labeled data is scarce, low dimensional models generalize better, and speed up
convergence and inference. 因为用的是distributed,映射到较低维,这个维度是预先设好的。
参考:https://blog.csdn.net/weixin_39915444/article/details/80666037 https://www.jianshu.com/p/5adcc3d94159
代码分析:https://blog.csdn.net/github_36326955/article/details/82682521
两种方法比较:
LINE:
1、采用了一阶相似度和二阶相似度(BFS)
2、可适用于各种类型的网络
3、优化方法:负采样和边采样
deepwalk:
1、应用自然语言模型
2、采样截断随机游走(DFS)
3、适合稀疏网络结构
4、只用于无权图
5、优化方法:skip-gram 和层序softmax
6、可并行、可扩展(online learning)
核心不同点:
LINE利用的是网络节点之间直接的联系,类似BFS,deepwalk利用的是有直接有间接的联系,类似DFS
来源:CSDN
作者:JavyHo
链接:https://blog.csdn.net/JavyHo/article/details/104821326