我如何计算偏导数Xx?

人工智能 深度学习 卷积神经网络 反向传播
2021-11-12 22:03:35

我正在尝试使用 python Numpy实现CNN 。
我搜索了很多,但我发现的只是一个带有一个卷积通道的过滤器。

假设我们有一个X作为具有这种形状的图像:(N_Height, N_Width, N_Channel) = (5,5,3)

假设我有16这种形状的过滤器(F_Height, F_Width, N_Channel) = (3,3,3)stride=1padding=0

前锋

conv2d 之后的输出形状将是

(
math.floor((N_Height - F_Height + 2*padding)/stride + 1 )),
math.floor((N_Width- F_Width + 2*padding)/stride + 1 )),
filter_count
)

所以这一层的输出将是一个具有这种形状的数组:(Height, Width, Channel) = (3, 3, 16)

反向传播

认为dL/dh是我的层在这种形状的反向传播中的输入:(3,3,16)

现在我必须找到dL/dwdL/dxdL/dw更新我的过滤器参数和dL/dx将其作为输入传递给前一层,作为输入X的损失。

从这个答案中关于过滤器权重的错误我发现了如何计算dL/dw.

我在BackPropagation中遇到的问题是我不知道如何计算dL/dx具有这种形状:(5,5,3)并将其传递到上一层。

我在 Medium 和其他网站上阅读了很多文章,但我不知道如何计算它:

反向传播在 CNN 中的工作原理
互联网上对卷积神经网络的最佳解释!
卷积神经网络中的反向
传播 如何将误差传播回 CNN 中的前一层?

提前致谢 :)

1个回答

虽然这可能不是您要寻找的答案,但我希望这个解释能帮助您理解将反向传播应用于 CNN。从根本上说,卷积层与密集层没有什么不同,但是有一些限制。关键是权重共享,它允许 CNN 比常规密集层更有效(以及由于局部性而变得稀疏)。想象一下,我们正在将 4x4 图像转换为 2x2 图像。由于我们输入一个 16 向量并输出一个 4 向量,因此我们需要一个 4x16 的权重矩阵:

在此处输入图像描述

这有 64 个参数。在卷积层中,我们可以通过在图像上卷积一个 3x3 内核来实现这一点:

K=[k1,1k1,2k1,3k2,1k2,2k2,3k3,1k3,2k3,3]

这个卷积相当于乘以权重矩阵:

在此处输入图像描述

如您所见,这只需要 9 个参数,并且可以应用反向传播来更新这些参数。

图片来源:https ://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1