卷积神经网络中的池化层:特征压缩与最大池化
池化层在卷积层提取大量特征后对特征图做压缩/下采样,只改变 H 和 W、不改变 channel,且不涉及矩阵计算;其中 max pooling 通过取区域最大值筛选重要特征,实践中通常优于 average pooling。
核心要点
- 卷积层之后要讲第二个层:池化层。原文先回顾卷积层已经解释了卷积怎么做、计算过程、细节和参数,然后引出池化层。
- 卷积可以做一次、两次、三次,甚至 100 次;每次卷积可能得到较多特征图。假设当前得到
24×24×64,其中 channel 是 64,即最后一次卷积得到 64 个特征图。 - 这样得到的特征值点很多,特征太丰富。卷积的初衷是尽可能多地提取特征,但这些特征不一定都重要。
- 池化层的作用是做压缩,也可称为下采样或 undersample 一类说法。压缩不是随便丢弃,而是有选择性地保留重要特征、丢弃不重要特征。
- 原文示例:原始
24×24×64,通过压缩得到12×12×64。原文口语中有“11 2乘2乘64”的表述,结合其“H、W 各变为原来的 1/2”推算,应为12×12×64。 - 池化后,H 变成原来的 1/2,W 变成原来的 1/2,体积或特征值个数变成原来的 1/4;channel 64 不变。
- 池化只改变 H 和 W,不改变 channel,也就是不改变特征图个数;它只能对长宽做缩减。
- max pooling:最大池化。做法是在不同区域中取最大值,没有矩阵计算,只是筛选。
- average pooling:平均池化。做法是在不同区域中取平均值,但原文指出现在很少见,因为 max pooling 在几乎所有问题中表现效果都要比 average pooling 好得多。
- 池化层不涉及任何矩阵计算,也不设置 W、B;它只是筛选、压缩、过滤,操作相对简单。
详细解析
背景:卷积层之后为什么还需要池化层
原文先回顾卷积层:已经解释过卷积怎么做、计算过程、其中涉及的细节和参数。接着引出第二个层——池化层。
卷积可以做一次、两次、三次,甚至 100 次。每一次得到特征图后,特征图数量可能比较多。原文假设当前得到 24×24×64,并提到“不要什么 H224、W224,我的一个 channel 是 64”。也就是说,最后一次卷积得到 64 个特征图。
此时特征值点很多,特征太丰富。卷积之前的设计想法是尽可能多地提取特征,但原文提出反问:这些特征都非常重要吗?不一定。因此池化层要解决的是特征过多、未必都有用的问题。
池化层是什么:压缩、下采样与选择性保留
池化层可以叫压缩,也可以叫下采样,原文还提到 undersample 一类说法。原文认为“压缩”比较直接。
压缩不是随便把特征扔出去,而是有选择性地保留重要特征、丢弃不重要特征。原文用“瘦身”来感受这种变化:
- 原始:
24×24×64 - 压缩后:
12×12×64(原文口语为“11 2乘2乘64”,按 H、W 各减半推算应为12×12×64) - H:变成原来的 1/2
- W:变成原来的 1/2
- 体积或特征值个数:变成原来的 1/4
- channel:64,不变
也就是说,池化层会在原始特征基础上进行筛选,选择一些重要的留下来,选择不重要的丢弃。
池化只改变 H、W,不改变 channel
原文特别强调:H 和 W 会变,但 channel 64 不会变。池化只会改变长和宽,我的特征图个数不会变。它只能做缩减,不能改特征图的个数。
因此,池化层的限制是:
- 可以改变 H、W。
- 不能改变 channel。
- 不能改变特征图个数。
max pooling 最大池化
max pooling 即最大池化,原文口语中也称“麦普利”“map pooling”等。它的做法是:在原始得到的特征基础上进行筛选。
以某一个特征图为例,例如 4×4×1。做 max pooling 时,先选择不同区域,这和卷积的第一步做法一样,也是去选择不同区域。如果指定参数为 2×2 区域,那么一共有四个区域。每个区域中选谁?max pooling 选大的,把每个位置当中最大的值拿出来。
原文强调:这里没有任何矩阵计算,只是做一个筛选而已,选择最大的值。
为什么选择最大值?原文解释:
- 神经网络在计算过程中,如果得到一个大的值,代表这个结果比较重要。
- 权重参数在不断改变,一旦通过权重参数计算完之后,特征值比较大,相当于整个网络认为它是比较重要的。
- max pooling 只选大的,相当于只挑那些重要的特征。
在右边动图中,max pooling 一步一步滑动窗口,找每个窗口的最大值,把每个窗口最大值拿出来即可。这样原来的 4×4 就变成了 2×2。
average pooling 平均池化及现状
除了 max pooling,还有一个 average pooling,即平均池化。
平均池化的做法仍然简单:先选择不同区域,然后在区域中取平均。例如区域中的值为 1、1、5、6,则计算:
1 + 1 + 5 + 6 除以 4
这就是第一个位置的值。第二个位置值算平均,第三个、第四算平均,依次进行。
但原文指出:average pooling 以前见过,现在很少见了。原因在于神经网络相当于一个优胜劣汰的感觉,它只要最好的特征就可以了。
原文中的关键反问是:
“已经有一个最好的特征了,你为什么还要平均的把我这个特征给给他拉下来?”
原文进一步解释:就是因为有些特征不好,凭什么还要把这些不好的特征考虑进去。所以经过很多学者的实验,发现这样一件事:max pooling 基本上在所有问题当中,表现效果都要比 average pooling 这个方法好得多。因此现阶段大家再看池化时,基本上全是 max pooling 来去做。
池化层的关键特点
- 不涉及任何矩阵计算。
- 不设置 W、B。
- 只是筛选、压缩、过滤。
- 操作相对简单。
- 只改变 H、W,不改变 channel 或特征图个数。
- 压缩是有选择性的,不是随便丢弃。
- max pooling 取区域最大值;average pooling 取区域平均值,但当前少用。
- max pooling 的逻辑符合神经网络“优胜劣汰、只要最好特征”的倾向。
方法与步骤
- 输入:卷积层输出的特征图,例如
24×24×64,或者其中某一个4×4×1的特征图。 - 选择池化区域:例如指定
2×2区域,类似卷积第一步选择不同区域。 - 对每个区域执行池化操作:
- max pooling:取该区域中的最大值。
- average pooling:取该区域中的平均值。
- 按滑动窗口移动,重复选择区域并取出结果。
- 输出压缩后的特征图:
- 局部例子:
4×4→2×2。 - 整体例子:
24×24×64→12×12×64(原文口误需注意)。
- 全过程不涉及矩阵计算,也没有 W、B 参数。
案例与数据
| 项目 | 原文信息 |
|---|---|
| 卷积可重复次数 | 一次、两次、三次,甚至 100 次 |
| 假设特征图 | 24×24×64,channel 为 64 |
| 最后一次卷积得到的特征图数 | 64 个特征图 |
| 池化后特征图 | 12×12×64(原文口语“11 2乘2乘64”,按 H/W 各减半推算应为 12×12×64) |
| H 变化 | 变成原来的 1/2 |
| W 变化 | 变成原来的 1/2 |
| 体积/特征值个数变化 | 变成原来的 1/4 |
| channel 变化 | 64 不变 |
| 局部示例 | 4×4×1 特征图 |
| 池化窗口 | 2×2 |
| 窗口数量 | 4 个 |
| max pooling 输出 | 2×2 |
| average pooling 计算例 | 1 + 1 + 5 + 6 除以 4 |
| 当前主流 | 现阶段基本上全用 max pooling |
对比:max pooling 与 average pooling
| 维度 | max pooling | average pooling |
|---|---|---|
| 中文名 | 最大池化 | 平均池化 |
| 操作 | 每个区域取最大值 | 每个区域取平均值 |
| 示例 | 在 2×2 区域中选最大 | 1 + 1 + 5 + 6 除以 4 |
| 选择逻辑 | 只挑大的,相当于只挑重要特征 | 把区域内特征平均,可能把不好特征也考虑进去 |
| 原文依据 | 大值代表网络认为重要;符合优胜劣汰 | 原文反问:已经有最好特征,为什么还要平均拉下来 |
| 现状 | 现阶段基本全用 max pooling;几乎所有问题表现更好 | 现在很少见 |
| 计算特点 | 无矩阵计算,只是筛选 | 有平均计算,但原文强调池化整体不涉及矩阵计算 |
限制与待确认问题
- 原文“得到一个11 2乘2乘64”疑似口误,结合 H、W 各变为原来的 1/2,应为
12×12×64。 - 原文没有展开池化层的步长 stride、padding、反向传播、梯度等细节。
- 原文没有给出“很多学者实验”的具体学者、论文、数据集或指标。
- 原文没有说明 average pooling 在哪些特定任务或条件下仍可能被使用,只说现在很少见、max pooling 更好。
- 原文没有完整展开卷积层的计算过程,只说明之前已经解释过。
- 原文提到“不要什么 H224、W224”,但未进一步解释其具体含义。
- 原文强调池化不能改变 channel/特征图个数,但没有讨论其他改变通道数的方式。
- 原文对“压缩”的描述是选择性保留重要特征、丢弃不重要特征,但未给出选择标准之外的实现细节。
总结
池化层是卷积神经网络中跟在卷积层之后的重要压缩层。卷积层尽可能多地提取特征,但特征不一定都重要;池化层通过筛选和压缩,选择性保留重要特征、丢弃不重要特征。
它只改变 H 和 W,不改变 channel,也不改变特征图个数,并且不涉及矩阵计算,不设置 W、B。max pooling 通过取区域最大值来挑选重要特征,符合神经网络优胜劣汰、只要最好特征的逻辑;average pooling 取区域平均,但因为可能把不好特征考虑进来,现阶段很少见。
原文给出的典型尺寸变化是 24×24×64 → 12×12×64,H、W 各减半,体积/特征值个数变为原来的 1/4;局部例子是 4×4 → 2×2。最终,现阶段池化基本全用 max pooling。