4-图视为矩阵(邻接矩阵)的形式,以线性代数的角度来学习PageRank、随机游走和图嵌入

图机器学习(图视为矩阵的形式,以线性代数的角度来学习PageRank、随机游走和图嵌入)

1. PageRank / the Google Algorithm

1.基本概念
  1. PageRank是谷歌搜索用的算法,用于对网页的重要性进行排序。在搜索引擎应用中,可以对网页重要性进行排序,从而辅助搜索引擎结果的网页排名。

  2. 在现实世界中,将整个互联网视作图

请添加图片描述

将网页视作节点,将网页间的超链接视作边有一些问题会影响我们如何定义节点

  • Dynamic pages created on the fly【1】
  • dark matter:不可达(如有密码等)的database generated pages

【1】on the fly:不需要其他操作自动生成的,无需退出当前流程来做某件事,不经过某种额外步骤而直接进行某项活动,直接生效等意思。比如网页自动根据日期、用户之前看到的位置等信息向用户呈现的内容,就是on the fly

  1. 一个网页之间互相链接的情况的示例(figure 48)

​ 老一点的网页超链接都是navigational纯导航到其他页面的,当代的很多链接则是transactional用于执行发布、评论、点赞、购买等功 能事务的。

请添加图片描述

  1. 将网页看作有向图,以链接指向作为边的方向(这个网页/节点能直接跳转到的网页就作为其下一个节点successor)将网页看作有向图,以链接指向作为边的方向(这个网页/节点能直接跳转到的网页就作为其下一个节点successor):

请添加图片描述

5.其他可表现为有向图形式的信息网络示例:论文引用,百科全书中词条间的互相引用

请添加图片描述

  1. 在图中,我们想要定义节点的重要性【2】,通过网络图链接结构来为网页按重要性分级rank。目前有3种常见用以计算图中节点重要性的方法:
    1. PageRank
    2. Personalized PageRank (PPR)
    3. Random Walk with Restarts

【2】衡量节点重要性:认为一个节点的链接越多,那么这个节点越重要。有向图有in-coming links和out-going links两种情况。可以想象,in-links比较不容易造假,比较靠谱,所以用in-links来衡量一个节点的重要性。可以认为一个网页链接到下一网页,相当于对该网页重要性投了票(vote)。所以我们认为一个节点的in-links越多,那么这个节点越重要。同时,我们认为来自更重要节点的in-links,在比较重要性时的权重更大。这就成了一个递归的问题。所以要计算一个节点的重要性就要先计算其前驱节点的重要性,计算这些前驱节点的重要性又要先计算它们前驱节点的重要性。


2. PageRank: The “Flow” Model
  1. 链接权重与其source page的重要性成正比例
  2. 如果网页 i i i的重要性是 r i r_i ri ,有 d i d_i di个out-links,那么每个变得权重就是 r i / d i r_i/d_i ri/di
  3. 网页 j j j的重要性 r j r_j rj 是其in-links上权重的总和,评价rank的公式 r j = ∑ i → j r i d i ( d i 是节点 i 的度 ) r_j=\sum_{i\rightarrow j}\frac{r_i}{d_i}(d_i是节点i的度) rj=ijdiri(di是节点i的度)

请添加图片描述

  1. 在直觉上我们好像可以用高斯消元法来解这个线性方程组,但这种方法不太适合使用在大型的数据。所以找到更合适的矩阵形式解法。
3. PageRank: Matrix Formulation
  1. 建立随机邻接矩阵M:网页 j j j d j d_j dj条out-links,如果 j → i , M i j = 1 d j j\rightarrow i ,M_{ij}=\frac{1}{d_j} ji,Mij=dj1。M是随机矩阵(列和为1),M的第j列可以看作j在邻居节点上的概率分布

  2. rank vector r r r:每个网页 i i i的重要性得分 r i 其中 ∑ i r i = 1 r_i其中\sum_i {r_i}=1 ri其中iri=1(所以r也可以被看作是网络中所有节点的概率分布)

  3. flow equations 可以被写成:r = M*r

请添加图片描述

4. Connection to Random Walk
  1. 假想一个web surfer的随机游走过程,在 t 时间在网页i上,在 t+1 时间从i的out-links中随机选一条游走,如此重复过程。

请添加图片描述

​ 用p(t)表示冲浪者时刻t在页面i的概率,那p(t)可以看做一个概率分布.

  1. 平稳分布

    根据r = Mr我们可以知道p(t+1)=Mp(t)。可以想象,经过若干次跳转后收敛了,使得p(t+1)=Mp(t)=p(t) ,则p(t)是随机游走的平稳分布

​ 由r=M⋅r,所以r是随机游走的平稳分布。这种做法将PageRank与随机游走概念进行了联合。

5. Eigenvector Formulation
  1. 无向图的邻接矩阵的特征向量是节点特征($\lambda c=Ac $),而PageRank定义在有向图的随机邻接矩阵上。
  2. 因此由上式可以得出:1⋅r=M⋅r【3】

