Faster Local Solvers for Graph Diffusion Equations
概
在实际使用中, 我们可能会需要估计一个图的 pagerank/katz/hk 向量, 这通常需要我们求解一个 GDE. 但是直接每次利用全部的图计算复杂度可能是很高的. 所以一些每次仅用到局部结构 (本文实际上用的是一个节点以及它的邻居节点) 会是一种更好的更实际的方式. 这种方法其实已经有了一些传统的解, 作者提出了一种更加高效的 (没感觉有啥特别的).
Graph Diffusion Equations 的传统近似解法
-
假设, 我们定义传统的 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)\) 的求解:
- 策略是维护 \(\bm{x}, \bm{r}\) 两个向量, 我们希望迭代地驱使 \(\bm{x} \rightarrow \phi(\bm{e}_s; \mathbf{A}, \alpha, \beta)\) 而 \(\bm{r} \rightarrow \bm{0}\), 即 \(\bm{r}\) 是一个残差.
- 更新策略是 (\(\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. \]
- 可以证明, 如下的更新策略是满足的:\[\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}. \] -
作者似乎这种方式收敛地更快. 但是我感觉没啥特别的差别啊.
吐槽: 本质上就是个高效解方程的方案, 为啥要写的如此晦涩?