池化层(pooling layer)

来源:Coursera吴恩达深度学习课程

除了卷积层,卷积网络也经常使用池化层(pooling layer)来缩减模型的大小(reduce the size of their representation),提高计算速度(speed up computation),同时提高所提取特征的鲁棒性(robust),下面来看一下。

上面是池化层的例子,假设输入是4×4矩阵,池化类型是最大池化(max pooling)。执行最大池化的树池是一个2×2矩阵。执行过程非常简单,把4×4的输入拆分成不同的区域(不同区域用不同颜色来标记)。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。例如,左上区域的最大值是9,右上区域的最大元素值是2,左下区域的最大值是6,右下区域的最大值是3。这就像是应用了一个规模为2的过滤器,因为选用的是2×2区域,步幅是2,这些就是最大池化的超参数,即f = 2,s = 2。

这是对最大池化功能的直观理解,把这个4×4区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,一只眼睛,或是大家害怕遇到的CAP特征。显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。然而,右上象限并不存在这个特征。最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解(intuition)。

必须承认,人们使用最大池化的主要原因是此方法在很多实验中效果都很好

其中一个有意思的特点就是,它有一组超参数,但并没有参数需要学习。在实际操作中,一旦确定f和s,就是一个固定运算,梯度下降无需改变任何值。先看一下最终输出结果:

这是一个新的例子,输入是5×5的矩阵,采用最大池化法,过滤器参数为3×3,即f = 3,步幅为1,s = 1,输出矩阵是3×3。之前讲的计算卷积层输出大小的公式同样适用于最大池化,可以用来计算最大池化的输出大小,即

此例具体的计算过程如下图:

以上是一个二维输入的演示,如果输入是三维的,那么输出也是三维的。

例如,输入是5×5×2,那么输出是3×3×2。计算最大池化的方法就是分别对每个通道执行刚刚的计算过程。如上图,第一个通道保持不变,第二个通道做同样的运算,画在下面。

另外还有一种类型的池化,平均池化(average pooling),但是并不常用,运算时选取的不是每个过滤器的最大值,而是平均值。

上图的例子,紫色区域的平均值是3.75,后面依次是1.25、4和2。这个平均池化的超级参数f  = 2,s = 2,当然也可以选择其它超级参数。目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000。

现在总结一下,如上图,池化的超级参数包括过滤器大小和步幅,常用的参数值为f  = 2,s = 2,应用频率非常高,其效果相当于高度和宽度缩减一半。也有使用f  = 3,s = 2的情况。至于其它超级参数就要看使用的是最大池化还是平均池化了。最大池化时,往往很少用到超参数padding,当然也有例外的情况。假设没有padding,最大池化的输入和输出分别为:

需要注意的一点是,池化过程中没有需要学习的参数。执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数(f, s),可能是手动设置的,也可能是通过交叉验证设置的。

现在,池化层的内容就讲完了,它只是计算神经网络某一层的静态属性(fixed function)

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值