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)
感谢一切。
我很确定您误解了这里的概念。两种可能的策略是:
这与你写的完全不同。这两种方法都是样本/批量策略,各有优缺点,由于简单,第一种方法在实现中更为常见。
关于你的“方法”,第二种方法是唯一正确的方法,“传播”误差的过程只是计算误差函数导数的计算简化,学习的(基本)过程是最速下降方法。如果您仅计算部分维度(输出层)的导数,在方向上执行一步,然后根据新值重新计算误差导数,则您没有执行梯度下降。唯一可以接受第一种方法的情况是,当您的权重更新不会干扰您的误差计算时,那么使用什么顺序并不重要,因为它们是独立的。