LINE 是一种将大规模网络结点表征成低维向量的算法,可很方便用于网络可视化,结点分类,链路预测,推荐。
source codegit
LINE相比于其余算法来讲有以下几点优点:github
用一张图来直观理解
关联图中6,7结点的是一条强边,所以结点6,7的向量表示应该类似(一阶类似度);而结点5,6由于共享了类似的邻居,所以5,6的向量表示也应该类似(二阶类似度)。算法
ps:具体措施:以正比于边权大小的几率来采样边,将被采样的边做为二值边(0 无边,1有边)进行模型更新。
在这种采样过程当中,目标函数保持不变,边的权重再也不影响梯度。网络
首先,了解一下KL散度和一阶类似度的概念app
KL散度Dkl(p,q):指用q分布来近似p分布的信息损失。函数
一阶类似度:对于两个有边连接的顶点,其边的强度越大,则该两顶点关系越密切,即越类似。性能
模型大致过程:学习
(我的理解PS:可是为何使得联合几率分布近似经验分布的信息损失最小就是保留一阶类似度?经验分布,边权除以边权总和必定程度上体现了边权的重要性,而边权的大小又是描绘一阶类似度的重要信息,所以能够将该经验分布理解成保留了一阶类似度的分布,而求各个结点的向量表示,使得两节点的联合分布近似于经验分布的信息损失最小,即该组向量表示就是体现一阶类似度的最优的向量表示)优化
上述一阶类似度只适用于无向图,而不适用于有向图。ui
首先要理解二阶类似度的相关概念
模型大致过程
经过学习每一个结点i的两个向量表示ui,ui’来最小化上述目标函数,最终能够获得每一个结点的向量表示。
那么如何同时结合一阶类似度和二阶类似度呢?这篇论文提出时涉及了两种方案:
ps:我的对这部分理解不够成熟,可能有误。
优化上述目标函数(6)须要很大的计算开销(须要对每一条边进行采样来训练模型)。这里使用负采样来解决问题。
负采样:根据必定的策略选取部分更重要的边来进行训练,每次训练只对神经网络的部分权重进行更新,大大减小了SGD过程当中的计算量。
(ps:正比于边的权重做为几率进行边的采样。通常来讲,边权越大的应该被采样的几率要越高,在语言学领域:出现单词对频率越高的应该被采样的几率越大)
上述这种边采样策略提升了随机梯度降低的效率。
LINE 时间复杂度是边的线性函数,与顶点个数V无关。以下:
1. 低度顶点的嵌入表示
因为低度顶点邻居数目极少,原网络中提供的信息有限,尤为在基于二阶类似度的LINE算法中是很是依赖于顶点的邻居数目的,那么如何肯定低度顶点的向量表示呢?
一种直观的方法:添加更高阶的邻居(如邻居的邻居)来做为该低度结点的直接邻居。 与新添邻居边的权重以下:
dk是结点k的出边的权重总和。(实际上,能够只添加与低度顶点i有边的,且边权最大的顶点j的邻居做为顶点i的二阶邻居)
2. 如何找到网络中新添加顶点的向量表示
若是已知新添加的顶点i与现有顶点的联系(即存在边),则可获得其经验分布
以后经过最小化目标函数(3)或(6)可获得新加顶点i的向量表示
若是未能观察到新添顶点与其余现有顶点的联系,咱们只能求助其余信息,好比顶点的文本信息,留待之后研究。
LINE 适用于大规模网络;既保留了一阶类似度,又保留了二阶类似度;提出边采样算法,只采样部分且只更新神经网络部分权值,而且将采样的边处理成二进制边,解决了加权边梯度降低的局限性(即梯度爆炸----边权直接乘以梯度,且若边权方差过大 可能致使梯度爆炸),加快了效率。
将来的拓展:一阶二阶之外更高阶的类似度以及在异构网络中的应用。