拆解GCN(Graph Convolutional Network)单层迭代公式
用5个节点(每个节点10维特征)为例,详细拆解GCN(Graph Convolutional Network)单层迭代公式中各矩阵的维度和计算过程。GCN公式为:
1. 各矩阵的维度定义
假设你的场景是:
- 节点数:5个(例如5个路口/传感器)
- 每个节点特征维度:10维(例如车流量、速度等10个特征)
- 第 l 层的输出特征维度:假设为20维(可自定义)
(1) 邻接矩阵 A
- 维度:5×5
- 含义:描述节点间的连接关系。
(2) 单位矩阵 I
- 维度:5×5
- 含义:对角线为1,其他为0。添加自环后,每个节点会连接到自身。
(3) 添加自环后的邻接矩阵 A^=A+I
- 维度:5×5
(4) 度矩阵 D^
- 维度:5×5
- 含义:对角矩阵,对角线元素是每个节点的度数(即连接的边数)。
-
(5) 节点特征矩阵 H(l)
- 维度:5×10
- 行数:5(节点数)
- 列数:10(每个节点的特征维度)
(6) 权重矩阵 W(l)
- 维度:10×20
- 输入维度:10(与 H(l) 的列数一致)
- 输出维度:20(自定义,决定下一层的特征维度)
2. 公式计算步骤的维度变化
我们逐步计算 H(l+1) 的维度:
(1) 计算 H(l)W(l)
- 输入:H(l)(5×10) × W(l)(10×20)
- 输出:5×20
(矩阵乘法规则:(5×10)×(10×20)=5×20)
(2) 计算归一化的拉普拉斯矩阵 D^−21A^D^−21
- 维度:5×5
(所有矩阵都是5×5,结果仍为5×5)
(3) 聚合邻居信息
- 输入:D^−21A^D^−21(5×5) × H(l)W(l)(5×20)
- 输出:5×20
(矩阵乘法规则:(5×5)×(5×20)=5×20)
(4) 激活函数 σ
- 输入:5×20
- 输出:5×20(激活函数不改变维度)
3. 最终输出 H(l+1) 的维度
- 维度:5×20
(与下一层的输入特征维度一致)
4. 维度总结
矩阵/操作 | 维度 | 说明 |
---|---|---|
邻接矩阵 A | 5×5 | 原始节点连接关系 |
单位矩阵 I | 5×5 | 添加自环 |
自环邻接矩阵 A^ | 5×5 | A+I |
度矩阵 D^ | 5×5 | 对角矩阵,对角线为节点度数 |
特征矩阵 H(l) | 5×10 | 第 l 层的输入特征 |
权重矩阵 W(l) | 10×20 | 将特征从10维映射到20维 |
输出 H(l+1) | 5×20 | 第 l+1 层的输出特征(激活函数后) |
5. 关键理解点
- 邻接矩阵 A^ 的作用:定义节点间的连接关系,控制信息传播范围。
- 度矩阵 D^ 的作用:归一化邻接矩阵,防止节点度数不同导致特征缩放不均。
- 权重矩阵 W(l) 的作用:学习特征变换,决定下一层的特征维度。
- 激活函数 σ:引入非线性,增强模型表达能力。