卷积BP 计算中的核翻转
author:张一极
date:2025年05月05日18:00:45
正文
先考虑前向传播
考虑二维输入特征图 和卷积核 ,输出特征图 由如下卷积操作定义:
假设没有 padding,stride 为 。
损失函数与目标
定义一个损失函数 ,我们的目标是计算关于输入 和卷积核 的梯度,其中输入 的梯度用来计算上一层梯度(输入 X就是上一层的输出 Y,这一层的实际上是上一层的):
记 为从上层网络反传下来的梯度。
对卷积核 的梯度
这实际上就是用 在 X 上滑动,只不过:
- 滑动的是
- 累加的是每个窗口上
- 输出是大小为 k x k 的矩阵(即 K 的梯度)
即:
其中 表示 有效卷积(valid convolution),即对 进行卷积操作以求导。
对输入 的梯度
每个 影响多个 ,即所有的 i 和 j 都满足:
所以:
可以理解为将 与卷积核 做 full convolution,并且需要对 做旋转(翻转 180°)(关于翻转,见附录 1):
其中 。
总结
对卷积核的梯度:,这里的卷积为无翻转卷积。
对输入(上层输出)的梯度:,即 与 旋转后做全卷积(包含卷积翻转)。
附录 1:关于翻转的理解
我们希望推导输入 的梯度:
其中:
是输出特征图对损失的梯度。
是卷积核的参数。
是卷积核大小。
回忆标准的二维卷积定义(无翻转):
也就是 和 做
而在反向传播中,我们看到:
在这个求和过程中,可以看成从最后一个元素开始,往上往左的滑动窗口,此时等同于从第一个元素开始同于往下往右滑动窗口,比如:与计算得到最后的梯度,与计算得到最后的梯度,以此类推,如果是正向滑动,那就是与计算得到最后的梯度,所以要翻转卷积核,这个式子实际上相当于:
其中 表示 有效卷积(valid convolution), 是 翻转 180° 后的版本,即:
也就是说,虽然看上去我们在用 做索引,但实际上这和用翻转的 卷积 是等价的。
在前向传播中:我们是将 滑动到输入 上做点积。
在反向传播中:我们希望知道每个输入 对损失 的影响是多少,所以我们将误差项 卷积上翻转的 。
因此,我们可以将输入梯度的计算写成卷积的形式:
其中:
是来自上一层的梯度。
是卷积核 翻转 180°。
表示标准二维卷积。
以上