核心要点
能讲清消息传递两步:先聚合(aggregate)邻居节点的表示,再更新(update)自身表示
能说明感受野随层数增长:堆叠 K 层,每个节点能感知到 K 跳范围内的结构与特征
能指出聚合需排列不变(sum/mean/max),对邻居无序、数量可变都成立
能说出产出:每个节点的 embedding 同时编码了自身特征与图结构,可用于节点/边/图级任务
标准回答
核心思想(独占一行)
消息传递(Message Passing)是 GNN 的统一范式:每一层里,节点先从邻居「收集消息」,再用这些消息更新自己的表示,逐层迭代后得到融合了结构信息的节点 embedding。
两个步骤
一是聚合(Aggregate):把邻居 (N(v)) 的当前表示用一个排列不变函数汇总,如求和、平均或最大池化,记为 (m_v = \text{AGG}({h_u : u \in N(v)}))。二是更新(Update):把聚合消息与自身上一层表示拼接/相加后经一个可学习变换(如线性层 + 非线性),得到 (h_v^{(k)} = \sigma(W \cdot [h_v^{(k-1)}, m_v]))。
感受野
每多堆叠一层,节点就多「看」一跳邻居。K 层 GNN 让每个节点的表示融合了 K 跳子图的信息,这也是 GNN 能捕获结构的根本原因。GCN、GAT、GraphSAGE 都是这一范式下聚合/更新函数的不同实例。
常见误区
⚠️ 常见踩坑
聚合函数必须排列不变,不能用对顺序敏感的拼接来聚合邻居;另外别误以为层数越多越好,过深会导致过平滑使节点表示趋同。
追问
追问 1:为什么聚合函数要排列不变?
因为图的邻居是无序集合且数量不固定,节点的表示不应依赖邻居的排列顺序。sum/mean/max 这类对称函数满足排列不变性,保证同一邻域无论怎样排列都得到相同结果。
追问 2:消息传递如何同时支持节点、边、图三类任务?
节点任务直接用最终节点 embedding;边任务用两端节点表示组合(如拼接/点积);图任务对所有节点表示做 readout 池化(sum/mean/max 或注意力)得到整图向量再分类。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。