1 卷积层
1.1 前向传播
以此卷积核为例:
\begin{bmatrix}1&0&1\\0&1&0\\1&0&1\\\end{bmatrix}

1.2 反向传播
以计算dW为例:

图中使用的padding为0,stride为2。只关注w1的计算过程,w1分别与a1、a3、a11、a13进行过相乘计算,该层输出Z可以看做Z=WA+b,因此\frac{dZ}{dW}=A,因此\frac{dL}{dw1}=\frac{dL}{dZ}\frac{dZ}{dw1},所以有了图中右边第一条式子。那么权重更新可以写成:w1 = w1 - \frac{dL}{dw1}
同理计算dA,A为该层输入,也是上一层输出。
2 池化层
2.1 前向传播
下图分别是最大池化和均值池化:


2.2 反向传播
池化层没有需要学习的参数,因此它只传递梯度。
最大池化(Max Pooling) ,其反向传播的关键在于利用正向传播时创建的mask。这个mask记录了每个池化窗口中最大值的位置。在正向传播中,最大池化操作只保留每个窗口中的最大值,其他值被忽略。
在反向传播时,我们使用这个mask来指导梯度的传递。具体来说,我们只将梯度放置在mask中标记为1的位置,即最大值的位置。由于最大池化操作会减小特征图的尺寸,因此我们需要将梯度“扩展”回原始尺寸,以便与输入层的维度相匹配。
这个过程可以理解为:我们首先将梯度与mask相乘,这样只有最大值位置的梯度被保留,其他位置的梯度被置为0。然后,我们将这个梯度“扩展”回原始尺寸,即将每个位置的梯度值复制到对应的池化窗口中,从而得到与输入层维度相匹配的梯度。
总的来说,最大池化层的反向传播过程可以概括为:使用mask来指导梯度的传递,并将梯度“扩展”回原始尺寸,以便与输入层的维度相匹配。
均值池化(Average Pooling) 是另一种常见的池化操作,与最大池化不同,均值池化计算每个池化窗口内元素的平均值,而不是最大值。在正向传播中,均值池化将每个池化窗口内的像素值相加,然后除以窗口内像素的数量,得到一个平均值,并将这个平均值作为输出。
在反向传播过程中,均值池化的处理相对简单。由于均值池化计算的是平均值,因此每个池化窗口内的所有像素对输出值的贡献是相等的。这意味着,在反向传播时,我们可以将梯度均匀地分配给池化窗口内的所有像素。
具体来说,对于均值池化层的反向传播,我们首先将输入层的梯度与池化窗口的大小相乘,得到一个与原始输入层维度相匹配的梯度。这是因为均值池化操作将每个池化窗口内的像素值相加,然后除以窗口大小,所以在反向传播时,我们需要将梯度乘以窗口大小来恢复原始的梯度值。
然后,我们将这个梯度均匀地分配给池化窗口内的所有像素。由于均值池化操作不依赖于输入的具体值,而是依赖于窗口内所有值的平均值,因此我们可以将梯度均匀地分配给窗口内的每个像素,而不需要像最大池化那样使用mask。
总的来说,均值池化层的反向传播过程可以概括为:将输入层的梯度与池化窗口的大小相乘,得到一个与原始输入层维度相匹配的梯度,然后将这个梯度均匀地分配给池化窗口内的所有像素。