池化层的作用
- 降采样
- 减少参数量(进而降维、去除冗余、减少计算量等等)
- 扩大感受野
- 具有一定的尺度、旋转不变性
从新的角度看池化层
池化可以看成是对滑动窗口内的激活值(activation)线性加权。。具体的数学形式如下:
设F为池化函数,I为输入的特征图(FeatureMap), O为池化后的输出,考虑单通道情况下,
I
x
,
y
,
O
x
,
y
I_{x,y},O_{x,y}
Ix,y,Ox,y分别表示输入和输出在坐标(x,y)处的激活值,
Ω
\Omega
Ω为池化窗口的索引集合,例如池化范围是
2
×
2
2\times2
2×2,则
Ω
=
{
0
,
1
,
2
}
\Omega=\{0,1,2\}
Ω={0,1,2}。所有的池化方式可看作:
O
x
′
,
y
′
=
∑
δ
x
,
δ
y
∈
Ω
F
(
I
)
x
+
δ
x
,
y
+
δ
y
I
x
+
δ
x
,
y
+
δ
y
∑
δ
x
,
δ
y
∈
Ω
F
x
+
δ
x
,
y
+
δ
y
O_{x',y'}=\frac{\sum_{\delta x,\delta y \in\Omega}F(I)_{x+\delta x,y+\delta y} I_{x+\delta x,y+\delta y}}{\sum_{\delta x,\delta y \in\Omega}F_{x+\delta x,y+\delta y} }
Ox′,y′=∑δx,δy∈ΩFx+δx,y+δy∑δx,δy∈ΩF(I)x+δx,y+δyIx+δx,y+δy
常用的池化层及缺点
average pooling —— F ( I ) = 1 F(I)=1 F(I)=1.表示窗口内的所有激活值权值相等。虽然综合考虑了所有值,但会模糊重要的特征。研究表明average pooling 效果通常不如 max pooling.
max pooling —— F ( I ) = lim β → inf e x p ( β I ) F(I)=\lim_{\beta\rightarrow\inf}exp(\beta I) F(I)=limβ→infexp(βI). maxpooling的前提假设是越重要的特征激活值越大。很多时候这种情况并不能被满足。
stride convolution —— 跨步卷积通常步长大于等于2,可以等效成两步:第一步使用步长为1的卷积,第二步采样,将坐标是步长整数倍的保留,非整数倍的抛弃,即可以写成这种形式: F ( I ) x , y = I n d i c a t o r ( x a n d y a r e b o t h m u l t i p l e o f s t r i d e ) F(I)_{x,y}=Indicator(x\;and\;y\;are\;both\;multiple\;of\;stride) F(I)x,y=Indicator(xandyarebothmultipleofstride)。显然,这种抛弃固定位置的方法可能会丢失重要的特征.
Detaile-preserving pooling —— 前提假设是输入的细节处往往蕴含着重要的特征。于是精心设计一个F(I),使得输入的细节得以保留。缺点是有太强的先验知识,不具备普适性。
自适应池化
Local Importance-based Pooling —— 核心思想是将F(I)加入网络训练中。看图:
图片一目了然。exp函数是为了防止负数。乘法代表线性加权,除法是为了权值之和为1.
文章来源
LIP: Local Importance-based Pooling