用 AI 算一层 GCN:邻居都填一,归一化后为何不一定还是一
图神经网络的聚合常被口头叫作“平均一下邻居”。但经典GCN的一种对称归一化并不等于逐行求平均。给每个节点都放入数字1,输出仍可能不同,这个小反例能帮助AI把两个公式分清。
AI模型生成的概念插图:节点、自环与消息传递;箭头仅表示消息示意,不规定底层无向图的边方向,也不代表精确权重。
先加自环,再重新统计度数
取三个节点组成无向路径1—2—3,没有1—3边。原邻接矩阵的三行依次为[0,1,0]、[1,0,1]、[0,1,0]。按论文的传播规则先加单位矩阵,得到含自环的三行[1,1,0]、[1,1,1]、[0,1,1]。
加自环后的行和为[2,3,2]。这里的度数按这个新矩阵的行和计算,不能继续使用原图的[1,2,1],也不采用某些图论记号中“自环计两次”的另一套约定。定义来自当前矩阵,必须与后面的权重一致。
对称归一化矩阵S=D⁻¹ᐟ²(A+I)D⁻¹ᐟ²。在有连接的位置,系数为1/√(dᵢdⱼ)。所以第一行为[1/2,1/√6,0],第二行为[1/√6,1/3,1/√6],第三行为[0,1/√6,1/2]。它是对称矩阵,两个方向的同一条边权相同。
所有特征相同,也不保证每行加起来等于一
每个节点只有一个特征,输入X=[1,1,1];本例将可学习权重固定为1,激活取恒等映射,只检查聚合部分。第一、三节点输出均为1/2+1/√6,约0.908248290。第二节点输出为1/3+2/√6,约1.149829914。
这些值没有平均回1,因为S的行和一般不是1。称它为“归一化”并不能额外推导出每行总权重为1,更不能将输出解释成邻居特征的普通凸平均。归一化的具体形式要看左右两侧各用了什么矩阵。
作为对照,若采用D⁻¹(A+I),第一行就是[1/2,1/2,0],第二行[1/3,1/3,1/3],第三行[0,1/2,1/2]。这才是本图的逐行平均,对全1输入确实返回[1,1,1]。但它已换了传播算子,不能为了“修正”前面的结果擅自替换。
再用一个脉冲检查消息从哪里来
将输入换成[1,0,0],仍使用对称S,输出为[1/2,1/√6,0]。第三个节点这一层没有收到来自节点1的非零贡献,因为两者没有直接连接;第二层才可能经节点2把信息继续传过去。这个测试可识别误加1—3边或矩阵乘法方向写错等问题。
读者可让AI交原邻接矩阵、含自环矩阵、度数、归一化系数和逐节点乘加过程,先验证S对称,再验证两个输入的结果。孤立节点也可单独补测:加一个权重为1的自环后度数为1,在本设定下会保留自己的特征,不出现除以零。
实际GCN还会学习特征变换并使用非线性,图也可能有边权或不同自环策略。以上数值只适用于写明的无向无权图及传播式;它不证明增加图层一定更好,也不说明归一化后的数就是预测概率。
资料核对日期:2026年10月2日。算例为原创教学设定,已用独立Python计算复核,不代表真实模型训练或性能测试。
参考资料
Kipf与Welling:Semi-Supervised Classification with Graph Convolutional Networks,式2


