深度神经网络中的反向传播示例

32 阅读3分钟

对于本教程,我们将使用具有两个输入、两个隐藏神经元和两个输出神经元的神经网络。此外,隐藏和输出神经元将包含偏差。

本教程后您将学到的东西

  1. 建立一个小型神经网络
  2. 随机初始化权重和偏置
  3. 前向传递输入。计算成本函数
  4. 计算梯度和反向传播

使用示例初始化网络

下面是我们的神经网络结构,有 2 个输入,一个隐藏层有 2 个神经元和 2 个输出神经元。还有一个附加到隐藏层和输出层的偏差

image.png

反向传播的目标是优化权重,以便神经网络可以学习如何正确地将任意输入映射到输出。

对于本教程的其余部分,我们将使用单个训练集:给定输入 0.05 和 0.10,我们希望神经网络输出 0.01 和 0.99。

前传

首先,让我们看看在给定上述权重和偏差以及输入 0.05 和 0.10 的情况下,神经网络当前预测的结果。为此,我们将通过网络转发这些输入。

我们计算出每个隐藏层神经元的总净输入,使用激活函数(这里我们使用逻辑函数) 压缩总净输入,然后对输出层神经元重复该过程。****

我们如何计算总净投入

我们如何计算 hi 的总净输出:

image.png

我们对输出层神经元重复这个过程,使用隐藏层神经元的输出作为输入。

image.png

image.png

向后传播(反向传播)

我们反向传播的目标是更新网络中的每个权重,使实际输出更接近目标输出,从而最小化每个输出神经元和整个网络的误差。

输出层

image.png

image.png

我们需要计算出这个等式中的每一部分。首先,总误差相对于输出有多少变化?

image.png

同样,我们将找到所有权重:

我们开始做吧

image.png

为了减少误差,我们然后从当前权重中减去这个值(可选地乘以一些学习率 eta,我们将其设置为 0.5):

image.png

image.png

在将新权重引入隐藏层神经元,我们在神经网络中执行实际更新

隐藏层

image.png

我们将使用与我们对输出层所做的类似的过程,但略有不同,以说明每个隐藏层神经元的输出对多个输出神经元的输出(以及误差)有贡献的事实。

image.png

image.png

万事俱备,我们得到

image.png

image.png

完成了。是的,我们已经更新了所有权重当我们最初前馈 0.05 和 0.1 输入时,网络上的错误是 0.298371109。在第一轮反向传播之后,总误差现在降至 0.291027924。它可能看起来并不多,但在重复此过程 10,000 次之后,例如,误差直线下降到 0.0000351085。此时,当我们前馈 0.05 和 0.1 时,两个输出神经元生成 0.015912196(对比 0.01 目标)和 0.984065734(对比 0.99 目标)。