当我需要更新多层感知器中的权重时?

Kel*_*ero 0 machine-learning backpropagation neural-network

我正在研究多层感知器,一种神经网络。当我读到反向传播算法时,我看到一些作者建议在计算特定层的所有错误后立即更新权重,但另一位作者解释说我们需要在获得所有层的所有错误后更新权重。正确的做法有哪些?

第一种方法:

function void BackPropagate(){
    ComputeErrorsForOutputLayer();
    UpdateWeightsOutputLayer();
    ComputeErrorsForHiddenLayer();
    UpdateWeightsHiddenLayer();
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:

function void BackPropagate(){
    ComputeErrorsForOutputLayer();
    ComputeErrorsForHiddenLayer();
    UpdateWeightsOutputLayer();
    UpdateWeightsHiddenLayer();
}
Run Code Online (Sandbox Code Playgroud)

感谢一切。

lej*_*lot 5

我很确定您误解了这里的概念。两种可能的策略是:

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

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

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