Random walk算法及其各种延伸、应用笔记

Random Walk

随机过程中定义的随机游走是每过一个单位时间,游走点固定向左或向右移动一个单位

推广到多维,一般情况下是:
对于点 x 0 ∈ R N x_0\in R^N x0RN,每个单位时间内:

  1. 随机生成一个n维向量 u u u
  2. 将其标准化为 u ′ = u ∑ i = 1 n u i 2 u'=\frac{u}{\sqrt{\sum_{i=1}^nu_i^2}} u=i=1nui2 u
  3. 以可变步长 λ \lambda λ为幅度进行一次随机游动,即 x 1 = x 0 + λ u ′ x_1=x_0+\lambda u' x1=x0+λu

对于图结构的数据,random walk是指,在一张图的任意一个顶点:

  • 遍历者以概率1-a游走到这个定点的邻居
  • 遍历者以a的概率跳跃到途中的任意一个顶点

这样的游走会以频率的方式体现出graph中每一个顶点被访问到的概率。

Random walk with start(RWR)

随机游走算法可以利用于检测整个图的概率分布,而RWR算法以及它的各种变体:

  • 在CV研究中适用于图像分割
  • 在graph结构中则适用于基于图结构中的一个base node,构建出它的邻居节点的分布情况。这一算法广泛应用于图结构的数据采样。

它的基本思想是:

  • 从一个或一系列base node开始遍历一张图
  • 在任意一个节点以1-a的概率移动到一个随机选择的邻点,以a概率跳回起点

RWR的实现

基于经典文章:Fast RandomWalk with Restart and Its Applications

符号定义:
在这里插入图片描述

数学表达

Input: The normalized weighted matrix W ~ \tilde{W} W~ and the starting vector e i ⃗ \vec{e_i} ei
Output: The ranking vector r i ⃗ \vec{r_i} ri

对于从指定位置( e i ⃗ \vec{e_i} ei )出发期望的遍历点位置 r i ⃗ \vec{r_i} ri ,它的值表示为:
r i ⃗ = c W ~ r i ⃗ + ( 1 − c ) e i ⃗ \vec{r_i}=c\tilde{W}\vec{r_i}+(1-c)\vec{e_i} ri =cW~ri +(1c)ei (1)

从中可以计算出
r i ⃗ = ( 1 − c ) ( 1 − c W ~ ) − 1 e i ⃗ = ( 1 − c ) Q − 1 e i ⃗ \vec{r_i}=(1-c)(1-c\tilde{W})^{-1}\vec{e_i}\\ =(1-c)Q^{-1}\vec{e_i} ri =(1c)(1cW~)1ei =(1c)Q1ei
可以看出在实际图含义上它是随机游动的,但是 r i ⃗ \vec{r_i} ri 是数值累计的。

classic实现

  • OnTheFly
    最基础的方法是按照(1)式递归收敛求解(条件一般是是 r i ⃗ \vec{r_i} ri 的L2范数的变化小于一定阈值 ξ 1 \xi_1 ξ1或指达到了指定的迭代次数m)。它被称为OnTheFly方法。这种方法在数据库较大时比较耗时。
    优化点: r i ⃗ \vec{r_i} ri 的分布存在局部性(这体现出了graph中节点的community性),所以只对存在了节点i的图的parition(注意,这个分割并不一定意味着完全不连通,只不过是距离较远参考意义很小)进行计算,其他的 r i j r_{ij} rij显然可以直接置0.
  • PreCompute
    预先计算出 Q − 1 Q^{-1} Q1,这种方法在数据库较大时比较耗空间。
    优化点:可以通过低秩近似来快速计算 Q − 1 Q^{-1} Q1

RWR的快速实现

通过节点的locality,以及图的线性相关性,可以使用近似算法快速计算RWR。

