在CNN中,我们何时使用反向传播更新内核参数?假设我有 50 个批量大小和 1000 个训练数据。我是在每个批次呈现给网络之后还是在每个数据样本之后反向传播?
CNN 中的权重何时更新?
每当您使用批处理训练网络时,意味着您选择使用批处理梯度下降进行训练。梯度下降算法有三种变体:
- 梯度下降
- 随机梯度下降
- 批量梯度下降
第一个将整个数据通过网络并找到所有数据的错误率,并找到所有数据样本的梯度,并在通过整个数据集后更新权重。这意味着对于每个时期,通过网络传递整个数据集,都会发生一次更新。此更新对下降梯度是准确的。
第二种方法是在传递每个数据后更新权重,这意味着如果您的数据样本有 1000 个样本,则会发生 1000 次更新,而前一种方法会为整个数据样本更新一次权重。这种方法不准确,但比前一种方法快得多。
最后一个试图在上述方法之间找到一个权衡。您指定一个批次大小,您将在每批中传递数据样本后更新权重,这意味着梯度是在每批传递后计算的。假设您有 1000 个数据样本,并且您指定了包含 100 个数据样本的批量大小。每个 epoch 将有 10 次权重更新。这种方法比第二种方法更准确,也比第一种方法更快。
我是在每批提交给网络之后还是在每张图像之后反向传播?
你的方法是最后一种。因此,在通过整个批次后,您将更新权重。
根据我们一位朋友的评论,上述方法分别命名如下:
- [Batch] 梯度下降(batch size = 所有训练样本)
- 真正的 SGD(批量大小 = 1 - 每个训练样本的权重更新)
- 小批量 SGD(批量大小 = n 个训练样本中的 m 个)。
反向传播在技术上是指计算损失函数相对于参数的梯度。根据深度学习书的第 6.5 节:
反向传播一词经常被误解为表示多层神经网络的整个学习算法。实际上,反向传播只是指计算梯度的方法,而另一种算法,例如随机梯度下降,则用于使用该梯度进行学习。
在随机梯度下降的每次迭代中,在反向传播之后立即更新权重。从第 8.3.1 节开始:
在这里你可以看到参数是通过将梯度乘以学习率并减去来更新的。
这里描述的 SGD 算法适用于 CNN 以及其他架构。
权重更新可以理解为权重的变化,让你的误差越来越小。你首先假设一些权重并得到模型预测,然后得到误差。然后,您将误差 wrt 的导数转换为权重,最后更新权重以减少误差。您还可以将其视为微积分中的最小查找问题。你正在寻找权重的值,或者说权重空间中给你带来最小误差的点。
在训练阶段,它只接受输入并在矩阵中分配值。当你在第一次迭代期间开始给它测试数据时,它只是选择一些随机权重并尝试找出它得到了什么,然后根据预测将该预测作为“i”值,如果它预测为真,它不会改变任何该类的权重,但如果它预测错误的类,那么它会根据您给出的参数调整权重,然后再次迭代,直到预测接近它所训练的数据。所以,只有在测试时,您的数据权重才会改变和通过将您的“1000”数据拆分为训练集&,反向传播它可能会在后台发生