请添加图片描述

  1. 这个相当于是极限分布(理解为概率分布随时间变化趋近于稳定后到达的状态了 )
6. PageRank小结
  1. 通过网络链接结构衡量图中节点的重要性
  2. 用随机邻接矩阵M建立web surfer随机游走模型
  3. PageRank解方程:r = M ⋅ r ,r 可被视作M的principle eigenvector,也可被视作图中随机游走的stationary distribution

2 .PageRank: How to solve?

1. power iteration method幂迭代法

1. 初始化: r 0 = [ 1 / N , . . . , 1 / N ] T ( N 表示有多少个点 ) 2. 迭代: r ( t + 1 ) = M ⋅ r t 3. 当出现 ∣ r ( t + 1 ) − r t ∣ < ε 停止 1.初始化:r^0=[1/N,...,1/N]^T(N表示有多少个点)\\ 2.迭代:r^{(t+1)}=M\cdot r^t\\ 3.当出现|r^{(t+1)}-r^t|<\varepsilon停止 1.初始化:r0=[1/N,...,1/N]T(N表示有多少个点)2.迭代:r(t+1)=Mrt3.当出现r(t+1)rt<ε停止

2. power iteration示例

请添加图片描述


请添加图片描述

每次迭代计算公式实际上是: r j ( t + 1 ) = ∑ i → j r i ( t ) d i r_j^{(t+1)}=\sum_{i\rightarrow j}\frac{r_i{(t)}}{d_i} rj(t+1)=ijdiri(t)

3.PageRank会出现那些问题
1. dead end:没有出边,造成重要性泄露

请添加图片描述

​ 如(figure 54),b没有外链,导致r最后收敛为0,也就是重要性从b这里漏没有了

2. spider trap:所有出边都在一个节点组内,会吸收所有重要性

请添加图片描述

​ 如(figure 55),可以看到重要度在b这里死循环了,没有办法流回a

4.解决PageRank上述问题的方法
1. dead ends的解决方案是,如果当前页面是dead ends节点(矩阵m列为0),那么会以100%概率进行跳转如(figure 56)

请添加图片描述

​ 这里m节点是dead ends节点,它100%跳转,相当于它会随机跳转到所有节点上(包括自己共三个),那么转移矩阵变成(m列值 为:平均节点数量分之一):

请添加图片描述

2. spider trap的解决办法是

每一步以概率 β随机选择一条链接,以概率 1 − β随机跳到一个网页上(β一般在0.8-0.9之间)
这样就会在几步后跳出spider trap

请添加图片描述

3. 从数学角度分析
  1. spider-traps在数学上不是个问题,但是无法得到我们想要的PageRank结果;因此要在有限步内跳出spider traps。
  2. dead-ends在数学上就是问题(其随机邻接矩阵列和不为1,初始假设直接不成立),因此要直接调整随机邻接矩阵,让web surfer无路可走时可以直接teleport。
  3. 那么修正后的PageRank表达式为:

r i = ∑ i → j β r i d i + ( 1 − β ) 1 N ( d i 是节点 i 的出度、 N 是一共有多少个节点 ) r_i=\sum_{i\rightarrow j}\beta\frac{r_i}{d_i}+(1-\beta)\frac{1}{N}(d_i是节点i的出度、N是一共有多少个节点) ri=ijβdiri+(1β)N1(di是节点i的出度、N是一共有多少个节点)

​ 第一项表示根据β的概率按出度进行游走,第二项表示根据( 1 − β )的概率进行随机跳转。这里矩阵M中没有dead end。写成矩阵形式 为:
G = β M + ( 1 − β ) [ 1 N ] N ∗ N G=\beta M+(1-\beta)\Big[\frac{1}{N}\Big]_{N*N} G=βM+(1β)[N1]NN

