图片1.png
这篇文章是KDD2021年收录的一篇文章,来自中国人民大学的王涵之。

论文地址:Approximate Graph Propagation (arxiv.org)

作者还在AI TIME上进行过汇报,感兴趣的可以自己去搜一下视频。写这篇文章是因为我们有个课程作业要分享一篇数据挖掘方向的文章,十几分钟,然后我就选了这篇论文。


论文内容

  • AGP是一种通用的图传播算法, 能高效计算主流的节点 邻近度指标。
  • AGP算法结合了蒙特卡罗游走和确定性传播两种方法的 优势,其计算复杂度达到了近似最优。
  • AGP将图神经网络 (GNN) 的可扩展性扩展到了十亿边。

    在图结构中物理距离失效

    先来看一下下图,如果不看右边的两张图,只看最左侧这张图,哪个节点跟这个节点的距离最接近?你可能会回答3节点或者5节点。但是如果你给他们加上一条边,就像中间这张图这样在,你就会发现一切都发生了变化,现在跟6节点关系最近的是4节点。再把图画的夸张一点,就像最右边这张图一样,虽然他们两个相隔很远了,但是现在和6节点关系,最近的依旧是4节点。通过这几张图我们可以得到一个结论:在图关系中物理距离已经失效。

image.png

节点邻近度

虽然物理关系比较时效,那我们就需要引入一个新的指标来衡量节点之间的关系。那就是节点邻近度(Node proximity),在这里用$\pi$表示。

那文章中是如何获得这个节点临近度的呢?是通过随机游走进行计算获得的。每一步随机游走的节点邻近度都通过一个公式:
$$
\vec{\pi}^{(l+1)}=P \cdot \vec{\pi}^{(l)}
$$

其中$P=A D^{-1}$

那这个A和D又是什么?

概率转移矩阵

image.png

  • A是整个图的邻接矩阵,看看上图,如果两个节点之间有一条直接相连的边,那么两个节点之间矩阵的位置就设置为1,其余的都设置为0。
    $$
    A = \left[\begin{array}{llllll}
    0 & 1 & 1 & 0 & 0 & 0 \
    1 & 0 & 1 & 0 & 0 & 0 \
    1 & 1 & 0 & 1 & 0 & 0 \
    0 & 0 & 1 & 0 & 1 & 1 \
    0 & 0 & 0 & 1 & 0 & 0 \
    0 & 0 & 0 & 1 & 0 & 0
    \end{array}\right]
    $$

  • D是节点的度数矩阵,一个节点有多少条边他的度数就是几。这在节点相应的位置写上它的度数,所以这个矩阵应该是一个对角矩阵。
    $$
    D = \left[\begin{array}{llllll}
    2 & 0 & 0 & 0 & 0 & 0 \
    0 & 2 & 0 & 0 & 0 & 0 \
    0 & 0 & 3 & 0 & 0 & 0 \
    0 & 0 & 0 & 3 & 0 & 0 \
    0 & 0 & 0 & 0 & 1 & 0 \
    0 & 0 & 0 & 0 & 0 & 1
    \end{array}\right]
    $$

  • 概率转移矩阵$P=A D^{-1}$,其实就是把连接矩阵A乘上度数矩阵D的逆矩阵。下面矩阵每一列都代表一个节点到其他节点的概率。以第一列为例,我们可以看到一节点到二节点的概率是1/2,到三节点的概率是1/2,到其他节点的概率都是0。
    $$
    P = \left[\begin{array}{cccccc}
    0 & 1 / 2 & 1 / 3 & 0 & 0 & 0 \
    1 / 2 & 0 & 1 / 3 & 0 & 0 & 0 \
    1 / 2 & 1 / 2 & 0 & 1 / 3 & 0 & 0 \
    0 & 0 & 1 / 3 & 0 & 1 & 1 \
    0 & 0 & 0 & 1 / 3 & 0 & 0 \
    0 & 0 & 0 & 1 / 3 & 0 & 0
    \end{array}\right]
    $$

