Skip to content
Blog Index
315 posts
ActivityLast 12 months
Featured
PyG-Common GCN Layer

Common GCN Layer

GCNConv (Graph Convolutional Network)

核心思想:利用度矩阵进行归一化,解决节点度数差异导致的数值爆炸。

  • 数学本质:对称归一化。
xi(k)=jN(i){i}1d^id^jWxj(k1)
  • Matrix Form
    • A^: 包含自环的邻接矩阵 [N,N]
    • D^: 对应的度矩阵。
    • D^1/2A^D^1/2: 这是归一化后的邻接矩阵
X(k)=D^1/2A^D^1/2X(k1)W
  • PyG 特点

    • 会自动处理 add_self_loops
    • 计算归一化系数 αi,j=1/d^id^j 并缓存,提高效率。
  • 适用场景:经典的半监督节点分类,对图结构比较固定的任务效果稳健。

python
class GCNConv(MessagePassing):
    def __init__(self, in_channels, out_channels):
        super().__init__(aggr='add')
        self.lin = Linear(in_channels, out_channels, bias=False)

    def forward(self, x, edge_index):
        # 1. 添加自环
        edge_index, _ = add_self_loops(edge_index, num_nodes=x.size(0))
        # 2. 线性变换 (通常先做线性变换,减少 message 阶段计算量)
        x = self.lin(x)
        # 3. 计算归一化系数 (度矩阵 D)
        row, col = edge_index
        deg = degree(col, x.size(0), dtype=x.dtype)
        deg_inv_sqrt = deg.pow(-0.5)
        norm = deg_inv_sqrt[row] * deg_inv_sqrt[col] # 即 1/sqrt(di*dj)

        return self.propagate(edge_index, x=x, norm=norm)

    def message(self, x_j, norm):
        # 邻居特征乘以归一化系数
        return norm.view(-1, 1) * x_j
NOTEPyGMessagePassingGCNGATGraphSAGEGIN
April 3, 2026
Apr 2026
Jan 2026
1
2
3
4
5
Next
avatar
AllenYGY
AllenYGY's daily study and life