4.举例
  1. 如(figure 59这个是原始的节点,目前节点出现的问题就是dead end的问题

请添加图片描述

  1. 先解决dead end 节点m

请添加图片描述

  1. 第一步的计算结果为

请添加图片描述

​ G对应的图为

请添加图片描述

三个节点的重要性(特征向量)迭代计算结果为:

请添加图片描述

最后结果可以看到m节点最重要,因为它这里出现了dead end,收集了太多重要性,可以将β增加,减小dead end重要性。

5. PageRank结果示例

请添加图片描述

从(figure 62)中可以看到入度越多,重要性越高;右边的黄点虽然只有1个入度,但是它是最大黄点唯一一个出度,因此它也变得很重要;最下面的绿色点没有入度,但是仍然有重要度,因为有随机跳转的因素。

6.PageRank求解部分总结
  1. 用power iteration方法求解 r = G ⋅ r (G是随机邻接矩阵)

  2. 用random uniform teleporation解决dead-ends和spider-traps问题


3. Random Walk with Restarts & Personalized PageRank

1. 举例:推荐问题(一个由user和item两种节点组成的bipartite graph)

如(figure 63)求解目标:图节点间相似性(针对与item Q交互的user,应该给他推荐什么别的item?)可以直觉地想到,如果item Q和P都与相似user进行过交互,我们就应该推荐Q

请添加图片描述

但是我们又如何去量化这样的相似性

2. 随机游走

每个节点都有重要性,在其边上均匀分布,传播到邻居节点。对 query_nodes 模拟随机游走:

  1. 随机游走到一个邻居,记录走到这个节点的次数(visit count)
  2. 以 alpha 概率从 query_nodes 中某点重启
  3. 结束随机游走后,visit count最高的节点就与 query_nodes 具体最高的相似性(直觉上这就是 query_nodes 最容易走到、最近的点了)

​ 以(figure 64)为例子

请添加图片描述

算法伪代码(从item随机游走到另一个item,记录visit_count;以一定概率返回query_nodes):

alpha = 0.5
item = Query_nodes.sample_by_weight()
for i in range(n_steps):
    user = item.get_random_neighbor()
    item = user.get_random_neighbor()
    item.visit_count += 1
    if random()< alpha:
        item = query_nodes.sample.by_weight()

结果示例(figure 65)

请添加图片描述

在实例中是模拟的是random walk,但是其实也是可以用power iteration的方式来做

3. 对不同PageRank变体的总结
算法特点例子
原始PageRank‎按“重要性"对节点进行排名 以均匀的概率传送到网络中的任何节点‎𝑺 = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
Personalized PageRank‎对节点与传送节点 S 的接近程度进行排名‎𝑺 = [0.1, 0, 0, 0.2, 0, 0, 0.5, 0, 0, 0.2]
Random Walks with Restarts‎传送回起始节点‎: 𝑺 = {𝑸}𝑺 = [0, 0, 0, 0, 𝟏, 0, 0, 0, 0, 0, 0]

三种算法思想都一样的,只不过转移目标节点集合不一样,根据部分目标设置的Personalized PageRank算法的优点如下:

  1. 多链接

  2. 多个路径

  3. 直接和间接链接

  4. 利用了节点的度


4. 矩阵因式分解和节点嵌入

1. 回忆一下如何进行节点嵌入

请添加图片描述

2.节点的嵌入和矩阵分解
1. 首先将节点当成矩阵进行嵌入

用最简单的方式来表达节点的相似度,右边的节点就是相似的 z u t z v = A u , v z_u^tz_v=A_{u,v} zutzv=Au,v也就是说 z u t z v = A ( 这个等式就是矩阵分解 ) z_u^tz_v=A(这个等式就是矩阵分解) zutzv=A(这个等式就是矩阵分解)

请添加图片描述

2. 矩阵分解

但是对于矩阵z而言,它不是方阵,它的大小是d x N,d<<N,没有那么多的维度来表示,因此,上面的等式是不可能的,现在只能通过最小化A和 z u t z v = A z_u^tz_v=A zutzv=A间的距离(可以使用 m i n z ∣ ∣ A − Z T Z ∣ ∣ 2 min_z∣∣A−Z^TZ∣∣_2 minz∣∣AZTZ2,当然也可以使用其他的损失函数来替代L2距离来完成近似目标)

3. 通过矩阵分解和随机游走进行节点嵌入的限制
  1. 无法获取不在训练集中的节点嵌入,每次新增节点都要对全部数据集进行重新计算嵌入

  2. 无法捕获节点的结构上的相似性

请添加图片描述

​ 比如(figure 67)节点1和节点11在结构上很相似,但是节点嵌入会差别很大(随机游走走不过去),但是要是使用匿名随机游走,则 embedding结果相同

  1. 无法使用节点、边和图上的特征信息

5. 本章总结

1.PageRank
  1. 度量图中节点的重要性
  2. 通过邻接矩阵的幂迭代可以有效地计算。
2. Personalized PageRank(PPR)
  1. 衡量节点相对于单元节点或一组节点的重要性
  2. 可以有效的通过随机游走来进行有效的计算
3. Node embedding

​ 基于随机游动的节点嵌入可以表示为矩阵因式分解。

4. 将图看成是矩阵是上面三个算法中的核心思想

)节点1和节点11在结构上很相似,但是节点嵌入会差别很大(随机游走走不过去),但是要是使用匿名随机游走,则 embedding结果相同

  1. 无法使用节点、边和图上的特征信息

5. 本章总结

1.PageRank
  1. 度量图中节点的重要性
  2. 通过邻接矩阵的幂迭代可以有效地计算。
2. Personalized PageRank(PPR)
  1. 衡量节点相对于单元节点或一组节点的重要性
  2. 可以有效的通过随机游走来进行有效的计算
3. Node embedding

​ 基于随机游动的节点嵌入可以表示为矩阵因式分解。

4. 将图看成是矩阵是上面三个算法中的核心思想
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值