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

时间:2016-04-14 15:55:57

标签: machine-learning neural-network backpropagation conv-neural-network

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

  

CNN Architecture

此处C_i引用i^th 卷积层P_i引用i^th 均值合并层。对应于每一层将是一个输出。让delta^P_j引用图层P_j输出中的错误(enter image description here也是如此)。

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

我们如何将错误从C_2的输出传播到P_1的输出?换句话说,我们如何从delta^P_1找到delta^C_2

Standford的深度学习教程使用以下等式来执行此操作:

  

UFLDL Equation

然而,我在使用这个等式时面临以下问题:

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

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

  3. 我在这里做错了什么?任何人都可以解释如何通过卷积层传播错误吗?

    将非常感谢简单的MATLAB示例。

2 个答案:

答案 0 :(得分:2)

这里要注意的一点是,池化层不会自学。池化层的功能是逐步减小表示的空间大小,以减少网络中的参数和计算量。

在前向传播期间, P P 汇集块减少为单个值,即“获胜单位”的值。跟踪“获胜单位”在正向传递期间记录的指数,并用于反向传播期间的梯度路由。

在反向传播期间,计算卷积层中的梯度,然后向池化层的向后传递则涉及从卷积层分配“获胜单位”,因为先前已经注意到了索引。在前进过程中。

渐变路由以下列方式完成:

  • 最大池化 - 错误只是分配到它来自的地方 - “获胜单位”,因为前一层的汇集块中的其他单位没有贡献它因此所有其他指定值为零

  • 平均合并 - 错误乘以 1 /( P P )分配给整个汇集块(所有单位都获得相同的值)。

阅读有关整个反向传播程序here

的更全面细分

答案 1 :(得分:0)

我认为你的图层和重量的尺寸与你的想法有很大的不同。如果“P_1的输出有64个通道而C_2的输出有96个通道”并且你的卷积是2x2,那么W不是2x2,它是96x64x2x2(等级-4张量;尺寸/索引的顺序可以变化,但你明白了。) “内部矩阵乘法”实际上是张量卷积。继续前进,您将卷入96x64x2x2的W,其输入为(我假设)64x7x7以产生96x6x6的输出(这假定为“有效”卷积且无填充,这就是为什么在7x7上滑动2x2会产生6x6的原因)。向后移动,您可以将W的转置与输出进行卷积,以生成与输入具有相同尺寸的内容。

平均合并只会使事情变得更复杂;首先尝试理解这一点,不要合并,或将模型池化为具有固定(相等)权重的卷积。