想象你是年级主任,手底下有 28 个班,每个班人数各不相同——有的 32 人,有的 45 人。月底评比“优秀班集体”时,你不可能把 28 份长短不一的点名册直接摊在桌面上比较,更不可能让评委会去数每个学生的每门成绩。你需要的是:每个班交一张固定格式的总结表,上面写着总分、平均分、最高分,甚至“纪律委员重点推荐”。 图神经网络(GNN)面临的正是同样的局面。一张图就是一个“班级”,节点就是“学生”,每个节点经过 GNN 层层传递信息后,都带着一份自己的“成绩单”(特征向量)。但每张图的节点数不一样——分子图有 20 个原子,社交图有 5000 个用户。下游的分类器(比如全连接层加 softmax)却要求输入必须是固定长度的向量。怎么办?全局池化(Global Pooling)就是那位“年级主任的收表员”:它把变长的节点信息集合,浓缩成一张固定维度的“班级总结表”——图向量,交给分类器打分。 这篇文章会带你认识不同的“收表风格”:求和池化(全班总分)、平均池化(全班平均分)、最大池化(全班最强单项)、注意力池化(让课代表发言权更大),以及更高级的层次化池化 DiffPool(先分组讨论再逐级汇总)。读完后,你会彻底明白“变长图 → 定长向量”这条 GNN 图分类必经之路。

岗位关联

对 AI 从业者而言,全局池化是图分类、分子性质预测、社团检测等任务的“最后一公里”——几乎所有 GNN 图级应用都离不开它,掌握它能让你在模型设计、效果调优时真正理解瓶颈出在哪一层。

目录
  1. 可视化演示
  2. 池化作用:为什么图的答案需要一张“班级总结表”
  3. 求和平均池化:全班总分 vs 全班平均分
  4. 最大池化:找到班级里最强的单项选手
  5. 注意力池化:让课代表有更大的发言权
  6. 层次化池化:先分小组讨论,再逐级汇总成年级报告
  7. 策略选择实战:没有最好的池化,只有最合适的总结表
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态演示图神经网络全局池化的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

图神经网络全局池化:Phi系 Phi系列模型发展脉络与设计理 Phi-3各版本架构与能力对比 核心机制可视化 图神经网络全局池化整体架构与关键组件

池化作用:为什么图的答案需要一张“班级总结表”

年级主任要给每个班评优,但各班的点名册长短不一,没法直接横向比较。解决办法是让每班交一张固定格式的总结表。图神经网络遇到的情况一模一样:GNN 编码完后,每个节点都带着一个特征向量,但图的节点数各不相同;下游分类器只认固定长度的输入。全局池化就是那张“标准总结表”的生产者——它把整张图浓缩成一个固定维度的向量,即图级表示(graph-level representation)。

这个“总结”操作,在文献里通常叫做 READOUT(读出)。GNN 编码器负责理解图结构、更新节点特征;READOUT 负责把所有节点特征汇总成图向量,再接上分类头完成图分类。两者分工明确:编码器是“班主任”,负责了解每个学生;READOUT 是“收表员”,负责把全班信息写进一张标准表。

形式化地看,全局池化是一个集合函数:输入是图中所有节点的特征集合,输出是一个固定长度的向量。公式为:

回到年级主任的视角:他不需要知道班里到底有 32 人还是 45 人,只要看到那张总结表就能完成评比。图分类也一样——分类器从不在乎图里有多少节点,它在乎的是池化后那张“图向量”是否足够代表整张图。接下来,我们看看不同风格的“收表员”有什么区别。

hG=READOUT({hv∣v∈V})\displaystyle h_G = \text{READOUT}\left(\{h_v \mid v \in V\}\right)
这个公式说明:图向量 \(h_G\) 由全体节点特征 \(h_v\) 经过 READOUT 操作聚合而来,输出维度与节点数量无关,只取决于节点特征的维度。
  1. 图级向量 \(h_G\)一整张图最终凝聚成的固定长度向量,相当于班级总结表上那些格子。
    hGh_G
  2. 节点特征 \(h_v\)\(v\) 表示某个节点,\(h_v\) 是该节点在 GNN 编码后得到的特征向量,相当于一个学生的各科成绩单。
    hvh_v
  3. 节点集合 \(V\)图中所有节点的集合,不同图的 \(|V|\) 不同,这正是“变长”的根源。
    V={v1,v2,…,vn}V = \{v_1, v_2, \ldots, v_n\}
  4. READOUT 映射把大小可变的集合映射到固定维度空间,是池化的“总装车间”。
    READOUT:{hv}v∈V↦hG∈Rd\text{READOUT} : \{h_v\}_{v \in V} \mapsto h_G \in \mathbb{R}^d

