持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
前言
Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖...已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
唯有努力💪
知其然 知其所以然!
本文只记录感兴趣的部分
4. LINE: LARGE-SCALE INFORMATION NETWORK EMBEDDING
一个理想的真实世界信息网络嵌入模型必须满足以下几个条件:
- 第一,它必须能够同时保持顶点之间的一阶和二阶邻近性
- 其次,它必须适用于非常大的网络,比如数百万个顶点和数十亿条边;
- 第三,它可以处理具有任意类型边的网络:有向边、无向边和/或加权边
4.1 Model Description
我们描述了LINE模型,分别保持一阶邻近性和二阶邻近性,然后介绍了一种简单的结合两阶邻近性的方法。
4.1.1 LINE with First-order Proximity
一阶接近是指网络中顶点之间的局部两两接近。
为了模拟一阶接近,对于每个无向边(i, j),我们定义顶点和之间的联合概率如下
其中,表示顶点的向量表示
等式(1)定义了空间上的一个分布,其经验概率可以定义为,其中
为了保持一阶接近,一个直接的方法是最小化以下目标函数
为两个分布之间的距离
我们选择最小化两个概率分布的KL散度(KL-divergence)
KL-divergence:zhuanlan.zhihu.com/p/425693597
用替换,并去掉一些常数,我们有
注意,一阶接近只适用于无向图,而不适用于有向图。
通过找到 最小化等式(3)
4.1.2 LINE with Second-order Proximity
二阶邻近既适用于有向图,也适用于无向图
给定一个网络,不失一般性的情况下,我们假设它是有向的
一条无向边可以被认为是两个方向相反、权值相等的有向边
二阶接近假设顶点之间有很多连接,它们彼此相似。在这种情况下,每个顶点也被视为一个特定的“上下文”,在“上下文”上具有类似分布的顶点被认为相似。
个人理解:若顶点的上下文分布类似,那么这些节点很可能也是相似的
因此,每个顶点都扮演两个角色:顶点本身和其他顶点的特定“上下文”。
我们引入两个向量和
- 其中是将视为顶点时的表示
- 是将视为特定“上下文”时的表示
对于每条有向边(i, j),我们首先定义顶点生成“上下文”的概率为:
- 其中是顶点或“上下文”的数量
- 此时角色为“节点本身”,角色为其他节点的上下文
对于每个顶点, 等式(4)实际上定义了一个基于上下文的条件分布
如上所述,二阶接近假设在上下文中具有相似分布的顶点彼此相似
为了保持二阶接近,我们应该使低维表示所指定的上下文的条件分布接近经验分布
因此,我们最小化以下目标函数:
- 为两个分布之间的距离,也是采用KL散度
- 来表示网络中顶点i的声望,,为顶点i的出度
经验分布定义为
- 为边(i, j)的权值,
- 为顶点i的出度,即,其中为的出邻居集合
得到最终目标优化函数:
通过学习和来最小化等式(6)
4.1.3 Combining first-order and second-order proximities
为了同时保持一阶和二阶邻近性嵌入网络,我们在实践中发现了一种简单有效的方法,即
- 分别训练保持一阶邻近性和二阶邻近性的LINE模型
- 然后对每个顶点将两种方法训练的嵌入连接起来
4.2 Model Optimization
优化目标(6)的计算成本很高,在计算条件概率时需要对整个顶点集求和。
为了解决这一问题,我们采用[13]中提出的负采样方法,对每条边(i, j)按照一定的噪声分布对多个负边进行采样。
具体来说,它为每条边(i, j)指定了以下目标函数:
其中
第一项对观察到的边进行建模,第二项对从噪声分布中提取的负边缘进行建模,k是负边缘的数量。
我们设,为顶点的出度
对于目标函数(3),存在一个平凡解:,对于, 。
为了避免平凡解,我们仍然可以利用负采样方法(7),只需将改为
我们采用异步随机梯度算法(ASGD)[17]对等式(7)进行优化
在每一步中,ASGD算法都会对一小批边缘进行采样,然后更新模型参数。
如果采样了一条边(i, j),则梯度w.r.t计算顶点i的嵌入向量为:
注意,梯度将乘上边缘的权值
当边的权值方差很大时,这就会出现问题
例如,在一个单词共现网络中,有些单词共现多次(例如,数万次),而有些单词只共现几次。在这样的网络中,梯度的尺度是发散的,很难找到一个好的学习率。
如果我们根据权重小的边选择一个大的学习率,那么权重大的边上的梯度就会爆炸,而如果我们根据权重大的边选择学习率,梯度就会太小。
4.2.1 Optimization via Edge Sampling
解决上述问题的直觉是,如果所有边的权值相等(例如,具有二值边的网络),那么选择合适的学习率就没有问题
因此,一种简单的处理方法是将一条加权边展开为多个二值边
例如,一条权值为的边展开为条二值边
这将解决问题,但将显著增加内存需求,特别是当边缘的权值非常大的时候。
为了解决这个问题,我们可以从原始边采样,并将采样的边视为二值边,采样概率与原始边的权值成比例。
通过这种边缘采样处理,总体目标函数保持不变。
这个问题归结为如何根据它们的权重对边缘进行采样
设表示边权值的序列。我们可以简单地计算权值的总和,然后在范围内采样一个随机值,看看该随机值属于哪个区间
这种方法需要的时间来绘制一个样本,当边缘的数量很大时,这种方法的开销很大。
我们使用别名表方法[9]根据边缘的权值来绘制样本,当从相同的离散分布反复绘制样本时,只需要O(1)时间。
从别名表中采样一条边需要常数时间,负采样优化需要时间,其中是负采样的数量。
因此,总的来说,每一步耗时。
在实践中,我们发现用于优化的步数通常与边的数量成正比。因此,LINE的整体时间复杂度为,与边数线性,与顶点数无关。
边采样处理在不影响效率的前提下提高了随机梯度下降算法的有效性。
4.3 Discussion
Low degree vertices
一个实际的问题是如何精确地嵌入度非常小的顶点。由于这样一个节点的邻居数量非常少,所以很难准确地推断出它的表示,尤其是使用严重依赖于“上下文”数量的二阶邻近性方法。
一个直观的解决方案是通过添加更高阶的邻居来扩展这些顶点的邻居,比如邻居的邻居。
在本文中,我们只考虑在每个顶点上添加二阶邻域,即邻域的邻域。
顶点与其二阶邻居之间的权值的度量为
在实践中,我们只能添加一个顶点的子集,该子集与顶点的最大
New vertices
另一个实际问题是如何找到新到达的顶点的表示。
对于一个新的顶点i,如果已知它与现有顶点的关系,我们就可以得到现有顶点上的经验分布和。
根据目标函数等式(3)或(6)得到新顶点的嵌入
一种直接的方法是最小化以下任一目标函数
通过更新新顶点的嵌入,保持现有顶点的嵌入。
如果没有观察到新顶点和现有顶点之间的连接,我们必须求助于其他信息,比如顶点的文本信息,我们把它留给未来的工作
结语
文章仅作为个人学习笔记记录,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正