提问人:Sshawarma 提问时间:10/22/2023 最后编辑:Sshawarma 更新时间:11/12/2023 访问量:51
CNN反向传播中的Mistmatched核和delta核形状
Mistmatched kernel and delta kernel shapes in backpropogation of a CNN
问:
背景:
我按照这两个视频中的解释在CNN中进行反向传播。
https://www.youtube.com/watch?v=Pn7RK7tofPg&t=703 https://www.youtube.com/watch?v=Lakz2MoHy6o&t=1455s
据我了解,单个内核的梯度将是当前层的输入,该层与从下一层的误差反向传播的增量进行卷积。
delta_channel = conv(Xm, ERRORn)
Knm' = Knm - learningRate * delta_channnel
其中
n 是滤波器索引,m 是滤波器的通道/深度索引
,K 是内核,
Xm 是相应深度
的滤波器的输入 ERROR 是从滤波器
输出反向传播的误差
问题:
但是,这让我感到困惑,因为形状不会对齐。
假设变量的形状如下:
K 为
3x3x32,X 为 128x128x3,ERROR
为 128x128x32(K 中滤波器的每个输出一个,零填充)
现在这意味着根据反向传播方程,delta_channel将是 128x128
无法从 3x3 内核中减去增量,因为它们是不同的形状。我的误会在哪里?
答:
编辑:真正的原因是在反向传播过程中必须使用“完整”和“有效”卷积。我错误地认为“充分”与“相同”相同。
在此方案中,有三种类型的反向传播需要记住。
I:输入
K:内核
- 有效卷积
- 滤波器在输入范围内滑动。没有零填充。
- 输出尺寸为 (I-K+1) x (I-K+1)。
- 相同的卷积
- 滑动滤波器,使输出大小等于输入大小。
- 输出的尺寸为 I x I。
- 全卷积
- 只要滤波器的一部分与输入重叠,滤波器就会滑动。
- 输出尺寸为 (I+K-1) x (I+K-1)。
现在重要的部分是,在输入的反向传播中使用完整的卷积,并且对内核有效,因为它将错误与导致错误的输入/过滤器部分对齐。
在前向传递期间,可以使用相同或有效的卷积。
让我们看一下示例尺寸,看看为什么为了简洁起见,我们只看方形滤波器的一侧:
对于这些示例,我们假设在前向传递期间使用了有效的卷积。
这意味着输出误差为形状 (I-K+1)。
内核的有效卷积:corr(input, error, valid)
- out_dim = I - (I - K + 1) + 1
- out_dim = 我 - 我 + K - 1 + 1
- out_dim = K
输入梯度的全卷积:sum(conv(error, kernel))
- out_dim = (I-K+1) + (K) - 1
- out_dim = I - K + K + 1 - 1
- out_dim = 我
棒!梯度的所有维度都对齐,以便在反向传播期间应用。
奖励:对于那些希望如何在前向传递上使用“相同”卷积来做到这一点的人。确保在向后传递 kernel-1 时填充全连接层的错误,以便维度对齐以进行内核更新。后续层将自动处理此问题,因为它们对旋转的内核使用完全卷积(Ik Ik,我应该正确使用相关性和卷积......
评论