持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
前言
Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖...已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
唯有努力💪
知其然 知其所以然!
本文只记录感兴趣的部分
3. FEATURE LEARNING FRAMEWORK 特征学习框架
我们将网络中的特征学习定义为一个极大似然优化问题
适用于任何有向(或无向)网络, 加权(或无权)网络
将图的一个顶点映射为一个维向量,所有顶点对应的维向量构成一个大小为的矩阵 ,也就是
:顶点u的邻域
其中,,注意这里的邻域是通过邻域采样策略生成的 通过采样策略,采集到的顶点u的邻域可能会不仅仅只局限其直接的邻居节点
运用Skip-gram架构的思路
对一个单词其最大概率的上下文
得到优化目标函数
是顶点u的一个d维向量表示 表示:顶点u的邻域对f(u)的概率 上面函数的意思大概就是:使得对所有顶点来说,其邻域对于其d维向量的概率之和最大 也就是说,对于每一个顶点,其邻域对于其d维向量的概率是存在的,我们的目标就是找出一个向量空间,使得每个顶点这样的概率之和最大
为了使优化问题易于处理,我们做了两个标准假设:
1)条件独立
假设观察一个邻域节点的可能性与观察任何其他邻域节点的可能性是独立的
简单的理解就是:顶点u的邻域对的概率可以想象为邻域中每一个顶点对的概率的连乘
2)特征空间的对称性
源节点和邻域节点在特征空间中相互对称
因此我们将每个源邻节点对的条件似然建模为一个softmax单元,由其特征的点积进行参数化:
这里的意思大概就是:定义,因为这个概率是很模糊的,没有明确怎么求,作者这里就是通过向量空间中的不同顶点对应的向量之间的运算(就是上面式子)来明确表示
通过以上两个假设的简化,等式1就可以写为
其中
对于大型网络,的计算成本很高(),然后通过
负采样来近似等式2
使用随机梯度上升求等式2最优值
这里等式2是求max 一般求min时,是用SGD,也就是随机梯度下降 随机梯度下降/上升区别可以参考:blog.csdn.net/weixin_4124…
3.1 Classic search strategies 经典搜索策略
我们将源节点的邻域采样问题视为一种局部搜索的形式
为了能够公平地比较不同的采样策略
- 将邻域集的大小限制为个节点
- 对单个节点进行多个集合的采样(对每个节点进行多次采样)
一般情况下,产生k个节点的邻域集NS有两种极端采样策略:
- Breadth-first Sampling (BFS)
- Depth-first Sampling (DFS)
网络中节点的预测任务需要利用到节点的同质性和结构等价性两种相似性
- 同质性
- 结构等价
参考图1:
- 在同质性假设下,高度互连的节点,属于类似的网络集群或社区,应紧密嵌入在一起(如图1中的节点和属于同一个网络社区)。
- 而在结构等价假设下,网络中具有相似结构角色的[10]节点应该紧密嵌入在一起(如图1中的节点和作为其对应社区的枢纽)。
重要的是,与同质性不同,结构等价并不强调连通性:网络中的节点可以相隔很远,但仍然具有相同的结构作用
在现实世界网络中,这些等价概念并不是单独存在的
- 网络通常表现出这两种相似性,可能其中一些节点表现出同质性,而另一些则反映出结构等价
BFS 《==》结构等价:BFS采样的邻域导致了与结构等价性密切对应的嵌入
- 为了确定结构上的等价性,准确地描述局部邻域通常就足够了
- 此外,在BFS中,采样邻域中的节点往往会重复多次。这也很重要,因为它减少了表征1跳节点相对于源节点的分布的方差
- 然而,对于任何给定的(采样的节点数量),使用BFS,只有图的一小部分被探索到。
DFS 《==》同质性:DFS采样的节点更准确地反映了邻域的宏观情况
- 可以探索到网络的更大部分,因为它可以远离源节点u(样本大小k是固定的)
然而,DFS的问题在于
- 不仅要推断网络中存在哪些节点到节点的依赖关系
- 而且还要确定这些依赖关系的确切性质。这是很难的,因为我们有一个样本大小的限制和一个大的邻域来探索,导致高方差。
- 其次,移动到更大的深度会导致复杂的依赖关系,因为采样的节点可能离源很远,可能不太具有代表性
3.2 node2vec
基于上述观察结果,我们设计了一种灵活的邻域采样策略,使我们能够在BFS和DFS之间平滑地插值。我们通过开发一个灵活的有偏随机漫步程序来实现这一点,该程序可以以BFS和DFS的方式探索社区
3.2.1 Random Walks
形式上,给定源节点,我们模拟固定长度的随机游走。
令表示遍历中的第个节点,从开始。
节点由以下分布生成:
式中
- 为节点与之间的非标准化跃迁概率
- 为标准化常数。
上式简单理解为:
- 节点v的下一个节点是节点x的概率为:如果节点v,x之间有边,则为,否则为0
3.2.2 Search bias α
最简单的有偏随机游走:
- 抽样下一个节点是基于静态边权值,即 = 。(对于非加权图, = 1)
然而,这并不允许我们考虑网络结构,并指导我们的搜索过程来探索不同类型的网络邻居。
这么简单的随机游走不行的
BFS和DFS是分别适用于结构等价和同质性的极端抽样范例
我们的随机游走应该适应这样一个事实
- 这些等价的概念不是竞争或排他性的,
- 现实世界的网络通常表现出两者的混合。
个人理解:
- BFS是适用于结构等价的采样策略
- DFS是适用于同质性的采样策略
- 两个方法都是极端的采样策略,只侧重一个方面的等价
- 真实的网络是存在两者等价关系的,我们需要通过参数控制,使得采样策略位于BFS和DFS之间
我们定义了一个二阶随机游走,通过两个参数和来引导游走
以下图为例
假设已经从节点遍历到节点(从游走到),现在位于节点
现在需要决定从v开始,下一步游走的节点是哪一个节点(也就是需要判断下一次游走)
因此需要计算从节点开始的边上的跃迁概率
跃迁概率:从节点游走到节点的概率
我们设非标准化跃迁概率为
其中
- 表示顶点与之间的权重(无权图为1)
- 表示节点和之间的最短路径距离。
- 注意,必须是{0,1,2}中的一个
- 是节点之前已经遍历的前一个节点
- 也就是我们需要判断上一次已经遍历过的一个节点与目前节点的邻域节点的距离distance
直观地说
- 参数和控制游走搜索和离开起始节点邻域的速度
- 特别地,参数允许我们的搜索过程(大约)在BFS和DFS之间插值,从而反映了不同节点等价概念的亲和力
Return parameter, p
参数p控制在遍历中立即重新访问某个节点的可能性(比如又一次遍历节点t)
- 将其设置为一个高值
(> max(q, 1))可以确保我们不太可能在接下来的两个步骤中采样一个已经访问过的节点(除非遍历中的下一个节点没有其他邻居)。这种策略鼓励适度的探索和避免采样中的2跳冗余 - 另一方面,如果p很低
(< min(q, 1)),它将导致很大概率遍历返回上一个已经遍历的节点(图2中的节点t),这将保持遍历起始节点u的“局部”
In-out parameter, q
参数允许搜索区分“内向”和“外向”节点
- 如果,随机游走偏向于节点t附近的节点
- 这样的游走获得了关于游走中开始节点的底层图的局部视图
- 并在我们的样本由一个小局部内的节点组成的意义上近似BFS行为。
- 当时,随机游走更倾向于访问距离节点t更远的节点
- 这种行为反映了鼓励向外探索的DFS
- 然而,这里的一个本质区别是,我们在随机游走框架内实现了类似dfs的探索。因此,采样节点与给定源节点u的距离并不是严格递增的
- 但反过来,我们受益于可跟踪的预处理和优越的随机漫步抽样效率。
请注意,通过设置为游走中前一个节点的函数,随机游走是二阶马尔可夫。(没懂)
马尔可夫的介绍:blog.csdn.net/cg_speech/a…
与纯BFS/DFS方法相比,随机游走的一些好处:
- 就空间和时间要求而言,随机漫步在计算上是高效的
- 从空间复杂度来说
- 存储图中每个节点的近邻的空间复杂度为
- 二阶随机游走有助于存储每个节点邻居之间的连接关系,空间复杂度为。是图的平均度数,对于现实网络来说通常很小
- 从时间复杂度来说
- 通过在样本生成过程中增加图的连通性,随机游动提供了一种方便的机制,通过在不同源节点上重用样本来提高有效采样率
- 通过模拟长度为的随机游走,由于随机游走的马尔可夫性质,我们可以一次性为个节点生成个样本
- 每个样本的有效复杂度为(没懂)
- 例如在图1中,我们采样了一个长度为的随机游走,然后可以得到个样本(假设)
- 为什么没有呢 ? 因为 ,后面只有和两个节点了,不足3个
注意,采样节点的重用可能会在整个过程中引入一些偏差。然而,我们观察到它大大提高了效率
3.2.3 The node2vec algorithm
node2vec算法的伪代码
在任意随机游走中,由于起始节点的选择,会存在一种隐式偏差。
我们通过学习所有节点的表示,对每个节点模拟个固定长度的随机游走来抵消这种偏差
对一个节点采样次,每次采样的长度为 对网络中所有节点进行采样
随机游走的每一步是根据跃迁概率进行采样
通过对二阶马尔可夫链的跃迁概率的预计算(怎么利用二阶马尔可夫链进行计算?? 没懂),可以在O(1)时间内对模拟随机游走的节点进行抽样
node2vec的三个阶段
- 计算跃迁概率的预处理阶段
- 随机游走模拟阶段
- SGD优化阶段
每个阶段都是可并行和异步执行的,这有助于提高node2vec的整体可伸缩性
3.3 Learning edge features 边特征的学习
Node2vec算法提供了一种半监督方法来学习网络中节点的丰富特征表示
然而,我们通常对涉及成对节点而不是单个节点的预测任务感兴趣。
例如,在链路预测中,我们预测网络中的两个节点之间是否存在链路
由于我们的随机游走自然地基于底层网络中节点之间的连通性结构,因此我们使用自举(bootstrapping) 方法将其扩展到节点对,而不是单个节点的特征表示
- 给定两个节点和,在相应的特征向量和上定义二元运算符
- 以便生成表示使得,其中是节点对的表示大小
我们希望为任何一对节点定义我们的运算符,即使在这对节点之间不存在边,因为这样做使得表示对于链接预测有用,其中我们的测试集包含真和假边(即边不存在)
我们考虑运算符的几种选择,使得,如下表
理解:
- 在得到每个节点的向量表示后,再通过一个二元运算得到一个新的表示
- 通过这个新的表示来预测边是否存在
- (怎么利用这个新表示来预测呢?? 没懂)
结语
文章仅作为个人学习笔记记录,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正