求和平均池化:全班总分 vs 全班平均分

评比优秀班集体时,年级主任最常用的两个指标是“全班总分”和“全班平均分”。总分能反映班级的整体体量(人越多总分通常越高),平均分则抹平了人数差异,反映每个人的平均水平。这两种指标对应着全局池化中最朴素、也最常用的两员大将:求和池化(Sum Pooling) 和 平均池化(Mean Pooling)。

求和池化把所有节点的特征逐维相加,得到一个与节点数无关的固定向量。它的数学形式非常直观:

而平均池化先求和再除以节点总数 \(|V|\),输出每一维表示节点在该维度上的平均水平:

求和池化的特点是对图的规模天然敏感:100 个学生的班级总分天然比 10 个学生的班级总分大,即使两者水平一样。这在某些任务里是缺点——模型可能把“图大”错当成“特征强”;但在另一些任务里却是优势,比如分子图中原子数本身就与分子量相关,求和池化能保留这种量级信息。平均池化则相当于把图归一化到了同一尺度,更适合节点规模差异大、但任务需要比较“平均表现”的场景。

回到年级主任的比喻:如果评的是“总贡献奖”,总分(求和)合理;如果评的是“教学质量奖”,平均分(平均)才公平。选哪个指标,取决于你想让“班级规模”这个因素起作用还是被剔除。

hGsum=∑v∈Vhv\displaystyle h_G^{\text{sum}} = \sum_{v \in V} h_v
hGmean=1∣V∣∑v∈Vhv\displaystyle h_G^{\text{mean}} = \frac{1}{|V|} \sum_{v \in V} h_v
  1. 求和符号 \(\sum_{v \in V}\)把集合 \(V\) 里每个节点的特征向量逐维度相加,好比把每个学生的每科成绩都加到班级总分里。
    ∑v∈Vhv\sum_{v \in V} h_v
  2. 节点总数 \(|V|\)图中节点的个数,平均池化用它做分母来消除规模影响。
    ∣V∣|V|
  3. 平均操作 \(\frac{1}{|V|} \sum\)先全体求和,再除以人数,得到“人均水平”,好比班级平均分。
    1∣V∣∑v∈Vhv\frac{1}{|V|} \sum_{v \in V} h_v

最大池化:找到班级里最强的单项选手

年级主任的总结表上除了总分和平均分,通常还有一栏“单项最高分”。一个班的数学最高分是 98 分,哪怕整体平均只有 80 分,这个“尖子”也值得记录。最大池化(Max Pooling) 干的就是这件事——它不是看全体,而是盯着每个维度上最突出的那个响应。

具体操作是:对每一个特征维度 \(k\),在所有节点中取最大值,把所有维度的最大值拼在一起,得到图向量。公式为:

注意一个容易混淆的点:最大池化不是只挑出一个最重要的节点。它是逐维度取最大,第 1 维的最大值可能来自节点 A,第 2 维的最大值可能来自节点 B。最终向量是“各科最强选手”的组合。

最大池化对“强信号”非常敏感,同时也会温柔地忽略掉那些平庸的节点——就像总结表上不会记录“数学 40 分”的学生。它适合节点特征稀疏、只有少数节点携带关键信息的图,例如某些分子中只有个别原子决定毒性、社交网络中只有少数用户是传播源头的场景。

