这两个版本的反向传播是否等效?

人工智能 神经网络 机器学习 比较 反向传播
2021-11-10 20:18:12

只是为了好玩,我正在尝试开发一个神经网络。

现在,对于反向传播,我看到了两种技术。

第一个在这里和许多其他地方也使用。

它的作用是:

  • 它计算每个输出神经元的误差。
  • 它将其反向传播到网络中(计算每个内部神经元的误差)。
  • 它使用以下公式更新权重:Δwl,m,n=kEl+1,nNl,m, 在哪里

    • Δwl,m,n是重量的变化,
    • k是学习速度,
    • El+1,n是从突触接收输入的神经元的误差,并且
    • Nl,m是在突触上发送的输出。
  • 它根据需要重复数据集的每个条目。

但是,本教程中提出的神经网络(也可以在 GitHub 上找到)使用了不同的技术:

  • 它使用了一个误差函数(另一种方法确实有一个误差函数,但它不使用它进行训练)。
  • 它还有另一个函数可以从权重开始计算最终误差。
  • 它最小化了该功能(通过梯度下降)。

现在,应该使用哪种方法?

我认为第一个是最常用的(因为我看到使用它的不同示例),但它也有效吗?

特别是,我不知道:

  • 它不是更受局部最小值的影响吗(因为它不使用二次函数)?
  • 由于每个权重的变化受其输出神经元的输出值的影响,数据集的条目是否恰好在神经元中产生更高的值(不仅仅是输出的值)对权重的影响大于其他条目?

现在,我确实更喜欢第一种技术,因为我发现它更易于实现且更易于思考。

但是,如果它确实存在我提到的问题(我希望它没有),是否有任何实际理由在第二种方法中使用它?

1个回答

这两个示例呈现基本相同的操作:

  • 在这两种情况下,网络都使用在输出处计算的反向传播平方误差进行梯度下降训练。

  • 两个示例都使用逻辑函数进行节点激活(逻辑函数的导数ss(1s). 这个导数显然很容易计算,这也是它被广泛使用的部分原因(现在ReLU激活函数更流行,尤其是卷积网络)。

  • 第一种方法也使用动量

我可以看到的主要区别是,在第一种情况下,反向传播是迭代的,而在第二种情况下,它是在批处理模式下执行的。

Welch Labs 系列的最后一个视频介绍了一种准牛顿方法,该方法具有通过计算Hessian(误差相对于权重的二阶导数矩阵)找到成本函数最小值的优势。然而,这感觉就像比较苹果和橘子——香草梯度下降不使用二阶信息。