消息传递范式¶
消息传递把一层 GNN 统一分为三个步骤。
- 消息计算:邻居节点 \(u\in\mathcal N(v)\) 为中心节点 \(v\) 生成消息:
\[
m_{u\to v}^{(k)}=\operatorname{MESSAGE}^{(k)}
\left(h_u^{(k)},h_v^{(k)},e_{uv}\right).
\]
- 消息聚合:中心节点把所有邻居消息汇总为一个向量:
\[
m_v^{(k)}=\operatorname{AGGREGATE}^{(k)}
\left(\left\{m_{u\to v}^{(k)}:u\in\mathcal N(v)\right\}\right).
\]
- 节点更新:结合自身旧表示和聚合消息,得到下一层表示:
\[
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 的具体选择。