hG(k)=max⁡v∈Vhv(k),k=1,2,…,d\displaystyle h_G^{(k)} = \max_{v \in V} h_v^{(k)},\quad k = 1, 2, \ldots, d
  1. 维度索引 \(k\)表示节点特征的第 \(k\) 个分量,相当于成绩单上的“数学”这一列。
    k∈{1,2,…,d}k \in \{1, 2, \ldots, d\}
  2. 逐维最大 \(\max_{v \in V} h_v^{(k)}\)在全体节点中找第 \(k\) 维的最大值,好比找出全班数学最高分。
    max⁡v∈Vhv(k)\max_{v \in V} h_v^{(k)}
  3. 完整输出向量把 \(d\) 个维度的最大值按顺序排列,构成图向量。
    hG=(max⁡v∈Vhv(1),  max⁡v∈Vhv(2),  …,  max⁡v∈Vhv(d))h_G = \left( \max_{v \in V} h_v^{(1)},\; \max_{v \in V} h_v^{(2)},\; \ldots,\; \max_{v \in V} h_v^{(d)} \right)

注意力池化:让课代表有更大的发言权

到了初二(4)班,年级主任觉得“一刀切”的汇总方式太粗糙——班长和课代表对班级的了解显然比普通同学更全面。于是每位学生发言之前,会先根据他的“靠谱程度”给一个权重,重要的人说话声音更大。注意力池化(Attention Pooling) 学的正是这件事:用一个可训练的网络给每个节点打分,分数高的节点在汇总时权重更大。

打分函数通常是一个可训练参数向量 \(q\) 与节点特征做内积,再经过 softmax 归一化成权重 \(\alpha_v\),最后加权求和得到图向量。数学表达为:

与求和、平均、最大这三种“无参数”池化不同,注意力池化引入了可训练参数 \(q\)。这个 \(q\) 在训练过程中会自动学习:什么类型的节点对当前分类任务更重要,它就给这类节点更大的权重。比如在分子毒性预测中,模型可能会自动学会给“卤素原子”这类关键原子打高分——不需要人类专家告诉它。

类比来说,求和/平均/最大是“铁面无私”的三种固定统计量,而注意力池化是“会看人下菜碟”的学习型收表员。它比前三种更灵活,代价是多了几个参数、需要数据去训练。这也解释了为什么在现代图分类模型中,注意力池化几乎成了默认配置。

αv=exp⁡(q⊤hv)∑u∈Vexp⁡(q⊤hu),hG=∑v∈Vαvhv\displaystyle \alpha_v = \frac{\exp(q^\top h_v)}{\sum_{u \in V} \exp(q^\top h_u)},\qquad h_G = \sum_{v \in V} \alpha_v h_v
  1. 打分函数 \(q^\top h_v\)可训练向量 \(q\) 与节点特征点积,得到该节点的标量分数,相当于老师给每个学生的“靠谱度”打分。
    sv=q⊤hvs_v = q^\top h_v
  2. softmax 归一化把所有分数变换成总和为 1 的权重,避免某个节点权重过大。
    αv=exp⁡(sv)∑u∈Vexp⁡(su)\alpha_v = \frac{\exp(s_v)}{\sum_{u \in V} \exp(s_u)}
  3. 加权求和用权重 \(\alpha_v\) 对所有节点特征做加权平均,输出图向量。
    hG=∑v∈Vαvhvh_G = \sum_{v \in V} \alpha_v h_v

层次化池化:先分小组讨论,再逐级汇总成年级报告

如果班级太大——比如 500 人的大年级,直接让 500 人同时汇报,信息肯定乱成一锅粥。聪明的年级主任会先让 10 个人一组讨论形成小组意见,组长再聚到一起形成班级意见,最后班级代表合成年级报告。层次化池化(Hierarchical Pooling) 正是这种“逐级粗化”的思路,代表作是 DiffPool。

DiffPool 不满足于只做“一次性读取”,它希望在学习节点特征的同时,也学习“哪些节点应该合并成一个簇”。具体做法是:GNN 的每一层不仅输出新的节点特征,还输出一个分配矩阵 \(S^{(l)}\),它告诉模型:第 \(l\) 层的节点分别以多大概率归属于下一层的哪个"super-node"。然后用这个矩阵把节点特征和邻接矩阵都粗化一层:

这个过程是端到端可训练的:分配矩阵的学习目标直接与最终的图分类损失挂钩,模型会自己摸索“怎样分组最有利于分类”。与全局池化相比,DiffPool 保留了图的多层结构信息,相当于在总结之前先做了一次“有组织的信息浓缩”。

当然,层次化池化也不是万能的。它比单层全局池化复杂得多,训练更慢、参数更多,在小数据集上容易过拟合。这就像年级主任虽然可以组织层层讨论,但如果每个班只有十几个人,直接全场汇报反而更高效。