节点邻近度指标计算

现在知道概率转移矩阵P是怎么来的了,那我们再回过头来看一下这个公式$\vec{\pi}^{(l+1)}=P \cdot \vec{\pi}^{(l)}$。

什么是随机游走。 随机游走就是从某一个节点出发,随机走向当前节点的邻居节点,就叫做随机游走。

每一步随机游走都能够获得一个新的节点临近度$\pi$,就是上一步的节点邻近度乘以概率转移矩阵$P$。

现在我们终于要看一下怎么通过随机游走获得节点的邻近度了。
常见的节点临近度、指标、计算方法有:

  • L -hop transition probability
    • 公式:$\vec{\pi}=\left(A D^{-1}\right)^{L} \cdot \overrightarrow{e{s}}$
      其中:
      $\overrightarrow{\boldsymbol{\pi}}$ : 概率向量
      $\vec{e}
      {s}$ :起始向量
      $\mathbf{L}$ :给定步长
    • 意思就是给定你一个步长L,你从某一个节点开始走L步到达另一个节点的概率。L=1的时候,就和你那个概率转移矩阵没什么区别。
  • PageRank(PR)

    • 公式:$P R(a)=\sum{i=0}^{i=k} \frac{P R\left(T{i}\right)}{L i}$
      其中:
      $P R(a)$ 节点a的PR值
      $P R\left(T_{i}\right)$ 指向a的其他节点的PR值
      $L i$ 指向a的其他节点的出边数
    • page rank算法,是谷歌发明的一个网页排序算法。上面这个公式是原始的计算公式。意思是当你要计算节点a的PageRank分数时,你需要找到所有指向a的其他节点,用它们的PageRank值除以他们的出边数。
    • 举个例子再介绍一下:

      image.png
      按照上面给出的那个公式就是应该这样计算:
      $$
      \begin{aligned}
      &P R(1)=\frac{P R(3)}{3}=\frac{\frac{1}{4}}{3}=\frac{1}{12} \
      &P R(2)=\frac{P R(1)}{2}+\frac{P R(3)}{3}+\frac{P R(4)}{1}=\frac{\frac{1}{4}}{2}+\frac{\frac{1}{4}}{3}+\frac{\frac{1}{4}}{1}=\frac{11}{24} \
      &P R(3)=\frac{P R(1)}{2}=\frac{\frac{1}{4}}{2}=\frac{1}{8} \
      &P R(4)=\frac{P R(2)}{1}+\frac{P R(3)}{3}=\frac{\frac{1}{4}}{1}+\frac{\frac{1}{4}}{3}=\frac{1}{3}
      \end{aligned}
      $$

    • 其实这个东西我们可以转化成矩阵计算。毕竟我们毕竟我们刚才也不是白讲那么半天什么概率转移矩阵之类的。有没有很熟悉,是不是用初始的那个节点邻近度乘以概率转移矩阵,就获得了第一步随机游走之后的节点邻近度呢。至于这个初始的节点的邻近指标是PageRank算法设计的,即默认开始时候所有节点的PageRank值相等。
      image.png
    • 这样一搞,我们可以改变PageRank的表示公式了:

      $\vec{\pi}=\sum{i=0}^{\infty} \alpha(1-\alpha)^{i} \cdot\left(A D^{-1}\right)^{i} \cdot \vec{e}{s}$

      $\overrightarrow{\boldsymbol{\pi}}$ : 概率向量

      $\vec{e}_{s}$ :起始向量

      $\alpha$ : 线性组合系数为阻尼因子

      停在当前节点概率为 $\alpha$
      停在其他节点的概率为1- $\alpha$

  • Personalized PageRank(PPR)

    • 公式:$\vec{\pi}=\sum{i=0}^{\infty} \alpha(1-\alpha)^{i} \cdot\left(A D^{-1}\right)^{i} \cdot \vec{e}{s}$

      $\overrightarrow{\boldsymbol{\pi}}$ : 概率向量

      $\vec{e}_{s}$ :起始向量

      $\alpha$ : 线性组合系数为阻尼因子

      停在当前节点概率为 $\alpha$
      停在其他节点的概率为1- $\alpha$

    • 这个算法和上面那个算法的区别就在于他们的初始向量是不一样的。PageRank是默认初始向量所有节点的值都相同,计算的是所有节点的相对重要程度;但是Personalized PageRank初始时设定一个节点为1其他节点为0,这样求出来的是图中节点对于某一节点的相对重要程度。
    • Personalized PageRank是服从几何分布的。
  • Heat Kernel PageRank(HKPR)
    • 公式:$\vec{\pi}=\sum{i=0}^{\infty} \frac{e^{-t} t^{i}}{i !} \cdot\left(A D^{-1}\right)^{i} \cdot \overrightarrow{e{s}}$
    • 他和上一个算法的区别就在于$\frac{e^{-t} t^{i}}{i !} \cdot\left(A D^{-1}\right)^{i}$替换了$\alpha(1-\alpha)^{i}$,这个算法是服从泊松分布的。相对于Personalized PageRank进行随机游走的时候,Heat Kernel PageRank能够走得更远。
  • Katz
    • 公式:$\vec{\pi}=\sum{i=0}^{\infty} \beta^{i} \cdot A^{i} \cdot \overrightarrow{e{s}}$
    • 这个算法和前面讲到的几个不一样。这个算法是使用节点之间的可达路径数来衡量节点的临近度的。
    • 举个栗子:下面这张图可以看出一节点到二节点有三条路径,但是二节点到一节点是没有可达路径的。所以在设置临近度矩阵的时候,1到2的那个位置数量应该设置为3。2到1的那个位置数量应该设置为0。
      image.png
  • ......

