也许我们写下函数的矩阵格式后,更容易理解池化层的导数max{x}=xW
,其中x
是张量。让我们看一个具有四个不同值的示例,x = [x1, x2, x3, x4]
并且x1
是最大值,例如max{x} = x1
。现在,max{x}
可以写成矩阵乘法,这样xW or Wx'
, where W = [I(x1>x2)*I(x1>x3)*I(x1>x4), I(x2>x1)*I(x2>x3)*I(x2>x4), I(x3>x1)*I(x3>x2)*I(x3>x4), I(x4>x1)*I(x4>x2)*I(x4>x3)]' = [1, 0, 0, 0]'
, whereI(.)
是比较两个值的识别函数。通常,反向传播算法需要两个导数 ---dWx/dx =W' (W transpose)
和dWx/dW = x'
--- 来分别更新前一层和当前层的权重或偏差。但是,在最大池化的情况下,不需要更新W
. 因为我们可以并且已经写下了最大池化层函数的封闭形式,即W=[I(x1>x2)*I(x1>x3)*I(x1>x4), I(x2>x1)*I(x2>x3)*I(x2>x4), ...]'
. 现在要dWx/dx
知道,我们有dWx/dx =W' = [1, 0, 0, 0]
,W'
然后可以作为一个成员适当地插入到派生链中。
通常,max{x}
可以写成线性函数,这样Wx (or xW)
, 其中W
是一个矩阵,其条目是一组识别函数的生成,例如I(x1>x2)*I(x1>x3)*I(x1>x4)
。的一个性质W
是,在一列中,只有一个条目是1,其他的都是0。由于这个线性函数的权重已经确定,不需要再使用梯度下降来更新它了。至于max{x}
使用链式法则更新前几层的权重和偏差的情况,我们知道dWx/dx =W'
。