CS224W课程(图神经网络)笔记:04-PageRank

232 阅读6分钟

PageRank

​ 在本节我们可以了解到

  • PageRank的原理
  • PageRank如何应用到推荐系统上
  • 从矩阵角度理解Embeddings

1、把图看成一个矩阵

​ 在本节课,我们将矩阵角度来研究图

  • 通过随机游走挖掘节点的重要性(PageRank)
  • 通过矩阵分解来重新理解Node Embeddings

page_000002.png

1 PageRank

PageRank最初是用于挖掘网页重要性的算法,网页之间的连接往往是有向图。

1.1 想法

​ PageRank是一个"flow"模型,通过“投票”的想法来定义一个节点的重要性

  • 每个节点能获得它源节点连接带有的重要性比例
  • 如果重要性为rir_i的节点ii有出度did_i,则节点ii每条连接指向的节点能获得ri/dir_i/d_i的“投票”
  • 节点jj的重要性定义为所有指向它的连接重要性总和

page_000013.png

1.2 随机邻接矩阵

​ 定义随机邻接矩阵M

  • 令节点jjdjd_j出度
  • 如果jij \rightarrow i 则有Mij=1djM_{ij}=\frac{1}{d_j}
    • M是一个列随机矩阵
      • M的列总和为1

​ 向量rr:每个节点的重要性

  • rir_i是节点ii的重要性分数
  • rir_i的和为1

​ "flow" 等式可以写成

r=Mrrj=iridir=Mr\quad r_j=\sum_{i\rightarrow}{\frac{r_i}{d_i}}

page_000015.png

1、一个计算例子

page_000016.png


1.3 PageRank与随机游走的联系

  • 想象一个随机上网的冲浪选手
    • tt时刻,冲浪选手在节点ii
    • t+1t+1时刻,冲浪选手随机从节点ii的一个出度溜走了
    • ii溜到在某些节点jj停止了
    • 无限重复这个过程
  • 做一些假设
    • p(t)p(t)tt时刻所有节点的状态
    • p(t)p(t)是所有节点的一个概率分布

page_000017.png 1、迭代得到稳定分布

  • 如何得到冲浪选手在t+1t+1时刻的状态?
    • 从一个链均匀的随机走
p(t+1)=Mp(t)p(t+1)=Mp(t)
  • 由随机游走得到t+1t+1的状态,当p(t+1)=p(t)p(t+1)=p(t)时说明达到稳定分布。
  • 我们原始的节点排名rr满足r=Mrr=Mr
    • 因此rr对于这种随机游走是一个稳定分布

page_000018.png

2、回顾伴随矩阵的特征值分解

  • 实际上r=Mrr=Mr,其中的rr是特征值为1的特征向量。

  • PageRank实际上是求rr,即求MM中特征值为1的特征向量

  • 我们可以根据迭代方法求解rr

page_000020.png


1.4 总结

  • PageRank
    • 通过网络连接的结构计算节点的重要性
    • 使用随机分布矩阵进行随机游走
    • PageRank实际上是解决r=Mrr=Mrrr求解问题

page_000021.png


2 如何求解PageRank?

2.1 迭代

​ 给定一个带有nn个节点的图,我们使用一个迭代过程:

  • 给每个节点初始化一个重要性
  • 重复PageRank直到irit+1rit<ϵ\sum_{i}\left|r_{i}^{t+1}-r_{i}^{t}\right|<\epsilon收敛
    • rjt+1r_{j}^{t+1}的计算过程为
rj(t+1)=ijri(t)dir_{j}^{(t+1)}=\sum_{i \rightarrow j} \frac{r_{i}^{(t)}}{d_{i}}

page_000023.png

1、具体过程

  • 一个简单的迭代方法
    • 初始化:r0=[1/N,,1/N]Tr^0=[1/N,\dots,1/N]^T
    • 迭代:r(n+1)=Mrtr^{(n+1)}=Mr^t
    • r(t+1)rt1<ε\left|\boldsymbol{r}^{(\boldsymbol{t}+\mathbf{1})}-\boldsymbol{r}^{t}\right|_{1}<\varepsilon停止

​ 可以证明50次迭代可以停止。

page_000024.png

2、一个计算例子

page_000026.png

2.2 存在两个问题

​ 存在两个问题:

  • 一些节点没有出边,存在消失的情况
  • 陷入了局部死循环(所有节点都在同一个group中)

page_000028.png

1、局部死循环

​ 如图可以看到,节点b的出边只有自己,因此迭代得到一直是同一种分布。

page_000029.png

2、消失的问题

​ 如图中,节点b没有任何出边,迭代消失。

page_000030.png

3、解决死循环的方法

  • 解决循环的方法:在每一步,冲浪选手有两种选择
    • β\beta概率随机跟从一个边
    • 1β1-\beta的概率跳到图上的任意一个节点
    • 一般来说β\beta设置为0.8到0.9之间

page_000031.png

4、解决消失的方法

  • 当到了消失的节点,赋予随机跳走的功能

page_000032.png

5、为什么跳走可以解决问题?

page_000033.png


