只是为了好玩,我正在尝试开发一个神经网络。
现在,对于反向传播,我看到了两种技术。
第一个在这里和许多其他地方也使用。
它的作用是:
- 它计算每个输出神经元的误差。
- 它将其反向传播到网络中(计算每个内部神经元的误差)。
它使用以下公式更新权重:, 在哪里
- 是重量的变化,
- 是学习速度,
- 是从突触接收输入的神经元的误差,并且
- 是在突触上发送的输出。
它根据需要重复数据集的每个条目。
但是,本教程中提出的神经网络(也可以在 GitHub 上找到)使用了不同的技术:
- 它使用了一个误差函数(另一种方法确实有一个误差函数,但它不使用它进行训练)。
- 它还有另一个函数可以从权重开始计算最终误差。
- 它最小化了该功能(通过梯度下降)。
现在,应该使用哪种方法?
我认为第一个是最常用的(因为我看到使用它的不同示例),但它也有效吗?
特别是,我不知道:
- 它不是更受局部最小值的影响吗(因为它不使用二次函数)?
- 由于每个权重的变化受其输出神经元的输出值的影响,数据集的条目是否恰好在神经元中产生更高的值(不仅仅是输出的值)对权重的影响大于其他条目?
现在,我确实更喜欢第一种技术,因为我发现它更易于实现且更易于思考。
但是,如果它确实存在我提到的问题(我希望它没有),是否有任何实际理由在第二种方法中使用它?