池化层的改进

从新的角度看池化层

池化可以看成是对滑动窗口内的**值(activation)线性加权,作用是降采样( downsampling)。具体的数学形式如下:
设F为池化函数,I为输入的特征图(FeatureMap), O为池化后的输出,考虑单通道情况下,Ix,y,Ox,yI_{x,y},O_{x,y}分别表示输入和输出在坐标(x,y)处的**值,Ω\Omega为池化窗口的索引集合,例如池化范围是2×22\times2,则Ω={0,1,2}\Omega=\{0,1,2\}。所有的池化方式可看作:
Ox,y=δx,δyΩF(I)x+δx,y+δyIx+δx,y+δyδx,δyΩFx+δx,y+δyO_{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} }

常用的池化层及缺点

average pooling —— F(I)=1F(I)=1.表示窗口内的所有**值权值相等。虽然综合考虑了所有值,但会模糊重要的特征。研究表明average pooling 效果通常不如 max pooling.

max pooling —— F(I)=limβinfexp(βI)F(I)=\lim_{\beta\rightarrow\inf}exp(\beta I). maxpooling的前提假设是越重要的特征**值越大。很多时候这种情况并不能被满足。

stride convolution —— 跨步卷积通常步长大于等于2,可以等效成两步:第一步使用步长为1的卷积,第二步采样,将坐标是步长整数倍的保留,非整数倍的抛弃,即可以写成这种形式:F(I)x,y=Indicator(x  and  y  are  both  multiple  of  stride)F(I)_{x,y}=Indicator(x\;and\;y\;are\;both\;multiple\;of\;stride)。显然,这种抛弃固定位置的方法可能会丢失重要的特征.

Detaile-preserving pooling —— 前提假设是输入的细节处往往蕴含着重要的特征。于是精心设计一个F(I),使得输入的细节得以保留。缺点是有太强的先验知识,不具备普适性。

自适应池化

Local Importance-based Pooling —— 核心思想是将F(I)加入网络训练中。看图:
池化层的改进
图片一目了然。exp函数是为了防止负数。乘法代表线性加权,除法是为了权值之和为1.

文章来源

LIP: Local Importance-based Pooling