池化层的改进

池化层的作用

  • 降采样
  • 减少参数量(进而降维、去除冗余、减少计算量等等)
  • 扩大感受野
  • 具有一定的尺度、旋转不变性

从新的角度看池化层

池化可以看成是对滑动窗口内的激活值(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)加入网络训练中。看图:
池化层的改进_第1张图片
图片一目了然。exp函数是为了防止负数。乘法代表线性加权,除法是为了权值之和为1.

文章来源

LIP: Local Importance-based Pooling

你可能感兴趣的:(深度学习基础,深度学习,卷积神经网络)