Faster Local Solvers for Graph Diffusion Equations

Bai J., Zhou B., Yang D. and Xiao Y. Faster Local Solvers for Graph Diffusion Equations. NeurIPS, 2024.

在实际使用中, 我们可能会需要估计一个图的 pagerank/katz/hk 向量, 这通常需要我们求解一个 GDE. 但是直接每次利用全部的图计算复杂度可能是很高的. 所以一些每次仅用到局部结构 (本文实际上用的是一个节点以及它的邻居节点) 会是一种更好的更实际的方式. 这种方法其实已经有了一些传统的解, 作者提出了一种更加高效的 (没感觉有啥特别的).

Graph Diffusion Equations 的传统近似解法

  • 这部分方法在 Local Graph Partitioning using PageRank Vectors 提到.

  • 假设, 我们定义传统的 graph diffusion equations 为如下形式 (不全面):

    \[\bm{v} = \phi(\bm{u}; \mathbf{A}, \alpha, \beta) = \alpha \bm{u} + \beta \mathbf{A}\bm{v}. \]

  • 满足一定的条件下, 我们有:

    \[\bm{v} = \alpha (\mathbf{I} - \beta \mathbf{A})^{-1} \bm{u}. \]

  • \(\bm{e}_i = (\underbrace{0, \ldots, 0}_{i-1}, 1, 0, \ldots, 0)^T\), 我们有

    \[\begin{array}{ll} \bm{v} & = \alpha (\mathbf{I} - \beta \mathbf{A})^{-1} \sum_i u_i \bm{e}_i \\ & = \sum_i \alpha (\mathbf{I} - \beta \mathbf{A})^{-1} u_i \bm{e}_i \\ & = \sum_i u_i \phi(\bm{e}_i; \mathbf{A}, \alpha, \beta). \end{array} \]

    因此, 我们只需要求解每一个 \(\phi(\bm{e}_i; \mathbf{A}, \alpha, \beta)\), 后面的解就好求了. 此外, \(\phi\) 是关于 \(\bm{u}\) 的一个线性算子.

  • 让我们来讨论一下 \(\phi(\bm{e}_s; \mathbf{A}, \alpha, \beta)\) 的求解:

    1. 策略是维护 \(\bm{x}, \bm{r}\) 两个向量, 我们希望迭代地驱使 \(\bm{x} \rightarrow \phi(\bm{e}_s; \mathbf{A}, \alpha, \beta)\)\(\bm{r} \rightarrow \bm{0}\), 即 \(\bm{r}\) 是一个残差.
    2. 更新策略是 (\(\phi\) 后面简写了) 需要保证:

      \[\bm{x}_{t + 1} + \phi(\bm{r}_{t + 1}) = \bm{x}_t + \phi(\bm{r}_{t}) = \bm{0} + \phi(\bm{e}_s). \]

      以及

      \[\bm{r}_{t+1} \prec \bm{r}_t. \]

    3. 可以证明, 如下的更新策略是满足的:

      \[\tag{1} \bm{x}_{t+1} \leftarrow \bm{x}_t + \alpha \bm{r}_t \odot \bm{e}_i \\ \bm{r}_{t+1} \leftarrow \bm{r}_t - \bm{r}_t \odot \bm{e}_i + \beta \mathbf{A} (\bm{r}_t \odot \bm{e}_i), \\ \bm{x}_0 = \bm{0}, \bm{r}_0 = \bm{e}_s. \]

      这里 \(i = \argmax_j r_{t, j}\).

proof:

\[\begin{array}{ll} \bm{x}_{t+1} + \phi(\bm{r}_{t+1}) &=\bm{x}_{t} + \alpha \bm{r}_t \odot \bm{e}_i + \phi(\bm{r}_{t}) - \phi((\mathbf{I} - \beta \mathbf{A}) (\bm{r}_t \odot \bm{e}_i)) \\ &=\bm{x}_{t}+ \phi(\bm{r}_{t}). \end{array} \]

  • \(\beta \mathbf{A} (\bm{r}_t \odot \bm{e}_i) \le r_{t, i}\) 的时候 (比如 \(\mathbf{A}\) 的每个元素都小于 \(\beta\)), 就能保证 \(\bm{r}_{t+1} \prec \bm{r}_t\). 当然了, 这个条件可能并不一定全部满足. 但是也容易注意到, (1) 这种更新方式, 实际上能够每次把残差中的最大元素给削减部分, 然后一部分分给 \(\bm{x}\), 另一部分分给 \(\bm{r}\), 总体来说会慢慢收敛.

Sequential local updates via Successive Overrelaxation (SOR)

  • 注意到, 我们实际上要求解的是

    \[\frac{1}{\alpha} (\mathbf{I} - \beta \mathbf{A}) \bm{v} = \bm{u}, \]

    它可以拓展为:

    \[\mathbf{Q} \bm{v} = \bm{u}. \]

  • 这个的求解可以通过

    \[\tag{2} \bm{x}_{t+1} \leftarrow \bm{x}_t + w \cdot \bm{e}_i \\ \bm{r}_{t+1} \leftarrow \bm{r}_t - w \cdot \mathbf{Q} \bm{e}_i, \\ \bm{x}_0 = \bm{0}, \bm{r}_0 = \bm{u}. \]

  • 这个实际上满足:

    \[\mathbf{Q}x_{t+1} + \mathbf{r}_{t+1} = \mathbf{Q}x_{t} + w \mathbf{Q} \mathbf{e}_i + \mathbf{r}_{t} - w \mathbf{Q} \mathbf{e}_i = \mathbf{Q}x_{t} + \mathbf{r}_{t} = \bm{u}. \]

  • 作者似乎这种方式收敛地更快. 但是我感觉没啥特别的差别啊.

吐槽: 本质上就是个高效解方程的方案, 为啥要写的如此晦涩?

代码

[official-code]

posted @ 2024-10-31 17:27  馒头and花卷  阅读(7)  评论(0编辑  收藏  举报