S(l)=softmax(GNNl(A(l),H(l))),H(l+1)=S(l)⊤H(l),A(l+1)=S(l)⊤A(l)S(l)\displaystyle S^{(l)} = \text{softmax}\left(\text{GNN}_l\left(A^{(l)}, H^{(l)}\right)\right),\qquad H^{(l+1)} = S^{(l)\top} H^{(l)},\qquad A^{(l+1)} = S^{(l)\top} A^{(l)} S^{(l)}
  1. 分配矩阵 \(S^{(l)}\)第 \(l\) 层学到的“节点→簇”归属概率,softmax 保证每个节点对下一层各簇的概率和为 1。
    S(l)=softmax(GNNl(A(l),H(l)))S^{(l)} = \text{softmax}\left(\text{GNN}_l\left(A^{(l)}, H^{(l)}\right)\right)
  2. 粗化特征 \(H^{(l+1)}\)把节点特征按归属概率加权合并,得到下一层更少的节点特征。
    H(l+1)=S(l)⊤H(l)H^{(l+1)} = S^{(l)\top} H^{(l)}
  3. 粗化邻接矩阵 \(A^{(l+1)}\)同时更新图结构,让“簇与簇之间”的边反映原图的连接强度。
    A(l+1)=S(l)⊤A(l)S(l)A^{(l+1)} = S^{(l)\top} A^{(l)} S^{(l)}

策略选择实战:没有最好的池化,只有最合适的总结表

年级主任最终发现:评比不同奖项时,用的总结指标不一样;最稳妥的做法,是让各班把总分、平均分、最高分都写在同一张表上,评委各取所需。这个经验在 GNN 实战中同样成立——多池化融合是提升模型稳健性的常见手段。

一个非常实用的做法是把求和、平均、最大池化的结果拼接(concat)起来作为图向量,再接分类器。这样图向量既能保留规模信息,又能反映平均水平,还能抓住强信号:

然后接一个多层感知机(MLP)完成分类:

实战中如何选择?可以遵循几条简单原则:如果任务本身与图规模强相关(如分子量预测),优先求和池化;如果图规模差异大但任务要求“比平均水平”(如用户行为分类),优先平均池化;如果只有少数关键节点携带信息(如异常检测),最大池化或注意力池化更合适;如果数据量充足、需要精细化建模,DiffPool 这类层次化池化值得一试。

最后别忘了:池化只是读出头的一部分,它的输出质量还必须通过验证集上的图分类准确率来检验。一个实用的工作流是:固定 GNN 编码器,分别尝试求和、平均、最大、注意力、拼接等读出方案,在验证集上对比,选最高者作为最终配置。就像年级主任不会拍脑袋决定用哪个指标,而是翻看往年的评比结果来定规则。

hG=Concat(hGsum,  hGmean,  hGmax)\displaystyle h_G = \text{Concat}\left( h_G^{\text{sum}},\; h_G^{\text{mean}},\; h_G^{\text{max}} \right)
y^=softmax(WhG+b)\displaystyle \hat{y} = \text{softmax}\left(W h_G + b\right)
  1. 拼接操作 \(\text{Concat}\)把三种池化结果按维度首尾相连,得到更长的图向量。
    Concat(hGsum,  hGmean,  hGmax)\text{Concat}\left( h_G^{\text{sum}},\; h_G^{\text{mean}},\; h_G^{\text{max}} \right)
  2. 线性层 \(W h_G + b\)图向量通过可训练的权重矩阵 \(W\) 和偏置 \(b\) 映射到类别得分。
    WhG+bW h_G + b
  3. softmax 分类把得分转换为各类别概率,取最大者作为预测标签。
    y^=softmax(WhG+b)\hat{y} = \text{softmax}\left(W h_G + b\right)

AI 应用场景

分子性质预测:从原子图到溶解度标签

阶段:图级表示学习 / 模型推理

解决的问题:分子天然是图结构——原子是节点、化学键是边,不同分子的原子数量差异巨大。传统方法用分子指纹(如摩根指纹)需要人工设计哈希半径和位长,会丢失原子间的远程交互信息。GNN 编码器逐层传递原子信息后,再用全局池化把整个分子压成一个固定向量,喂给 MLP 预测溶解度、毒性、血脑屏障穿透率等性质。

