深度学习笔记(25) 池化层
1. max pooling
除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)
执行最大池化的树池是一个2×2矩阵
执行过程非常简单
把4×4的输入拆分成不同的区域,把这个区域用不同颜色来标记
对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值
最大池化的超参数:一个2×2矩阵,即
f
f
f = 2,步幅是2,即
s
s
s = 2
最大池化功能的直观理解:
可以把这个4×4区域看作是某些特征的集合
也就是神经网络中某一层的非激活值集合
数字大意味着可能探测到了某些特定的特征
左上象限具有的特征可能是一个垂直边缘,一只眼睛、或是CAP特征 1
显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器
然而,右上象限并不存在这个特征
最大化操作的功能:
只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里
所以最大化运算的实际作用:
如果在过滤器中提取到某个特征,那么保留其最大值
如果没有提取到这个特征,可能在右上象限中不存在这个特征
那么其中的最大值也还是很小,这就是最大池化的直观理解
其中一个有意思的特点:
它有一组超参数,但并没有参数需要学习
实际上,梯度下降没有什么可学的
一旦确定了
f
f
f 和
s
s
s,它就是一个固定运算,梯度下降无需改变任何值
如一个有若干个超级参数,输入是一个 5×5的矩阵
采用最大池化法,它的过滤器参数为3×3,即
f
f
f = 3
步幅为1,
s
s
s = 1
输出矩阵是 3×3
之前的计算卷积层输出大小的公式同样适用于最大池化
即
(
n
+
2
p
−
f
)
/
s
+
1
(n+2p-f)/s+1
(n+2p−f)/s+1,这个公式也可以计算最大池化的输出大小
以上就是一个二维输入的最大池化的演示
如果输入是三维的,那么输出也是三维的
例如,输入是5×5×2,那么输出是3×3×2
计算最大池化的方法就是分别对每个通道执行刚刚的计算过程
一般来说,如果输入是 5×5×nc,输出就是 3×3×nc
nc个通道中每个通道都单独执行最大池化计算
2. mean pooling
另外还有一种类型的池化,平均池化(mean pooling),但它不太常用
这种运算顾名思义,选取的不是每个过滤器的最大值,而是平均值
紫色区域的平均值是3.75,后面依次是1.25、4和2
这个平均池化的超级参数
f
f
f = 2,
s
s
s = 2,也可选其它超级参数
目前来说,最大池化比平均池化更常用
但也有例外,就是深度很深的神经网络
可以用平均池化来分解规模为7×7×1000的网络的表示层
在整个空间内求平均值,得到1×1×1000
但在神经网络中,最大池化要比平均池化用得更多
3. pooling 超参
总结一下,池化的超级参数包括过滤器大小
f
f
f 和步幅
s
s
s
常用的参数值为
f
f
f = 2,
s
s
s = 2,应用频率非常高
其效果相当于高度和宽度缩减一半
也有使用
f
f
f = 3,
s
s
s = 2,的情况
至于其它超级参数就要看用的是最大池化还是平均池化了
也可以根据自己意愿增加表示padding的其他超级参数,虽然很少这么用
最大池化时,往往很少用到超参数padding
当然也有例外的情况,目前
p
p
p 最常用的值是0,即
p
p
p = 0
最大池化的输入就是 nH × nW × nc,假设没有padding
则输出
输入通道与输出通道个数相同,因为对每个通道都做了池化
需要注意的一点是,池化过程中没有需要学习的参数
执行反向传播时,反向传播没有参数适用于最大池化
只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的
最大池化只是计算神经网络某一层的静态属性
没有什么需要学习的,它只是一个静态属性
参考:
相关推荐:
深度学习笔记(24) 卷积层
深度学习笔记(23) 卷积维度
深度学习笔记(22) Padding
深度学习笔记(21) 边缘检测
深度学习笔记(20) 端到端学习
谢谢!
一个分布式系统中Consistency(一致性)、 Availability(可用性)和Partition tolerance(分区容错性)不可兼 ↩︎