• WeisfeilerLehman Test


    Huang N. and Villar S. A short tutorial on the weisfeiler-lehman test and its variants. arXiv preprint arXiv:2201.07083, 2022.

    本文介绍了 WL-Test 和它的一些变体, 它会和所设计的 GNN 的表达能力有关, 实际上由不同的变体会导出不同版本的 GNN, 所以还是很有意义的. 不过对于下面这些 Test 如何起到区分异构图的证明我并没有看过, 这里只是列出了算法.

    符号说明

    • \(G=(V, E, X_V)\), 图;
    • \(V = \{1, 2, \ldots, n\} := [n]\), 结点;
    • \(E \subset V \times V\), 边;
    • \(X_V = \{X_v: v \in V\} \subset \mathbb{R}^d\), 点上的特征;
    • \(\mathcal{N}_G(v) = \{w: (v, w) \in E\}\), 邻居结点;

    注: 如果不存在结点特征, 可以赋予 \(X_v = 1, \forall v \in V\).

    同构

    \(G = (V, E, X_V), G' = (V', E', X_{V}')\) 同构, 若存在置换 (permutation) \(\prod\) 使得
    $$
    \prod V = V' \
    \prod E = E': \prod (u, v) = (\prod u, \prod v) \
    \prod X_V = X_{\prod V} = X_{V}'.
    $$

    multiset

    multiset \(\{\!\{ \cdot \}\!\}\) 可以理解成如下的键值对:
    $$
    {c_v: \text{count}(c_v)},
    $$
    即其蕴含了 key 和该 key 出现的次数的信息.

    WL

    \(\text{WL}(G) \not = \text{WL}(G')\) 的时候, \(G, G'\) 不同构, 反之不一定.

    1-WL

    • 输入: \(G = (V, E, X_V)\);
    1. 赋予状态:

      \[c_v^0 \leftarrow \text{hash}(X_v), \quad \forall v \in V; \]

    2. 重复下列操作:

      \[c_v^l \leftarrow \text{hash}(c_v^{l-1}, \{\!\{c_w^{l-1}: w \in \mathcal{N}_G(v) \}\!\}), \quad \forall v \in V \]

      直到满足

      \[c_v^l = c_v^{l-1}, \quad \forall v \in V; \]

    • 输出 \(\{\!\{ c_v^l: v \in V \}\!\}\).

    k-WL

    注: 这里的 \(k\) 不是单纯的 \(k\), 因为 k-WL with \(k=1\) 不是 1-WL, 1-WL 实际上等价于 k-WL with \(k=2\).

    \[\bm{v} = (v_1, \cdots, v_k) \in V^k, \]

    下面的算法是每次处理 \(k\) 个点的算法, 记

    \[\mathcal{N}_i(\bm{v}) = \{(v_1, \ldots, v_{i-1}, w, v_{i+1}, \ldots, v_k: w \in V\}. \]

    以及, 下面的 \(\text{hash}(G(\bm{v}))\) 满足:

    \[\text{hash}(G(\bm{v})) = \text{hash}(G(\bm{v}')) \]

    当且仅当

    \[X_{v_i} = X_{v_i'}, \quad \forall i \in [k] \\ (v_i, v_j) \in E \Leftrightarrow (v_i', v_j') \in E, \quad \forall i, j \in [k] \]

    • 输入: \(G = (V, E, X_V)\);
    1. 赋予状态:

      \[c_{\bm{v}}^0 \leftarrow \text{hash}(G(\bm{v})), \quad \forall \bm{v} \in V^k; \]

    2. 重复下列操作:

      \[c_{\bm{v},i}^l \leftarrow \{\!\{c_w^{l-1}: w \in \mathcal{N}_i(\bm{v}) \}\!\}, \quad \forall \bm{v} \in V^k, i \in [k] \\ c_{\bm{v}}^l \leftarrow \text{hash}(c_{\bm{v}}^{l-1}, c_{\bm{v}, 1}^{l}, \ldots, c_{\bm{v}, k}^{l}), \quad \forall \bm{v} \in V^k, \]

      直到满足

      \[c_{\bm{v}}^l = c_{\bm{v}}^{l-1}, \quad \forall \bm{v} \in V^k; \]

    • 输出 \(\{\!\{ c_{\bm{v}}^l: \bm{v} \in V \}\!\}\).

    k-FWL

    下面, 我们用 \(c_{\bm{v}[i] \leftarrow w}\) 来表示

    \[c_{(v_1, v_2, \ldots, v_{i-1}, w, v_{i+1}, \ldots, v_k)}. \]

    • 输入: \(G = (V, E, X_V)\);
    1. 赋予状态:

      \[c_{\bm{v}}^0 \leftarrow \text{hash}(G(\bm{v})), \quad \forall \bm{v} \in V^k; \]

    2. 重复下列操作:

      \[c_{\bm{v},w}^l \leftarrow (c_{\bm{v}[1] \leftarrow w}^{l-1}, \ldots, c_{\bm{v}[k] \leftarrow w}^{l-1}), \quad \forall \bm{v} \in V^k, w\in V \\ c_{\bm{v}}^l \leftarrow \text{hash} (c_{\bm{v}}^{l-1}, \{\!\{c_{\bm{v},w}^{l}: w \in V \}\!\}, \quad \forall \bm{v} \in V^k \\ \]

      直到满足

      \[c_{\bm{v}}^l = c_{\bm{v}}^{l-1}, \quad \forall \bm{v} \in V^k; \]

    • 输出 \(\{\!\{ c_{\bm{v}}^l: \bm{v} \in V \}\!\}\).

    例子

    考虑如下的两个不同构的图 \(G, H\) (假设 features 是相同的):

    注: 标注就是左边 (1, 2, 3), 右边 (4, 5, 6).

    2-WL:

    1. 初始化, 因为结构是相同的, 所以起初会分成两组 (\((v_i, v_j) \in E\)\((v_i, v_j) \not \in E\)), 故可以按照图 2 中的 \(G^0, H^0\) 进行颜色的划分 (均为 12 yellows, 24 greys);
    2. 注意到此时 \(\mathcal{N}_1(\bm{v}), \mathcal{N}_2 (\bm{v})\) 实际上是 \(\bm{v}\) 对应位置的列和行, 以 (3, 3) 位置为例 (图中的颜色标注有误),

      \[\mathcal{N}_{1}((3, 3)) = \{(i, 3): i \in [6]\}, \\ \mathcal{N}_{2}((3, 3)) = \{(3, j): j \in [6]\}, \\ \]

    3. \[c_{(3, 3), 1}^1 = c_{(3, 3), 2}^1 = \{\!\{4 \text{ greys }, 2 \text{ yellows } \}\!\}; \]

    4. 于是

      \[c_{(3, 3)}^1 = \text{hash}(c_{(3, 3)}^0, \{\!\{4 \text{ greys }, 2 \text{ yellows } \}\!\}); \]

    5. 进一步我们会发现, \(c_{\bm{v}}^1\) 可以表示成

      \[c_{\bm{v}, 1}^1 = c_{\bm{v}, 2}^1 = \{\!\{4 \text{ greys }, 2 \text{ yellows } \}\!\}, \\ \text{hash}(c_{\bm{v}}^0, \{\!\{4 \text{ greys }, 2 \text{ yellows } \}\!\}), \]

      故新的 hash 值实际上由初始值 \(c_{\bm{v}}^0\) 决定, 所以 \(G^1, G^0\) 的模式 实际上是一样的, 故到 \(G^1\) 就可以停止了;
    6. 对于 \(H\) 也是同理的, 可以发现, 在算法停止的时候, \(G^1, H^2\) 的颜色模式依旧是一致的, 故 2-WL 算法是没法区分这两个图的;

    另一方面 2-FWL 它是能够得出 \(G, H\) 异构的结论的, 所以 2-FWL 的判断能力是强于 2-WL 的. 实际上, 作者在文中说, k-WL 是和 (k-1)-FWL 的判断能力是一致的, 后者会更加高效一点.

  • 相关阅读:
    django模板语言导入自定html文件内容
    django模板语言中的自定义函数
    ID3决策树
    K近邻算法
    Mini-Batch 、Momentum、Adam算法的实现
    python3安装scrapy教程
    numpy高级应用
    numpy.random随机数生成
    numpy 线性代数
    numpy文件操作
  • 原文地址:https://www.cnblogs.com/MTandHJ/p/16695870.html
Copyright © 2020-2023  润新知