把一个图节点,展开成神经元。
图决定信息从哪里来,神经元决定如何计算。
选择一个图节点
点击节点,查看其特征与计算过程。
当前节点一跳邻居其他节点
节点 A 的特征向量
hA · 3 个输入特征
当前节点的连边(勾选以连接)
输入范围 −2 至 2。所有结果实时计算。
01 / 05
图节点 ≠ 单个神经元
节点携带多维特征。本例用 3 个输出神经元,为一个节点生成 3 个新特征。
同一层,不同节点复用同一组 W 和 b
展开后可以画出许多计算单元,但参数并不按节点各存一份。
模型约定、完整公式,以及与 MLP / CNN 的对应关系
这个实验采用什么模型?
mv = mean { hu : u ∈ N(v) }
xv = [ hv ∥ mv ] ∈ ℝ⁶
h′v = ReLU( W xv + b ) ∈ ℝ³
xv = [ hv ∥ mv ] ∈ ℝ⁶
h′v = ReLU( W xv + b ) ∈ ℝ³
这是一个简化的 GraphSAGE 风格消息传递层:3 维自身特征与 3 维邻居均值拼成 6 维输入,再用一个带偏置的线性层和 ReLU 更新。W 的形状为 3 × 6,b 为 3 维。等价于将 W 分为 Wself 与 Wneighbor 两块。
图是无向的;自身不计入邻居均值,而通过单独的分支参与计算。若没有邻居,本例约定 mv = 0。所有节点都使用同一份旧特征同步计算;演示播放只改变展示步骤,不会将输出写回输入。
输入数值和权重仅作教学示例,没有训练、损失函数或物理单位。本例的求均值没有可训练参数;其他 GNN 可以使用带参数的消息函数、注意力或更深的 MLP。不同层通常使用不同参数,GNN 也不都遵循完全相同的更新公式。
原理参考:DGL 官方消息传递与 GraphSAGE 教程。
从神经元视角看三种网络
| 网络 | 单元接收哪些输入? | 权重如何共享? |
|---|---|---|
| MLP | 通常是上一层全部特征 | 普通全连接层不强制跨位置共享 |
| CNN | 规则网格上的局部窗口 | 同一卷积核跨空间位置共享 |
| 本例 GNN | 自身特征 + 图邻居的均值 | 同一更新矩阵跨图节点共享 |
“神经元”指一个标量输出的计算单元:加权求和、加偏置、再经过激活函数。输入特征只是数值;求均值是固定聚合运算,它们不必被称为可训练神经元。
对于这一层的 5 个节点、每节点 3 维输出,完整展开可画出 15 个输出神经元的计算实例。但是独立可训练参数只有 3 × 6 + 3 = 21 个,而不是 5 × 21 个。
再叠一层:第二层接收第一层的节点特征。信息可以沿两条图边传播到两跳邻域。这里专注展示单层,以便看清每一个标量如何被计算。