在多层感知器中何时更新权重?

我正在研究多层感知器,一种神经网络。当我阅读关于反向传播算法的内容时,我发现一些作者建议在计算完特定层的全部误差后立即更新权重,但另一些作者则解释说需要在获取所有层的全部误差后再更新权重。正确的做法是什么?

第一种方法:

function void BackPropagate(){    ComputeErrorsForOutputLayer();    UpdateWeightsOutputLayer();    ComputeErrorsForHiddenLayer();    UpdateWeightsHiddenLayer();}

第二种方法:

function void BackPropagate(){    ComputeErrorsForOutputLayer();    ComputeErrorsForHiddenLayer();    UpdateWeightsOutputLayer();    UpdateWeightsHiddenLayer();}

感谢你们的帮助。


回答:

我非常确定你在这里误解了这个概念。有两种可能的策略:

  • 在计算完一个输入向量所有误差后更新权重
  • 在计算完所有输入向量所有误差后更新权重

这与你所写的完全不同。这两种方法是样本/批处理策略,各有优缺点,由于简单性,第一种方法在实现中更为常见。

关于你的“方法”,第二种方法是唯一正确的,“传播”误差的过程只是计算误差函数导数的计算简化,而(基本的)学习过程是一种最陡下降法。如果你只为部分维度(输出层)计算导数,执行一个方向上的步骤,然后根据新值重新计算误差导数,你并不是在执行梯度下降。唯一可以接受第一种方法的场景是当你的权重更新不干扰你的误差计算时,那么使用什么顺序并不重要,因为它们是独立的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注