第 279 题:实现图神经网络的邻居采样,Inductive的minibatch。
题目
实现图神经网络的邻居采样,Inductive的minibatch。
完整讲解
一、图神经网络与邻居采样
- GNN:节点表示由其邻居信息聚合更新;$h_v^{(k)} = \text{agg}({h_u^{(k-1)} : u \in \mathcal{N}(v)})$。全图训练时每个节点依赖多跳邻居,邻居爆炸导致无法整图 batch 训练,需采样形成 minibatch。
二、Inductive 与 Minibatch
- Inductive:泛化到新节点/新图(训练时未见),需用节点特征与局部结构,不能依赖全图 embedding。Minibatch:每 batch 只取一部分节点及其依赖的子图,前向与反向仅在该子图上计算,控制显存与时间。
- 邻居采样:对当前 batch 中的每个节点,不取全部邻居,而是随机采样若干邻居(如每层采样 $S_k$ 个),用采样子图做 $K$ 层 GNN;下一层再对刚采到的节点采样其邻居,形成多跳采样子图。这样每层节点数受控(约 batch_size × $S_1 \times \cdots \times S_K$),可训练大图。
三、实现要点
- 采样策略:均匀采样、按边权采样、或重要性采样(补偿未采到的邻居)。GraphSAGE 即「每层固定采样数」的典型。
- 反向:采样子图上的反向传播与全图一致,只需在构建计算图时只包含采样到的边与节点;框架(如 PyG、DGL)支持 minibatch + 采样。
- 归纳:聚合函数与权重在训练时学习,推理时对新节点只需其邻居(可再采样),无需全图重训,即 Inductive。
面试要点
- 能说清 GNN 为何需要邻居采样(邻居爆炸)、以及 Inductive 的含义。
- 能说明 minibatch 下多跳采样的流程(每层采样若干邻居、形成采样子图)、以及采样策略与实现注意。
记忆要点
- GNN minibatch:每层对当前节点采样固定数量邻居,形成采样子图,控制规模;Inductive=泛化到新节点。
- 采样可均匀/按权/重要性;反向在子图上进行,框架支持。