Off-line流程

  1. 使用拉普拉斯正则化计算出 W ~ \tilde{W} W~
  2. 使用诸如METIS软件包等方法将图分割成k个partition(METIS简单实用可见https://metis.readthedocs.io/en/latest/)
  3. W ~ \tilde{W} W~基于分割结果分为 W ~ = W 1 ~ + W 2 ~ \tilde{W}=\tilde{W_1}+\tilde{W_2} W~=W1~+W2~。其中 W 1 ~ \tilde{W_1} W1~包含全部partition内部的权重矩阵, W 2 ~ \tilde{W_2} W2~包含全部partition外部的权重矩阵,显然这二者交集为空。
  4. 按照partition序列将 W 1 ~ \tilde{W_1} W1~做成如下表示:在这里插入图片描述
  5. 通过上述分解出的 W 1 ~ \tilde{W_1} W1~,计算 Q 1 , i − 1 Q_{1,i}^{-1} Q1,i1:
    Q 1 , i − 1 = ( 1 − c W 1 , i ~ ) − 1 Q_{1,i}^{-1}=(1-c\tilde{W_{1,i}})^{-1} Q1,i1=(1cW1,i~)1
  6. 将Q与W值按同样的方式进行排列,得到 Q 1 − 1 Q_1^{-1} Q11在这里插入图片描述
  7. W 2 ~ \tilde{W_2} W2~部分,做低秩近似:
    W 2 ~ = U S V \tilde{W_2}=USV W2~=USV(这里似乎可以另开一个线程去做)
  8. 计算parition间项 Λ ~ \tilde{\Lambda} Λ~:
    Λ ~ = ( S − 1 − c V Q 1 − 1 U ) − 1 \tilde{\Lambda}=(S^{-1}-cVQ_1^{-1}U)^{-1} Λ~=(S1cVQ11U)1

On-line查询流程

根据off-line计算的结果,直接计算 r i ⃗ \vec{r_i} ri
r i ⃗ = ( 1 − c ) ( Q 1 − 1 e i ⃗ + c Q 1 − 1 U Λ ~ V Q 1 − 1 e i ⃗ ) \vec{r_i}=(1-c)(Q_1^{-1}\vec{e_i}+cQ_1^{-1}U\tilde{\Lambda}VQ_1^{-1}\vec{e_i}) ri =(1c)(Q11ei +cQ11UΛ~VQ11ei )

Λ ~ \tilde{\Lambda} Λ~的含义

这里实际上是利用舍曼-莫里森公式求解矩阵逆运算的一种方式:

https://zhuanlan.zhihu.com/p/44607246

!!!简化后的快速实现

在上述实现中,如果k=n,也即每个节点都分一个partition,那么显然 W 1 ~ = 0 , W 2 ~ = W ~ \tilde{W_1}=0,\tilde{W_2}=\tilde{W} W1~=0W2~=W~,并且因此 Q 1 = I Q_1=I Q1=I,这样可以对上述实现进行简化:

off-line部分

  1. 使用拉普拉斯正则化计算出 W ~ \tilde{W} W~
  2. 直接对正则化后的权重矩阵进行低秩近似:
    W ~ = U S V \tilde{W}=USV W~=USV
  3. node间项: Λ ~ = ( S − 1 − c V U ) − 1 \tilde{\Lambda}=(S^{-1}-cVU)^{-1} Λ~=(S1cVU)1

on-line部分

查询计算: r i ⃗ = ( 1 − c ) ( e i ⃗ + c U Λ ~ V e i ⃗ ) \vec{r_i}=(1-c)(\vec{e_i}+cU\tilde{\Lambda}V\vec{e_i}) ri =(1c)(ei +cUΛ~Vei )

低秩近似的实现

1. 特征值分解

特征值分解适用于拉普拉斯正则化处理的邻接矩阵,对其他方式处理的邻接矩阵,可以使用SVD分解

简单的实现是对W进行特征值分解:
W 2 ~ = U S U T V = U T \tilde{W_2}=USU^T\\V=U^T W2~=USUTV=UT
这样的方法可以减少50%的空间消耗,但是特征分解比较耗时。

!!!2. 分区低秩近似

如果将 W 2 ~ \tilde{W_2} W2~纵分为t个partition,name计算低秩近似的方法为:

  1. 构建 U ∈ R n × t U\in R^{n\times t} URn×t,其中 U i j = ∑ k ∈ i t h   p a r t i t i o n W i k U_{ij}=\sum_{k\in i^{th}\ partition}W_{ik} Uij=kith partitionWik,也即U的第i列是W第i个partition的列向量的和。
  2. S = ( U T U ) − 1 S=(U^TU)^{-1} S=(UTU)1
  3. V = U T W 2 ~ V=U^T\tilde{W_2} V=UTW2~
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值