具体案例:某 AI 制药团队筛选 10 万候选分子,用 GIN 做编码器、注意力池化做读出头,预测口服吸收率,相比“分子指纹 + XGBoost”基线,AUC 提升 8 个百分点;当改用“求和+平均+最大”三路拼接时,模型在跨分子量区间的泛化误差进一步下降。

社交网络子图分类:识别异常资金流团伙

阶段:图特征聚合 / 风控模型上线

解决的问题:风控团队需要判断一个由转账关系构成的子图是正常用户群还是洗钱团伙。子图规模从几人到上千人不等,且成员会动态变化。全局池化把每个子图压缩成固定维度的向量,再输入分类器判断风险等级,避免直接处理变长图带来的维度爆炸。

具体案例:某支付平台把每笔交易映射为带时间戳的图,用 GCN 编码后分别做平均池化和最大池化并拼接,识别异常资金流动子图。上线后误报率降低 30%,且因为池化操作计算简单,单张子图的推理耗时低于 5 毫秒,满足了实时风控要求。

程序代码漏洞检测:从 AST 语法树到漏洞类别

阶段:图分类 / 静态分析辅助

解决的问题:程序的抽象语法树(AST)可以看作一种特殊的图,不同函数的代码长度差异极大(节点数从几十到上千)。要对海量开源代码做漏洞分类,必须把长度不一的 AST 图变成固定向量。层次化池化 DiffPool 可以逐层合并语法子树,让模型在“函数体—语句—表达式”的不同颗粒度上捕捉可疑模式。

具体案例:某安全公司用 DiffPool 对 50 万份 C 语言函数的 AST 图做分类,检测缓冲区溢出漏洞。相比单层全局池化,DiffPool 在细粒度漏洞模式上准确率高出 12%,因为它保留了语法结构的层级信息。

Python 演示

python52 行
import numpy as np  def sum_pool(node_feats):    """求和池化:对节点维度逐维相加,得到固定维度向量"""    return np.sum(node_feats, axis=0)  def mean_pool(node_feats):    """平均池化:逐维取均值,消除图规模影响"""    return np.mean(node_feats, axis=0)  def max_pool(node_feats):    """最大池化:逐维取最大值,保留最强响应"""    return np.max(node_feats, axis=0)  def attention_pool(node_feats, score_vec=None):    """注意力池化:用可训练打分向量给节点加权,再求和"""    d = node_feats.shape[1]    if score_vec is None:        rng = np.random.RandomState(0)        score_vec = rng.randn(d)    scores = node_feats @ score_vec    weights = np.exp(scores) / np.sum(np.exp(scores))    return np.sum(node_feats * weights.reshape(-1, 1), axis=0)  def readout(node_feats, mode="sum"):    """统一读出头:把变长节点特征转成固定维度向量"""    if mode == "sum":        return sum_pool(node_feats)    if mode == "mean":        return mean_pool(node_feats)    if mode == "max":        return max_pool(node_feats)    if mode == "attention":        return attention_pool(node_feats)    raise ValueError("unknown pooling mode: " + mode)  if __name__ == "__main__":    rng = np.random.RandomState(42)    graph_a = rng.rand(6, 4)   # 图A:6个节点,每节点4维特征    graph_b = rng.rand(10, 4)  # 图B:10个节点,每节点4维特征    for mode in ["sum", "mean", "max", "attention"]:        va = readout(graph_a, mode)        vb = readout(graph_b, mode)        print(mode, "A shape:", va.shape, "B shape:", vb.shape)    print("A sum  :", np.round(readout(graph_a, "sum"), 3))    print("B sum  :", np.round(readout(graph_b, "sum"), 3))
目的:用 NumPy 从零实现四种全局池化,验证不同节点数的图经过池化后都能得到相同维度的向量。
  1. def sum_pool(node_feats):定义求和池化函数,入参是形状为 (节点数, 特征维度) 的矩阵
  2. return np.sum(node_feats, axis=0)沿节点维度求和,输出形状变为 (特征维度,),与节点数无关
  3. return np.mean(node_feats, axis=0)求均值,等价于求和后再除以节点总数
  4. return np.max(node_feats, axis=0)逐维取最大,每个维度来自不同节点
  5. scores = node_feats @ score_vec注意力打分:每个节点特征与可训练向量做点积,得到标量分数
  6. weights = np.exp(scores) / np.sum(np.exp(scores))对分数做 softmax,得到总和为 1 的权重
  7. graph_a = rng.rand(6, 4)模拟一个 6 节点的图,节点特征维度为 4
  8. va = readout(graph_a, mode)统一接口调用,输出固定维度向量,验证形状完全一致