2.3 最终的PageRank模型

  • 在每步中,冲浪选手有两种选择
    • β\beta概率,随机跟从一个链游走
    • 1β1-\beta概率,随机跳到某些节点
  • 得到最终的PageRank模型
rj=ijβridi+(1β)1Nr_{j}=\sum_{i \rightarrow j} \beta \frac{r_{i}}{d_{i}}+(1-\beta) \frac{1}{N}

page_000034.png

  • 随机邻接矩阵MM改写为GG
G=βM+(1β)[1N]N×NG=\beta M+(1-\beta)\left[\frac{1}{N}\right]_{N \times N}
  • 因此模型改为求解r=Grr=Gr

page_000035.png

1、一个计算例子

page_000036.png

page_000037.png


2.4 总结

​ PageRank模型

  • 目标:求解r=Grr=Gr
  • 方法:
    • 初始化r0r^0
    • 迭代ri+1=Grir^{i+1}=Gr^i(马尔科夫链)
    • 限制r(t+1)rt1<ε\left|\boldsymbol{r}^{(\boldsymbol{t}+\mathbf{1})}-\boldsymbol{r}^{t}\right|_{1}<\varepsilon
  • 解决的问题:死循环和消失

page_000038.png


3 随机重启和Personalized PageRank

3.1 想法

  • 目标:计算相似的节点

    • 什么物品我们该推荐给买过物品Q的客户?
    • 想法:历史中如果Q和P被相似的客户购买过,那么我们就把P推荐给Q。
  • 问题:如何找出P?

page_000041.png

2、Personalized PageRank

  • PageRank
    • 计算所有节点的重要性
    • 在一个图上有概率从当前节点随机跳走
  • Pensonalized PageRank
    • 计算给定节点群SS与图上节点的相似性
  • 图上的邻近
    • Q:什么物品和物品Q最接近?
    • 随机重启游走
      • 跳回开始定义的节点群SSS={Q}S=\{Q\}

page_000046.png

3.2 模型

  • 给定一个查询节点群SS,此处定义只有一个节点QQ
    • 定义迭代次数N_STEPSN\_STEPS
      • 随机游走到该物品的购物者
      • 从上面得到的购物者,随机游走到他所购买的物品
      • 标记该物品被游走次数+1
      • 定义概率ALPHAALPHA
        • 根据ALPHAALPHA随机重启回到节点群SS

page_000050.png


3.3 PageRank演变总结

  • PageRank
    • 从任何节点可以随机跳走
    • 节点有相同的概率被冲浪选手选择
S=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]S=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
  • 特定主题PageRank,通过Personalized PageRank实现
    • 跳回到特定的节点群
    • 节点可以有不同的概率被冲浪选手选择
S=[0.1,0,0,0.2,0,0,0.5,0,0,0.2]\boldsymbol{S}=[0.1,0,0,0.2,0,0,0.5,0,0,0.2]
  • 通过重启进行随机游走
    • 主题特定的PageRank总是跳回到相同的节点

page_000052.png


4 矩阵分解和Node Embeddings

1、回顾

​ Node Embeddings实际上是找到嵌入矩阵ZZ

image-20221031102313255


4.1 和矩阵分解的联系

  • 节点的简单相似性:如果节点uuvv是相似的,他们就有边连接
  • 这代表:ZvTZu=Au,vZ_v^TZ_u=A_{u,v}
  • 因此:ZTZ=AZ^TZ=A

page_000056.png

1、矩阵分解

  • Node Embeddings实际上是求解问题
minZAZTZ2\min _{\mathrm{Z}}\left\|\mathrm{A}-\boldsymbol{Z}^{T} \boldsymbol{Z}\right\|_{2}

page_000057.png

2、随机游走矩阵分解

  • Deepwalk实际上是求解
log(vol(G)(1Tr=1T(D1A)r)D1)logb\log \left(\operatorname{vol}(G)\left(\frac{1}{T} \sum_{r=1}^{T}\left(D^{-1} A\right)^{r}\right) D^{-1}\right)-\log b

page_000058.png

  • 式子log(vol(G)(1Tr=1T(D1A)r)D1)logb\log \left(\operatorname{vol}(G)\left(\frac{1}{T} \sum_{r=1}^{T}\left(D^{-1} A\right)^{r}\right) D^{-1}\right)-\log b的解释,可以从word2vec角度理解。

page_000059.png


4.2 存在的限制

1、数据更新后,模型需要整体重新训练

page_000060.png

2、无法解决结构相似性问题

  • 下面5和11是无法进行游走的,但这两个子图存在结构相似性,而随机游走无法捕捉。

page_000061.png

3、无法使用节点、边、图上自带的特征

page_000062.png


5 总结

  • PageRank
    • 用于计算节点的重要性
    • 通过邻接矩阵可以高效的进行计算
  • Personalized PageRank(PPR)
    • 对给定的一些节点进行重要性计算
    • 通过随机游走可以高效的进行计算
  • 基于随机游走的Node Embeddings可以看成矩阵分解
  • 把图看成矩阵问题进行求解是所有算法中最关键的想法

page_000063.png