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