卷积神经网络中的反向传播

Shu*_*pta 5 machine-learning backpropagation neural-network conv-neural-network

考虑具有以下架构的卷积神经网络:

CNN架构

这里 C_i 指的是 第 i^th 卷积层P_i 指的是 第 i^th 平均池化层。每一层都会对应一个输出。让delta^P_j参考层输出中的错误P_j (同样对于 在此处输入图片说明)。

增量^P_2 可以使用正常的反向传播方程轻松计算,因为它完全连接到 softmax 层。 增量^C_2 可以简单地通过上采样计算 增量^P_2 适当地(并乘以输出的梯度 C_2) 因为我们使用的是平均池化。

我们如何从输出中传播错误 C_2 到输出 P_1? 换句话说,我们如何找到增量^P_1增量^C_2?

斯坦福的深度学习教程使用以下等式来做到这一点:

UFLDL方程

但是我在使用这个方程时面临以下问题:

  1. 我的 W_k^l 有大小 (2x2) 和 delta_k^l 有大小(6x6),(我使用有效卷积,输出 P_1 具有大小 (13x13) 和输出 P_2有大小 (6x6))。在我的情况下,这种内部矩阵乘法甚至没有意义。

  2. 等式假设两层中的通道数相同。这对我来说又不是真的。输出P_1 有 64 个通道,同时输出 C_2 有96个频道。

我在这里做错了什么?有人能解释一下如何通过卷积层传播错误吗?

简单的 MATLAB 示例将不胜感激。

Ale*_*x I 0

我认为你的层数和重量与你想象的有很大不同。如果“P_1 的输出有 64 个通道,而 C_2 的输出有 96 个通道”并且您的卷积是 2x2,那么 W 不是 2x2,而是 96x64x2x2(等级 4 张量;维度/索引顺序的约定可能会有所不同,但你明白了)。“内矩阵乘法”实际上是张量卷积。接下来,您将把 96x64x2x2 的 W 与(我假设)64x7x7 的输入进行卷积,以产生 96x6x6 的输出(这假设“有效”卷积并且没有填充,这就是为什么在 7x7 上滑动 2x2 会产生 6x6)。向后看,您可以将W 的转置与输出进行卷积,以生成与输入具有相同维度的内容。

平均池化只会让事情变得更加复杂。首先尝试在没有池化的情况下理解这一点,或者将池化模型理解为具有固定(相等)权重的卷积。