常见误区

误区求和池化不就是平均池化乘以节点数嘛,反正都是线性变换,模型加个权重就能学回来,选哪个都行。

正解虽然二者数学上只差一个 \(1/|V|\) 的缩放,但这个缩放系数是随图变化的。不同图的节点数不同,模型无法用同一个固定权重去抵消这个动态缩放。求和池化保留了图的规模信息,平均池化抹平了规模差异——两者对图大小的敏感度本质不同,导致分类边界完全不同。就像“全班总分”和“全班平均分”评价的是两个不同的维度,不能说哪个能被另一个替代。

为何常见:初学者看到公式 \((\sum h_v)/N = \text{mean}\),误以为只是常数缩放,忽略了分母 \(N\) 在不同样本间是变化的。

误区最大池化输出不就是把最重要的那个节点的特征复制一遍吗?这样会丢掉其他所有节点的信息。

正解最大池化是逐维度取最大值。假设节点特征有 128 维,第 1 维的最大值可能来自节点 A,第 2 维的最大值可能来自节点 B——最终向量是“各维度最强响应的拼接”,本质上是一种特征选择,而不只是保留单个节点。它确实会忽略每个维度上的非最大值,但这正是它擅长提取稀疏强信号的原因。

为何常见:人们习惯把“最大值”想象成“最值的那个人”,而没意识到它是按特征维度独立操作的。

误区注意力池化里的 \(\alpha_v\) 是人为设置的超参数,比如给中心节点更高的权重,给边缘节点更低的权重。

正解注意力权重完全由可训练的打分网络从数据中学出来。打分的参数 \(q\) 是在训练过程中通过梯度下降自动更新的,没有任何人手工指定“哪个节点重要”。模型会自己发现:对当前分类任务而言,哪些节点特征组合更能区分正负样本,就给哪些节点更大的权重。这就像年级主任不指定谁是课代表,而是让数据自己选——谁对评比结果贡献大,谁的发言权就大。

为何常见:注意力机制中“重要程度”的直观含义容易让人误以为是规则预设,忽略了它本质上是数据驱动的可学习参数。

误区图有 100 个节点,池化后输出就是 100 维;图有 1000 个节点,池化后就是 1000 维。所以图向量长度还是不固定。

正解全局池化的输出维度只取决于节点特征的维度 \(d\),与节点数 \(|V|\) 完全无关。求和/平均/最大池化都是对节点维度做约简,无论输入是 \(100 \times d\) 还是 \(1000 \times d\),输出都是 \(d\) 维。注意力池化同理,加权求和后得到一个 \(d\) 维向量。这正是“全局池化”名字里“固定维度”的含义——它是解决变长图分类问题的关键一步。

为何常见:把“池化”和“卷积下采样”混淆,以为池化只是在空间上缩小尺寸,忽略了全局池化的本质是集合到向量的映射。

面试题

Q1. 全局池化在 GNN 中的核心目标是什么?

单选题 · easy

  • A.增加图中的节点数量
  • B.变长节点集转固定向量← 正确答案
  • C.减少模型训练参数量
  • D.让所有图拥有相同结构

答案:B。全局池化的根本使命是把规模不一的节点特征集合映射为固定维度的图向量,供下游分类器使用。A 与目标相反;C 只是可能带来的副作用,不是核心目标;D 错误,全局池化不改变图拓扑结构。

Q2. 求和池化对图规模的反应是?

单选题 · easy

  • A.完全忽略节点总数
  • B.对节点数量天然敏感← 正确答案
  • C.只关注最大的节点
  • D.自动归一化到单位长度

答案:B。求和池化把所有节点特征直接相加,节点越多累加值越大,因此对图规模天然敏感。A 和 D 是平均池化或归一化的特性,C 是最大池化的特征。

