我的 CNN 具有以下结构:
- 输出神经元:10
- 输入矩阵(I):28x28
- 卷积层(C):3个特征图,5x5内核(输出尺寸为3x24x24)
- 最大池化层(MP):大小 2x2(输出尺寸为 3x12x12)
- 全连接层(FC):432x10(3*12*12=432 max pooling layer flattened and vectorized)
进行前向传递后,我将输出层中的误差增量计算为:
存在预测值和权重的点积,加上偏差。
我计算下一层的误差增量:
权重的误差导数为
我能够更新权重(和偏差)没有问题。此时,误差增量是 10x1。
用于计算误差增量,我找到的点积以及误差增量本身,如等式 2 中所定义。这给了我一个 432x1 的误差增量。因为这一层没有参数,还有扁平化和矢量化,我只需要按照相反的过程将它重新整形为3x12x12,即错误在.
找到错误增量,我在以 3x24x24 增量结尾的最大池的反向过程之后对错误增量进行上采样。找到这些矩阵中的每一个与特征图的每个的误差增量。
但是现在,如果内核是 5x5 而我是 28x28,我应该如何更新内核?有图层的错误增量,但我不知道如何用它更新权重。也适用于偏差,因为它是整个功能集的单个值。