我正在学习如何使用卷积神经网络,并继续为此编写自己的框架。 我陷入了必须通过网络反向传播误差(增量)并计算梯度的部分。我知道 CNN 中的滤波器是 3D 的,所以我们有一些滤波器的宽度、高度和深度。 前馈没问题。让我们看一下前馈步骤中某层输出的计算公式:
层l中滤波器的深度应与上一层l-1的输出z的输出 channel 数(深度)相同 为了进行卷积。所以在这里,在这个公式中,我们将前一层的输出和当前层的权重进行卷积,这是有效的,因为第三个坐标(深度)在这两者中是相等的。现在,让我们检查一下误差反向传播的公式:
在这个例子中,我们有 delta 和权重数组 w 的卷积,两者都来自层 l+1。现在这让我感到困惑,因为一般来说它们的第三个坐标(深度)并不总是相等。考虑 VGGNet 架构,让我们看一下滤波器数量变化的三个连续层:
...
CONV3-128:[112x112x128]内存:112*112*128=1.6M 权重:(3*3*128)*128 = 147,456
POOL2:[56x56x128]内存:56*56*128=400K 权重:0
CONV3-256:[56x56x256]内存:56*56*256=800K 权重:(3*3*128)*256 = 294,912
...
滤波器的数量从 128 个增加到 256 个(在 CONV3-256 层中)后,它具有上述激活维度(和误差增量)和权重。然而,由于滤波器的深度(在本例中为 128)与其增量的第三维(在本例中为 256)不同,我如何执行这两个数组的卷积?非常感谢任何提供帮助的人。我觉得这很令人困惑,而且我在网上没有找到这方面的太多帮助。它大多没有得到很好的解释或被认为是“已知的”。
最佳答案
你是对的,增量和权重的深度不相等。但滤波器的数量等于 Delta 的深度。 我的意思是你可以有一个大小为 (5x5x2) 的过滤器和大小为 (20x20x4) 的增量,但这里的问题是你确实有四个过滤器。 您可以通过构建一个小型 CNN 来检查这一点,您将看到除非此条件为真,否则前向传递将无效。
关于machine-learning - CNN 中的反向传播(通过卷积层)和梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588047/