持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
前言
Hello!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖...已保研。
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
唯有努力💪
知其然 知其所以然!
本文只记录感兴趣的部分
3. STRUC2VEC
对于捕获网络中节点的结构身份的学习表示,一个有效的方法应具备:
- 节点的潜在表征( latent representation)之间的距离应该与节点的结构相似性密切相关。
- 具有相同局域网结构的两个节点应该具有相同的潜在表示
- 而具有不同结构身份的节点 应该相距很远(这里的距离是指节点latent representation之间的距离)
- 潜在表示不应该依赖于任何节点或边缘属性,包括节点标签
- 因此,在结构上相似的节点应该有紧密的潜在表示,独立于节点和边缘的属性。
- 节点的结构身份必须独立于其在网络中的“位置”
struct2vec框架的四个步骤:
-
对于不同的邻域大小,确定图中每个顶点对之间的结构相似性
在度量节点之间的结构相似度时引入了层次,提供了更多的信息来评估层次的每一层的结构相似度
-
构造一个加权多层图
网络中的所有节点都存在于每一层,每一层对应于层次的一个层次,用于度量结构相似性
每层内每个节点对之间的边权值与它们的结构相似度成反比
-
使用多层图为每个节点生成上下文
在多层图上使用有偏随机游走,用来生成节点序列
结构上更相似的节点更大概率会在这些序列中
-
应用一种技术,从节点序列给出的上下文学习潜在表示,例如SkipGram
和deepwalk一样,利用这些序列进行学习
struct2vec is quite flexible as it does not mandates any particular structural similarity measure or representational learning framework.
struct2vec是相当灵活的,因为它不要求任何特定的结构相似性测量或表征学习框架
3.1 Measuring structural similarity
struct2vec的第一步是在不使用任何节点或边的情况下确定两个节点之间的结构相似性
此外,这种相似性度量应该是分层的,并应对不断增加的邻域大小,捕捉更多的结构相似性概念。
直观地说,具有相同度的两个节点在结构上是相似的,但是如果它们的相邻节点也具有相同的度,那么它们在结构上更加相似
: 图的直径
图的直径是指任意两个顶点间距离的最大值.(距离是两个点之间的所有路的长度的最小值
: 顶点u经过k跳到达的图中顶点的集合
表示节点u的邻域(与节点u相邻的节点的集合)
: 节点集合的有序度序列(按照节点的度进行排列)
S是一个节点集合,含有多个集合,s(S)就是对S中的结点再按照度大小进行排序
通过比较和,我们可以建立一个层次来衡量结构相似性。
一共有k层,第一层比较和,第二层比较和....
: 顶点u和顶点v之间的结构距离(第k层中)
- :有序度序列,就是
- : 表示有序度序列和之间的距离, 且
- 递增,且只有当节点u和v之间都存在k跳时 才有意义
- 如果节点u和v的 k跳邻域同构,则可以将u映射为v,令
确定比较两个度序列的函数 ==> 采用动态时间规整(Dynamic Time Warping, DTW)来测量两个有序度序列之间的距离
假设有两个有序度序列
DTW将元素a与b进行匹配,使匹配元素之间的距离之和最小
图中两个顶点之间的距离怎么定义呢?(这里的距离是指匹配DTW算法中的距离)
定义顶点a,b之间的距离为
- 当时, ==> 两个相同的有序度序列的距离为零
3.2 Constructing the context graph
我们需要构造一个多层加权图来编码节点之间的结构相似性
- : 原始图
- : 多层加权图(无向),层数为
- 是图的直径
每一层有个节点,条边
第k层中,两个节点之间的边权重定义为
- 上式仅当存在才有意义
- 顶点u,v之间结构距离越大,说明这两个节点越不相似,在该层(多层加权图中)这两个节点之间的边的权重则越小(权重小,说明这两个节点相似度越低)
- : ,当 时,
中每一层之间通过边进行相连接,连接方式为:每个顶点都连接到其对应的上下层的顶点
- 注意这里是有向边
- 第k层的节点u与第k-1、第k+1层中的节点u相连接
第k层的节点u与第k+1层中的节点u连接的边的权重为
其中定义为
,表示第k层中所有边权重的平均值
可以理解为:第k层图中与顶点相连接边的权重大于该层平均边权重的边数量,用于衡量节点与第k层其它节点的相似度
这里用表示文中的
第k层的节点u与第k+1层中的节点u连接的边的权重为
注意
- 如果节点u在当前层有很多相似节点,则需要通过移动至上一层或下一层去获得更好的随机游走序列(上下文)
- 通过向上游走一层,类似节点的数量只会减少
多层图
- 节点数: (一层节点数量为,一共层)
- 最大边数量:
- 单看每一层中有条边,一共层,共有边
- 再看层之间的变,共有层,则层与层之间有个间歇需要通过边连接,有条边,又为有向边,则需要乘以2,得到:
3.3 Generating context for nodes
多层图的作用就是为节点u生成结构上下文
- 依据图中边权重的不同进行有偏随机游走( a biased random walk)
随机游走选择下一个节点前,首先决定是要改变层(上一层或下一层)还是在当前层上游走
假设随机游走停留在当前层的概率为,改变层的概率为
1)当选择停留在当前层时:从节点u游走到节点v的概率为
其中
可以理解为:
- 从u走到v的概率就是节点u与节点v之间的边权重(第k层图中)占节点u所有边权重的占比
通过随机游走,倾向于走到与当前顶点结构更相似的节点上
2)当选择需要改变层时(概率为),需要选择是向上一层移动还是向下一层移动
向上一层移动的概率
理解:
- 对于节点u,往上一层的概率为:向上边的权重 / (向上边的权重 + 向下边的权重)
向下一层移动的概率
往下一层的概率 = 1 - 往上一层的概率
游走方式
- 对于每个节点,在其对应的0层顶点(图中)开始随机游走
- 随机游走具有固定的且相对较短的长度,并且该过程会重复一定的次数,从而产生多个独立的遍历(即节点u的多个上下文)
结语
文章仅作为个人学习笔记记录,记录从0到1的一个过程
希望对您有一点点帮助,如有错误欢迎小伙伴指正