跳转至

消息传递范式

消息传递把一层 GNN 统一分为三个步骤。

  1. 消息计算:邻居节点 \(u\in\mathcal N(v)\) 为中心节点 \(v\) 生成消息:
\[ m_{u\to v}^{(k)}=\operatorname{MESSAGE}^{(k)} \left(h_u^{(k)},h_v^{(k)},e_{uv}\right). \]
  1. 消息聚合:中心节点把所有邻居消息汇总为一个向量:
\[ m_v^{(k)}=\operatorname{AGGREGATE}^{(k)} \left(\left\{m_{u\to v}^{(k)}:u\in\mathcal N(v)\right\}\right). \]
  1. 节点更新:结合自身旧表示和聚合消息,得到下一层表示:
\[ h_v^{(k+1)}=\operatorname{UPDATE}^{(k)} \left(h_v^{(k)},m_v^{(k)}\right). \]

由于邻居集合没有天然顺序,聚合函数通常需要满足置换不变性。一个使用邻居均值的具体更新式是:

\[ h_v^{(k+1)}=\sigma\left( W_k\frac{1}{|\mathcal N(v)|}\sum_{u\in\mathcal N(v)}h_u^{(k)} +B_kh_v^{(k)} \right). \]

不同 GNN 架构的核心差别,通常就在 MESSAGE、AGGREGATE 和 UPDATE 的具体选择。