卷积BP 计算中的核翻转

author:张一极

date:2025年05月05日18:00:45

正文

先考虑前向传播

考虑二维输入特征图 XRH×W 和卷积核 KRkH×kW,输出特征图 Y 由如下卷积操作定义:

Y(i,j)=m=0kH1n=0kW1X(i+m,j+n)K(m,n)

假设没有 padding,stride 为 1

损失函数与目标

定义一个损失函数 L(Y),我们的目标是计算关于输入 X 和卷积核 K 的梯度,其中输入 X的梯度用来计算上一层梯度(输入 X就是上一层的输出 Y,这一层的LX实际上是上一层的LY):

LX,LK

LY(i,j)=δ(i,j) 为从上层网络反传下来的梯度。

对卷积核 K 的梯度

Y(i,j)K(m,n)=X(i+m,j+n)
δ(i,j)=LY(i,j)
LK(m,n)=i,jLY(i,j)Y(i,j)K(m,n)=i,jδ(i,j)X(i+m,j+n)

这实际上就是用 δ 在 X 上滑动,只不过:

即:

LK=Xδ

其中 表示 有效卷积(valid convolution),即对 δ 进行卷积操作以求导。

对输入 X 的梯度

每个 X(i,j) 影响多个 Y(i,j),即所有的 i 和 j 都满足:

i+u=i,j+v=ji=iu,j=jv

所以:

LX(i,j)=u=0k1v=0k1δ(iu,jv)K(u,v)

 

可以理解为将 δ 与卷积核 Kfull convolution,并且需要对 K 做旋转(翻转 180°)(关于翻转,见附录 1)

LX=δKflip

其中 Kflip(u,v)=K(kH1u,kW1v)

总结

对卷积核的梯度:LK(m,n)=i,jδ(i,j)X(i+m,j+n),这里的卷积为无翻转卷积。 对输入(上层输出)的梯度:LX(i,j)=m,nδ(im,jn)K(m,n),即 δK 旋转后做全卷积(包含卷积翻转)。

 

 

 

附录 1:关于翻转的理解

我们希望推导输入 X(i,j) 的梯度:

LX(i,j)=u=0k1v=0k1δ(iu,jv)K(u,v)

其中: δ(i,j)=LY(i,j) 是输出特征图对损失的梯度。 K(u,v) 是卷积核的参数。 k×k 是卷积核大小。

回忆标准的二维卷积定义(无翻转):

Z(i,j)=u=0k1v=0k1A(i+u,j+v)B(u,v)

也就是 AB

cross-correlation

而在反向传播中,我们看到:

LX(i,j)=u,vδ(iu,jv)K(u,v)

在这个求和过程中,可以看成从最后一个元素开始,往上往左的滑动窗口,此时等同于从第一个元素开始同于往下往右滑动窗口,比如:δ(3,3)K(0,0)计算得到最后的梯度,δ(2,3)K(1,0)计算得到最后的梯度,以此类推,如果是正向滑动,那就是δ(3,3)K(3,3)计算得到最后的梯度,所以要翻转卷积核,这个式子实际上相当于:

LX=δK~

其中 表示 有效卷积(valid convolution)K~K 翻转 180° 后的版本,即:

K~(u,v)=K(k1u,k1v)

也就是说,虽然看上去我们在用 (iu,jv) 做索引,但实际上这和用翻转的 K 卷积 δ 是等价的。 在前向传播中:我们是将 K 滑动到输入 X 上做点积。 在反向传播中:我们希望知道每个输入 X(i,j) 对损失 L 的影响是多少,所以我们将误差项 δ 卷积上翻转的 K

因此,我们可以将输入梯度的计算写成卷积的形式:

LX=δK~

其中: δ 是来自上一层的梯度。 K~ 是卷积核 K 翻转 180°。 表示标准二维卷积。


以上