试图弄清楚如何为卷积网络设置权重

数据挖掘 深度学习 卷积神经网络 反向传播
2022-03-08 09:58:01

我在CNN工作,我有一些疑问。假设我只想要一个特征图,只是为了让事情变得更容易。让我们假设我的图像是灰度的,以使事情变得更容易。所以,假设我的图像是 (32,32) --grayscale,因此只是一个通道,我们不需要明确地编写它,我的过滤器是 (3,3) -- 再次,一个特征图,所以我不会打扰写1。我知道这将映射到(30,30)层。

我将有多少个参数?如果我理解正确,我将有 9 个权重和一个偏差,所以总共有 10 个,因为我们使用相同的权重映射每个 (3,3) 子区域。反向传播将确定这些权重的最佳值,这将为我提供一个特征图或过滤器。

到现在为止还挺好。我不明白的是培训是如何进行的?在图像上移动时我需要保持相同的权重和偏差(这就是为什么我只有 10 个参数),但是当我进行反向传播时这些不会改变吗?如何应用反向传播并保持相同的权重值,而不管它们应用于哪个子区域?

1个回答

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

为了确定梯度,您只需将每个位置的反向传播的所有增量相加 - 即您运行反向传播 30x30 = 900 次,对于使用 3x3 内核的每个位置,对于批次中的每个示例(或者如果您是运行最简单的单随机梯度下降),并且对于每个位置,您将这些增量值添加到适当大小的缓冲区中(权重增量为 10 个值,或前一层激活增量为 9 个值)。您最终将得到一组与您的单个 3x3 过滤器相匹配的总和增量(加上一个增量偏差项)。然后,您应用求和版本来更新单个过滤器 + 偏差的权重。

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