前向传播
注意:在这个例子中,我使用sigmoid函数作为激活函数(激活函数用作将输入映射到一定范围内 - 对于 sigmoid 来说,范围是 (0, 1))。
隐藏层
隐藏层 1:
隐藏层 2:
隐藏层 3:
输出层
输出层 1:
输出层 2:
均方误差 (MSE) 计算
均方误差是预期输出和实际输出之间差异的度量。我们正在寻找较低的 MSE 分数,这表明模型与数据的拟合度更高。我们将使用梯度下降法来降低该值。
反向传播
现在已经计算出预测值,神经网络需要根据预测误差调整其权重。这是通过反向传播完成的。
对于此示例,考虑学习率为 0.1
反向传播背后的一般数学思想是应用链式法则来找到误差函数随权重变化的变化。以权重 7 为例:
所有三个部分方程均可从我们的工作中推导出来。
首先,
第二,
最后,
因此,把这三个术语放在一起,
该公式可以适用于连接隐藏层和输出层的所有权重。
注意:作者通常会使用 delta 来写方程:δ₀₁= (a₀₁−expected₁) × a₀₁ × (1−a₀₁),因此方程可以写成 ∂E₀₁ / ∂w₇ = δ₀₁ × aₕ₁
现在我们得到了误差函数的梯度。
我们想应用梯度下降来获得权重 w₇ 的新值。新的 w₇(我们可以将其符号化为 w₇')可以通过从 w₇ 中减去学习率乘以梯度来获得。
一般来说,对于输出神经元:
输出层
现在,应用示例中的实数来查找 w₇ 到 w₁₂ 的新值
输出层 1:
输出层 2:
隐藏层(衍生)
找到一种方法来优化隐藏层权重具有更大的推导量——本节中的任何内容都与计算无关,因此如果需要,可以随意跳过此部分。
考虑更新 w₁ 的权重——原则上,更新任何权重在围绕偏微分旋转方面都会具有相同风格的公式。
然而这一次,我们离输出神经元更远了——因此,为了找到这个方程右侧各个分量的值,还需要进行更多的“链接”……
对于一阶导数:
在哪里:
现在,由于我们之前已经计算了 δ₀₁ 和 δ₀₂(参见本文输出层部分所做的计算),我们可以将这些增量的值代入方程中。
因此,加权和相对于前一层的神经元的导数本质上就是相应的权重。
现在,用这些值代替部分误差项:
∂aₕ₁ / ∂sₕ₁ 的值只是 S 型函数的导数
∂sₕ₁ / ∂w₁ 的值是前一层神经元的输出(在本例中,由于只有一个隐藏层,所以是输入层神经元)
综上所述:
我希望您能看到这些步骤中发生了什么——可以进行类似的工作过程来找到所有权重的公式(我不会展示)。
但本质上,要找到更新权重的值,首先计算权重输出神经元的增量,然后从增量中减去旧权重,乘以增量,再乘以权重输入神经元的先前值。
如果这很难理解,那么下面的计算可能会帮助您了解数字上发生的情况。
隐藏层(计算)
先前计算的 delta 值:
δ₀₁ = -0.0984
δ₀₂ = 0.1479
隐藏层 1:
隐藏层 2:
隐藏层 3:
完成了!
具有更新权重的神经网络