如何在卷积神经网络 (CNN) 的反向传播中传播误差增量?

数据挖掘 神经网络 深度学习 数学
2021-10-06 21:14:56

我的 CNN 具有以下结构:

  • 输出神经元:10
  • 输入矩阵(I):28x28
  • 卷积层(C):3个特征图,5x5内核(输出尺寸为3x24x24)
  • 最大池化层(MP):大小 2x2(输出尺寸为 3x12x12)
  • 全连接层(FC):432x10(3*12*12=432 max pooling layer flattened and vectorized)

进行前向传递后,我将输出层中的误差增量计算为:

δL=(aLy)σ(zL)(1)

存在aL预测值和zL权重的点积,加上偏差。

我计算下一层的误差增量:

δl=((wl+1)Tδl+1)σ(zl)(2)

权重的误差导数为

Cwjkl=akl1δjl(3)

我能够更新权重(和偏差)FC没有问题。此时,误差增量δ是 10x1。

用于计算误差增量MP,我找到的点积FC以及误差增量本身,如等式 2 中所定义。这给了我一个 432x1 的误差增量。因为这一层没有参数,还有扁平化和矢量化,我只需要按照相反的过程将它重新整形为3x12x12,即错误在MP.

找到错误增量C,我在以 3x24x24 增量结尾的最大池的反向过程之后对错误增量进行上采样。找到这些矩阵中的每一个与特征图的每个的误差增量σC

但是现在,如果内核是 5x5 而我是 28x28,我应该如何更新内核?有图层的错误增量,但我不知道如何用它更新权重。也适用于偏差,因为它是整个功能集的单个值。I

2个回答

所以你是正确的,反向传播的原理是做相反的操作。卷积层也是如此。

卷积层的前向传递可以表示为

xi,jl=mnwm,nloi+m,j+nl1+bi,jl

其中是您将在输入图像上传递的卷积核的形状,是该核的相关权重。是输入特征,是由它们各自的层表示的结果值。mnwoxl1l

对于反向传播,我们需要计算xw

xi,jlwm,nl=wm,nl(mnwm,nloi+m,j+nl1+bi,jl)

时才非零然后我们得到m=mn=n

xi,jlwm,nl=oi+m,j+nl1

然后我们可以将此结果放入我们计算的整体误差项中。

“为了找到 C 的误差增量,我在最大池化的反向过程之后对误差增量进行上采样,以 3x24x24 增量结束。找到每个矩阵与特征图的每个 σ' 的 hadamard 积给了我C 的误差增量。”

你为什么要进行上采样,我只是不明白。在运行 3 个 5x5 的内核后,您的初始输入大小为 28x28,您得到 3x24x24,之后,您使用步幅 2 进行最大池化,因此您的输出为 3x12x12,现在您将其展平并输出到输出层中的 10 个神经元,那又如何你的权重矩阵在这里你有两个权重张量 1)卷积部分给你一个 3x5x5 权重张量,FC 给你 10x432,池化层没有权重,所以在你的梯度计算中跳过这部分,你的雅可比形状应该匹配形状卷积部分即3x5x5。在实现时将每个内核视为一层神经网络,然后并行计算所有三个。

有关详细信息,请参阅本教程 - https://www.youtube.com/watch?v=l16RxAmP9QE&list=PLdxQ7SoCLQAMeMPpRvqXJjBSmKey0SdlH