• LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation


    He X., Deng K., Wang X., Li Y., Zhang Y. and Wang M. LightGCN: simplifying and powering graph convolution network for recommendation. In International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR), 2020.

    LightGCN 极大简化了先前的 NGCF (主要去掉了特征转换部分和非线性激活函数部分).

    符号说明

    • \(u \in \mathcal{U}, |\mathcal{U}| = M\), 用户;
    • \(i \in \mathcal{I}, |\mathcal{I}| = N\), item;
    • \(R \in \{0, 1\}^{M \times N}\), 交互矩阵, 用户 \(i\) 和 item \(i\) 有交互才为 1 否则为 0;
    • \(\mathcal{N}_u = \{i \in \mathcal{I}| R_{ui} = 1\}\);
    • \(\mathcal{N}_i = \{u \in \mathcal{U}| R_{ui} = 1\}\);
    • \(\bm{e}^{(0)} \in \mathbb{R}^d\), 根据user (item) 的 ID 转换得到的 embedding;
    • \(\bm{e}^{(l)} \in \mathbb{R}^d\), GCN 的第 \(l\) 层的一个特征;
    • \(E^{(l)} \in \mathbb{R}^{(M + N) \times d}\), 每一行是一个 \(\bm{e}\).
    • \(\sigma(\cdot)\), 非线性激活函数.

    主要内容

    NGCF

    1. 获取初始的 ID embeddings:

      \[\bm{e}_u^{(0)}, \bm{e}_i^{(0)}; \]

    2. NGCG 的每一层通过邻接的结点的特征进行聚合:

      \[\bm{e}_{u}^{(k+1)} = \sigma(W_1 \bm{e}_u^{(k)} + \sum_{i \in \mathcal{N}_u} \frac{1}{\sqrt{|\mathcal{N_u}| |\mathcal{N}_i| }} (W_1 \bm{e}_i^{(k)} + W_2 (\bm{e}_i^{(k)} \odot \bm{e}_{u}^{(k)}))), \\ \bm{e}_{i}^{(k+1)} = \sigma(W_1 \bm{e}_i^{(k)} + \sum_{u \in \mathcal{N}_i} \frac{1}{\sqrt{|\mathcal{N_u}| |\mathcal{N}_i| }} (W_1 \bm{e}_u^{(k)} + W_2 (\bm{e}_u^{(k)} \odot \bm{e}_{i}^{(k)}))). \]

    3. 由此得到

      \[(\bm{e}_u^{(0)}, \cdots, \bm{e}_u^{(L)}), \\ (\bm{e}_i^{(0)}, \cdots, \bm{e}_i^{(L)}); \]

    4. 连接得到最后的特征:

      \[\bm{e}_u = \bm{e}_u^{(0)} \oplus \cdots \oplus \bm{e}_u^{(L)}, \\ \bm{e}_i = \bm{e}_i^{(0)} \oplus \cdots \oplus \bm{e}_i^{(L)}; \]

    5. 通过内积

      \[\bm{e}_u^T \bm{e}_i \]

      进行预测.

    作者通过消融发现, 特征转换部分 \(W_1, W_2\) 和非线性激活函数是不必要的:

    图中:

    • NGCF-f: 去掉 \(W_1, W_2\);
    • NGCF-n: 去掉 \(\sigma(\cdot)\);
    • NGCG-fn: 去掉二者.

    LightGCN

    为此, 作者提出了一个简化的但更加高效的版本.

    1. 获取初始的 ID embeddings:

      \[\bm{e}_u^{(0)}, \bm{e}_i^{(0)}; \]

    2. NGCG 的每一层通过邻接的结点的特征进行聚合:

      \[\bm{e}_{u}^{(k+1)} = \sum_{i \in \mathcal{N}_u} \frac{1}{\sqrt{|\mathcal{N_u}| |\mathcal{N}_i| }} \bm{e}_i^{(k)}, \\ \bm{e}_{i}^{(k+1)} = \sum_{u \in \mathcal{N}_i} \frac{1}{\sqrt{|\mathcal{N_i}| |\mathcal{N}_u| }} \bm{e}_u^{(k)}; \\ \]

    3. 由此得到

      \[(\bm{e}_u^{(0)}, \cdots, \bm{e}_u^{(L)}), \\ (\bm{e}_i^{(0)}, \cdots, \bm{e}_i^{(L)}); \]

    4. 加权和得到最后的特征:

      \[\bm{e}_u = \sum_{k=0}^L \alpha_k \bm{e}_u^{(k)}, \\ \bm{e}_i = \sum_{k=0}^L \alpha_k \bm{e}_i^{(k)}, \]

      这里 \(\alpha_k\) 可以通过诸如注意力网络来学习, 作者推荐直接用 \(\frac{1}{L + 1}\);

    5. 通过内积

      \[\hat{y}_{ui} = \bm{e}_u^T \bm{e}_i \]

      进行预测;

    6. 通过 BPR 进行训练:

      \[L_{BPR} = - \sum_{u=1}^M \sum_{i \in \mathcal{N}(u)} \sum_{j \not = \mathcal{N}_u} \ln \sigma(\hat{y}_{ui} - \hat{y}_{uj}) + \lambda \|E^{(0)}\|^2. \]

    分析

    记邻接矩阵

    \[A = \left ( \begin{array}{cc} \bm{0} & R \\ R^T & \bm{0} \end{array} \right ) \in \{0, 1\}^{(M + N) \times (M + N)}. \]

    则 LightGCN 的流程可以简述为:

    \[E^{k + 1} = (D^{-\frac{1}{2}} A D^{-\frac{1}{2}}) E^{(k)}, \]

    其中 \(D\)\((M + N ) \times (M + N)\) 的对角矩阵, 对角线元素为 \(A\) 每一行的非零元素个数.

    \(\tilde{A} := D^{-\frac{1}{2}} A D^{-\frac{1}{2}}\), 则最后的加权和的结果可以写为:

    \[E = \sum_{k = 0}^L \alpha_k \tilde{A}^{k} E^{(k)}. \]

    有了这些工具可以和以往的一些 GCN 框架进行对比 (不过我一时半会儿也不会回看这些论文, 就不写了). 总体来说, GCN 在推荐系统上的应用效果和 smooth 的程度有很大关系.

    实验

    • 处理各层 embeddings 的实验:

    作者比较了 LightGCN 和 Light-single (仅用最后的 \(\bm{e} := \bm{e}^{L}\) 进行预测), 可以发现, 对于后者, 加深层数是没有丝毫作用的, 大概也是 over-smoothing 了.

    • 不同的'标准化'特征方式的影响:

    需要注意的是, 无论是 NGCF 还是 LightGCN 都采用了对称的方式'标准化'以避免scale的持续增加, 即 \(\frac{1}{\sqrt{|\mathcal{N}_u ||\mathcal{N}_i|}}\), 作者还比较了仅用一部分的结果. 可以发现, 对于正常的 LightGCN 结果是有提升的, 而在用了 \(L_1\) 之后反而起的反效果 (话说 \(L_1\) 怎么加? \(\frac{\bm{e}}{\|\bm{e}\|_1}\) ?).

    • 平滑度量: 作者做了 LightGCN 和 MF 所提取特征的平滑性的比较, 给出了一个指标, 具体回看论文.

    代码

    [PyTorch]
    [TensorFlow]

  • 相关阅读:
    逻辑分支中if小括号中的隐式转换
    逻辑运算符
    CSS——元素的显示与隐藏
    JS对象
    JS预解析与变量提升
    JS作用域
    JS函数
    CSS定位(position)
    JS数组
    JS分支结构与循环结构
  • 原文地址:https://www.cnblogs.com/MTandHJ/p/16380230.html
Copyright © 2020-2023  润新知