Q3. 平均池化的主要优势是?

单选题 · mid

  • A.保留了图的整体体量
  • B.归一化不同图的规模← 正确答案
  • C.提取最强的单个特征
  • D.不需要任何节点特征

答案:B。平均池化除以节点总数 \(|V|\),把不同大小的图拉到同一尺度上比较,消除了规模差异的影响。A 是求和池化的特点,C 是最大池化的特点,D 错误——所有池化都需要节点特征。

Q4. 以下哪些操作可以把变长图变成固定向量?

多选题 · mid

  • A.对节点特征逐维求和← 正确答案
  • B.对节点特征逐维平均← 正确答案
  • C.对节点特征逐维取最大← 正确答案
  • D.对节点特征随机排序

答案:ABC。求和、平均、最大都属于 READOUT 家族,它们对节点维度做约简,输出固定维度向量。D 只是打乱节点顺序,输出形状不变,并没有聚合信息,不能作为池化方法。

Q5. 最大池化是逐维取最显著响应,这意味着?

单选题 · mid

  • A.只保留某一个节点信息
  • B.各维度可来自不同节点← 正确答案
  • C.结果与平均值完全相同
  • D.对节点顺序异常敏感

答案:B。最大池化对每个特征维度独立取最大值,第 1 维的最大值可能来自节点 A,第 2 维可能来自节点 B,所以它是“各科最强选手”的组合而非单个节点。C、D 都与最大池化定义相悖。

Q6. 关于注意力池化,哪些描述正确?

多选题 · hard

  • A.打分权重由网络学习得出← 正确答案
  • B.权重经 softmax 归一化← 正确答案
  • C.权重完全忽略节点特征
  • D.加权求和生成图向量← 正确答案

答案:ABD。注意力池化的权重来自可训练打分向量与节点特征的点积,再经 softmax 化为总和为 1 的权重,最后加权求和得到图向量。C 错误:打分过程恰恰依赖节点特征,且经过 GNN 编码后的特征已包含结构信息。

Q7. DiffPool 层次池化的核心机制是?

单选题 · hard

  • A.对节点特征做全局平均
  • B.学习分配矩阵粗化图结构← 正确答案
  • C.随机采样部分节点做池化
  • D.将每个节点单独输出向量

答案:B。DiffPool 通过 GNN 每一层输出一个分配矩阵 \(S^{(l)}\),表示节点归属到下一层簇的概率,然后用它同时粗化节点特征和邻接矩阵。A 是普通的全局池化,C 没有学习过程,D 根本没有池化。

Q8. 图级分类器中,池化得到的图向量通常接什么?

单选题 · easy

  • A.再接一层 GCN 卷积
  • B.直接作为分类器输入← 正确答案
  • C.回填到每个节点特征
  • D.替换邻接矩阵权重

答案:B。图向量经过全局池化后已经是固定维度,通常直接输入 MLP 或全连接层加 softmax 做分类。A 中 GCN 卷积作用于节点,不需要再作用在图向量上;C、D 属于误用。

Q9. 如何根据任务选择池化方法?

多选题 · mid

  • A.关注图体量时选求和池化← 正确答案
  • B.图规模差异大时选平均池化← 正确答案
  • C.关注强信号时选最大池化← 正确答案
  • D.所有任务必须用注意力池化

答案:ABC。求和池化保留规模信息,适合分子量等与节点数相关的任务;平均池化抹平规模差异,适合规模悬殊的场景;最大池化抓取最强信号,适合稀疏强特征图。D 错误——注意力池化虽灵活,但并非所有任务的最优解,需在验证集上对比。

Q10. 图 A 有 100 个节点、每个节点特征和均为 5,图 B 有 10 个节点、每个节点特征和均为 5,二者求和池化结果的总量比值约为?

单选题 · extreme

  • A.两者结果一样大
  • B.A约是B的两倍
  • C.A约是B的十倍← 正确答案
  • D.A约是B的百倍

答案:C。求和池化是逐节点求和,A 的总和为 \(100 \times 5 = 500\),B 为 \(10 \times 5 = 50\),比值 \(500/50 = 10\)。这正说明求和池化对图规模天然敏感,而平均池化会得到相同结果。