对于本教程,我们将使用具有两个输入、两个隐藏神经元和两个输出神经元的神经网络。此外,隐藏和输出神经元将包含偏差。
本教程后您将学到的东西
- 建立一个小型神经网络
- 随机初始化权重和偏置
- 前向传递输入。计算成本函数
- 计算梯度和反向传播
使用示例初始化网络
下面是我们的神经网络结构,有 2 个输入,一个隐藏层有 2 个神经元和 2 个输出神经元。还有一个附加到隐藏层和输出层的偏差
反向传播的目标是优化权重,以便神经网络可以学习如何正确地将任意输入映射到输出。
对于本教程的其余部分,我们将使用单个训练集:给定输入 0.05 和 0.10,我们希望神经网络输出 0.01 和 0.99。
前传
首先,让我们看看在给定上述权重和偏差以及输入 0.05 和 0.10 的情况下,神经网络当前预测的结果。为此,我们将通过网络转发这些输入。
我们计算出每个隐藏层神经元的总净输入,使用激活函数(这里我们使用逻辑函数) 压缩总净输入,然后对输出层神经元重复该过程。****
我们如何计算总净投入
我们如何计算 hi 的总净输出:
我们对输出层神经元重复这个过程,使用隐藏层神经元的输出作为输入。
向后传播(反向传播)
我们反向传播的目标是更新网络中的每个权重,使实际输出更接近目标输出,从而最小化每个输出神经元和整个网络的误差。
输出层
我们需要计算出这个等式中的每一部分。首先,总误差相对于输出有多少变化?
同样,我们将找到所有权重:
我们开始做吧
为了减少误差,我们然后从当前权重中减去这个值(可选地乘以一些学习率 eta,我们将其设置为 0.5):
在将新权重引入隐藏层神经元后,我们在神经网络中执行实际更新
隐藏层
我们将使用与我们对输出层所做的类似的过程,但略有不同,以说明每个隐藏层神经元的输出对多个输出神经元的输出(以及误差)有贡献的事实。
万事俱备,我们得到
完成了。是的,我们已经更新了所有权重当我们最初前馈 0.05 和 0.1 输入时,网络上的错误是 0.298371109。在第一轮反向传播之后,总误差现在降至 0.291027924。它可能看起来并不多,但在重复此过程 10,000 次之后,例如,误差直线下降到 0.0000351085。此时,当我们前馈 0.05 和 0.1 时,两个输出神经元生成 0.015912196(对比 0.01 目标)和 0.984065734(对比 0.99 目标)。