Pool层及其公式推导

在CNN网络中卷积池之后会跟上一个池化层,池化层的作用是提取局部均值与最大值,根据计算出来的值不一样就分为均值池化层与最大值池化层,一般常见的多为最大值池化层

a l 1 = σ ( z l 1 )

前向传播

maxpool

前向传播会记录每次pool的核移动stride后所在区域里的最大值,和最大值所在坐标
这里以pool的核的大小为3x3,stride=1为例,则pool后的值的输出和最大值所在坐标如下图:
设pool层输出为 a l

a i j l = m a x ( a m n l 1 ) , i m , n i + 2 m , n a i j l 1 p o o l , a 00

这里写图片描述

avg pool

这里pool核的大小为3x3,stride=1
这里写图片描述

反向传播

maxpool

由于pool层没有参数,所以没必要求梯度,主要将相关的梯度传下即可:

δ k , v l 1 = C z k , v l 1 = i j i = 3 , j = 3 C a i j l a i j l a k , v l 1 a k , v l 1 z k , v l 1

而由于

a i j l = m a x ( a m n l 1 ) = a i m a x , j m a x l 1 , i m a x , j m a x a i j l p o o l

所以:

δ k , v l 1 = i j i = 3 , j = 3 { [ ( k = i m a x , v = j m a x ) ? ( C a i j l a i j l z i m a x , j m a x l 1 ) : 0 ] a k , v l 1 z k , v l 1 } = i j i = 3 , j = 3 { ( k = i m a x , v = j m a x ) ? C a i j l : 0 ] σ ( z k , v l 1 ) }

为方便书写,这里直接用了三目运算符了:D

为了统一敏感度图公式,如果设 a i , j l = z i , j l = a i m a x , j m a x l
那么池化层的敏感度图 δ l = C z l = C a l
设一直pool层敏感度图如下:
这里写图片描述

那么pool上一层敏感度图为:
这里写图片描述
其中:

p 10 = ( δ 00 + δ 01 + δ 10 + δ 20 + δ 21 ) σ ( z 10 l 1 ) p 02 = δ 02 + δ 03 σ ( z 02 l 1 ) p 22 = δ 11 + δ 12 + δ 13 + δ 22 + δ 23 + δ 31 + δ 32 + δ 33 σ ( z 22 l 1 ) p 30 = δ 30 σ ( z 30 l 1 )

avg pool

同样设
a i , j l = z i , j l = a i m a x , j m a x l
敏感度图: δ l = C z l = C a l

设当前pool层敏感度图为:
这里写图片描述

所以上一层的敏感度图:

δ k , v l 1 = i j i = 2 , j = 2 C a i j l a i j l a k , v l 1 a k , v l 1 z k , v l 1

即:
δ 00 l 1 = 1 9 δ 00 l σ ( z 00 l 1 ) δ 01 l 1 = 1 9 δ 00 l σ ( z 01 l 1 ) + 1 9 δ 01 σ ( z 01 l 1 ) . . . δ 33 l 1 = 1 9 δ 33 l σ ( z 33 l 1 )

自己推到过,才发现网上所述略有误差

猜你喜欢

转载自blog.csdn.net/qq_29381089/article/details/80688255