2.5 KiB
2.5 KiB
以下是转换为 Markdown 格式的内容,公式已用 $
或 $$
包裹:
下面给出一个最简示例,只展示 节点 $A$ 在两层 GNN 里的更新计算过程,并说明它是如何从 2-hop 范围(即节点 $C, D$)间接获得信息。
图结构与初始特征
A
|
B
/ \
C D
- 边:$A$–$B$,$B$–$C$,$B$–
D
- 初始特征 (Layer-0):
A^{(0)} = [1.0,\ 0.5]
B^{(0)} = [0.8,\ 1.2]
C^{(0)} = [0.3,\ 0.7]
D^{(0)} = [1.5,\ 0.9]
第 1 层更新:$A^{(0)} \to A^{(1)}$
- 节点
A
的 1-hop 邻居:只有 $B$。 - 聚合(示例:自 + sum 邻居):
z_A^{(1)} \;=\; A^{(0)} + B^{(0)} \;=\; [1.0,\,0.5] + [0.8,\,1.2] \;=\; [1.8,\,1.7].
- MLP 变换:用一个两层感知器或线性+激活函数映射
z_A^{(1)}
到 2 维输出:A^{(1)} \;=\; \mathrm{MLP}\bigl(z_A^{(1)}\bigr).
- (数值略,可想象
\mathrm{MLP}([1.8,1.7]) \approx [1.9,1.1]
之类。)
- (数值略,可想象
结果:A^{(1)}
包含了 A 的初始特征 + B 的初始特征信息。
第 2 层更新:$A^{(1)} \to A^{(2)}$
为了让 A 获得 2-hop 范围($C, D$)的信息,需要先让 B 在第 1 层就吸收了 C, D
的特征,从而 B^{(1)} 蕴含 C, D
信息。然后 A 在第 2 层再从 B^{(1)} 聚合。
-
节点 B 在第 1 层(简要说明)
- 邻居:
\{A,C,D\}
- 聚合:
z_B^{(1)} = B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}
- MLP 变换:$B^{(1)} = \mathrm{MLP}\bigl(z_B^{(1)}\bigr)$。
- 此时 B^{(1)} 已经包含了
C, D
的信息。
- 邻居:
-
节点
A
的第 2 层聚合- 邻居:$B$,但此时要用 B^{(1)}(它已吸收 C、D)
- 聚合:
z_A^{(2)} = A^{(1)} + B^{(1)}.
- MLP 变换:
A^{(2)} = \mathrm{MLP}\bigl(z_A^{(2)}\bigr).
结果:A^{(2)}
就包含了 2-hop 范围的信息,因为 B^{(1)} 中有 C, D
的贡献。
小结
- 第 1 层:A 直接获取 B 的初始特征;B 同时获取 A、C、D 的初始特征。
- 第 2 层:A 获取 B 的新表示(B^{(1)}),该表示已带有 C、D 信息 → A 间接获得 2-hop 信息。
- 每层都进行“聚合 + MLP”同步更新,最终
A^{(2)}
就是节点 A 的 2 层 GNN 输出。
如果需要进一步调整或补充,请告诉我!