现有算法普遍只着眼于某一种图节点邻近度指标,设计针对性的优化算法。因此,这些优化算法普遍不具有通用性,仅能改进某一种特定的节点邻近度。然而,现有的图节点邻近度指标各有侧重,在不同的应用问题中,研究者会根据各种邻近度指标的特性,选出最适合的邻近度指标进行图传播。

因此作者将现有常用的一些节点邻度指标进行归纳得出如下的一个通用范式。

image.png

论文中的表格如下,除了邻近度之外还加上了一些图神经网络的内容。
image.png

求解方法

Monte-Carlo随机游走 [Fogaras et al., Internet Mathematics 2005]:

如果图传播框架为: 

则我们可以借助Monte-Carlo随机游走得到 ,从源节点出发产生足够多的随机游走

将向量 $\boldsymbol{x}$ 看作随机游走起始节点的概率分布(如果 $|x|{1} \neq 1$ , 则可以先对 $\boldsymbol{x}$ 做column normalization,即按照 $\frac{\boldsymbol{x}}{|\boldsymbol{x}|{1}}$ 所指示的概率分布选择起始节点,最 后在传播过程结束后,对传播结果乘 $|x|{1}$ 以保证结果无偏),从所选起始节点出发产生足够多 条随机游走,第 $i$ 步游走以 $\frac{w{i}}{Y{i}}$ 的概率停止在当前节点,以 $\left(1-\frac{w{i}}{Y{i}}\right)=\frac{Y{i+1}}{Y_{i}}$ 的概率随 机走向当前节点的任一邻居。最后,我们用所有随机游走中,停止在节点 $u$ 的游走数占总随机游 走数的比例作为对节点 $u$ 图传播结果 $\boldsymbol{\pi}(u)$ 的估计。

但是这个方法存在一个缺点。 因为它是基于随机游走采样的嘛,所以会产生比较大的方差,因此需要进行多次随机游走才能够获得最终的结果。

确定性传播 (Deterministic propagation) Andersen et al., FOCS 2006:

