CNN反向传播中核与Delta核形状不匹配问题咨询
CNN反向传播梯度计算的形状匹配困惑
背景
我通过两个视频学习CNN反向传播,根据理解总结出单个核的梯度计算方式:
单个核的梯度为当前层输入与下一层反向传播的delta进行卷积计算:
delta_channel = conv(Xm, ERRORn) Knm' = Knm - learningRate * delta_channel
变量说明:
- n:滤波器索引
- m:滤波器的通道/深度索引
- K:核
- Xm:对应深度的滤波器输入
- ERROR:从滤波器输出反向传播的误差
问题
我对上述计算存在困惑,因为形状无法匹配。假设变量形状如下:
- K:3x3x32
- X:128x128x3
- ERROR:128x128x32(对K中每个滤波器输出进行零填充后的结果)
按照公式计算,delta_channel的形状应为128x128,无法与3x3的核进行减法运算,请问我的误解点在哪里?
解答
你的核心误解出在卷积操作的类型和尺寸计算逻辑上,同时对核的完整形状定义有误,具体纠正如下:
核的完整形状补全
你给出的核形状3x3x32是不完整的,CNN中核的标准形状应为高度x宽度x输入通道数x输出通道数。对应你的输入X是128x128x3(3个输入通道),正确的核形状应为3x3x3x32——32个输出通道,每个输出通道对应一个3x3x3的核,用来和输入的3个通道做卷积运算。梯度计算的卷积类型错误
计算核的梯度时,不能用普通的正向卷积(会生成大尺寸特征图),而是要用互相关(Cross-Correlation)操作,或者等价的“将误差特征图作为核,对输入特征图做无padding、步长1的卷积”:
- 对于第n个输出通道、第m个输入通道对应的核
Knm(3x3尺寸),其梯度需要用输入的第m通道Xm(128x128)和反向传回的第n通道误差ERRORn(128x128)做互相关运算。 - 互相关的逻辑是:取
ERRORn中每个3x3窗口,与Xm对应位置的3x3窗口做元素乘积求和,最终得到的结果是3x3的梯度矩阵,刚好和核Knm的形状匹配。
简单来说,你之前错误地使用了会生成大尺寸结果的正向卷积,而正确的核梯度计算是通过互相关操作得到与核尺寸一致的梯度,这样就能完成后续的参数更新减法运算。
内容的提问来源于stack exchange,提问作者Sshawarma
相关产品推荐
相关产品推荐

