我正在研究CNN,我有一些疑问。假设我只想要一个功能地图,只是为了使事情变得更容易。并假设我的形象是灰度,以使事情变得更轻松。因此,假设我的图像是(32,32) - grayscale,因此只有一个频道,我们不需要明确编写它,而我的过滤器是(3,3) - 一次,一个功能映射,所以我不会打扰写作1.我知道这将映射到(30,30)层。

我将有多少个参数?如果我正确理解它,我将有9个权重和一个偏见,因此总共10个,因为我们使用相同的权重绘制每个(3,3)子区域。后传播将确定这些权重的最佳值,这将为我提供一个功能映射或一个过滤器。

到目前为止,一切都很好。我不明白的是培训如何工作?在图像上移动时,我需要保持相同的权重和偏见(这就是为什么我只有10个参数),但是当我进行后传播时,这些参数不会改变吗?如何应用背部传播并保持权重的相同值,无论其应用于该子区域如何?

有帮助吗?

解决方案

您的示例中只有10个参数。

要确定梯度,您只需在每个位置中添加所有从反向传播中的deltas - 即您运行反向传播30x30 = 900次,对于每个位置,使用3x3内核,对于批处理中的每个示例(或一个示例,如果您是一个示例)运行最简单的Onine随机梯度下降),对于每个位置,您可以将这些增量值添加到适当尺寸的缓冲区中(重量deltas的10个值,或以前的层激活deltas的9个值)。最终,您将获得一组匹配单个3x3过滤器(加上Delta偏置项)的总和程。然后,您将求和版本应用于更新单个滤镜 +偏置的权重。

请注意,这是一条通用规则,您可以在可以将反向传播的多个梯度源应用于任何参数时应用 - 它们只是添加。这也发生在RNN中,或者在任何可以为非输出神经元设置目标函数的结构中。

许可以下: CC-BY-SA归因
scroll top