确定性传播算法的原型来源于Andersen等人在FOCS'06论文 《Local Graph Partitioning using PageRank Vectors》里提出的Forward Search方法,虽然原论文提出Forward Search的目标是 估计单源Personalized PageRank(即 $\boldsymbol{\pi}=\sum{i=0}^{\infty} \alpha(1-\alpha)^{i}\left(\mathbf{A D}^{-1}\right)^{i} \boldsymbol{e}{s}$ ),但是该方法可 以被很容易地拓展用于通用图传播范式的估计问题中。

在确定性传播算法中,其将图传播向量 $\pi$ 的计算问题拆分为对各层传播结果的估计问题,即 $\boldsymbol{\pi}=\sum_{i=0}^{\infty} \boldsymbol{\pi}^{(i)}$ 。

作者发现,对于现实生活中使用的绝大多数节点邻近度指标,超过 $L=\log \frac{1}{\delta}$ 层的图传播 结果均小于相对误差阈值 $\delta$ ,即我们可以仅用前 $L$ 层图传播估计结果的加和 $\hat{\boldsymbol{\pi}}=\sum_{i=0}^{L} \hat{\pi}^{(i)}$ 。

这个方法的优点是可以得到确定的结果。但是在某些极端情况下,时间复杂度特别高。

比如在下图中我们可以看出来,如果你使用确定性传播的话。那确定性传播要重复计算N次。但是你可以看到从S到T,它的路径都是通过两条边加一个节点
,路径是完全一样的。在这种情况下,如果使用蒙特卡罗随机游走的话,那随机选每一个计算结果都是一样的,只需要计算一次就好了。所有蒙特卡罗随机游走时间词拿度为O(1)。使用测定性传播时间复杂度为O(n)。

image.png

来梳理一下我们现在已知的消息:

  • 基于蒙特卡洛的随机游走采样方法,时间复杂度较低,但是结果可能有较大的误差。
  • 使用确定性的图传播算法,时间复杂度较高,但是结果准确。

利弊已经知道了,那我们该如何取舍呢。

作者在原文中提出一种方法,是将二者结合起来使用,就是小孩子才做选择,我都要。

看下图。下图那两个分母是表示传播节点和被传播节点的出边数,随着分母的增大,整个向外传播的概率是变小的,当它概率小到一定程度的时候我们可以认为它已经不向外传播了。

因为它这个向外传播的概率是有节点的出边数所决定的,所以就要按照节点的边数进行一个排序。在操作中设定一个阈值,在某一个阈值之前的节点都进行确定性传播,因为这些节点继续向外传播的可能性比较大,所以要对他们进行精确计算,以求获得比较准确的结果。而剩余的那些向外传播概率比较低的节点,则对他们进行蒙特卡罗随机采样。因为他们本来向外传播的概率就非常小,所以即使结果的误差较大,对整个实验的影响也是微乎其微。

image.png

实验部分

最后作者是进行了2个实验,都在4个数据集上进行实验。我就从原文结了一部分的图片。

基于Heat Kernel PageRank 的社区发现

原文中是一共设立了两个指标,我在这里仅放了一个,社区发现这个是用时和误差的一个图表。可以看到agp算法使用时间更短,并且误差更小。至少还提了另一个指标,是一个社区发现的质量,在这里我就不做叙述了,感兴趣的可以自己去看论文原文。
image.png

基于图神经网络的节点分类

看最后1个数据集。看最后1个数据集papers 100M,因为现有的一些原因,除神经网络是没有办法把图做得特别大的。但是在本文中取得了一个突破性的效果,就是将图的大小扩展到了10亿边。
下边的4个图表可以看每个图表中最右侧部分会有一些单独的信号,这些单独的信号就是baseline的结果。而左侧的折线图是使用AGP算法进行对照实验的结果,我们可以明显的看到,这个算法可以在更短的时间内获得和baseline相同的效果。

经过AGP加速后的GNN模型,首次在目前最大的GNN数据集papers100M上,单机单卡在半小时内完成图特征传播,这进一步证明了AGP的可扩展性。
image.png