最受欢迎的算法之一:反向传播训练( 二 )


 6.1.2 计算梯度我们将为每个权重单独计算一个梯度 。我们不仅关注方程 , 也关注梯度在具有真实数值的实际神经网络中的应用 。图6-2展示了我们将使用的神经网络——XOR神经网络 。

最受欢迎的算法之一:反向传播训练

文章插图
 
图6-2 XOR神经网络
此外 , 本书线上资源(见引言)的几个示例中使用了相同的神经网络 。在本章中 , 我们将展示一些计算 , 说明神经网络的训练 。我们必须使用相同的起始权重 , 让这些计算保持一致 。但是 , 上述权重没有什么特征 , 是由该程序随机生成的 。
前面提到的神经网络是典型的三层前馈神经网络 , 就像我们之前研究的那样 , 圆圈表示神经元 , 连接圆圈的线表示权重 , 连接线中间的矩形给出每个连接的权重 。
我们现在面临的问题是 , 计算神经网络中每个权重的偏导数 。当一个方程具有多个变量时 , 我们使用偏导数 。每个权重均被视为变量 , 因为这些权重将随着神经网络的变化而独立变化 。每个权重的偏导数仅显示每个权重对误差函数的独立影响 。该偏导数就是梯度 。
可以用微积分的链式规则来计算每个偏导数 。我们从一个训练集元素开始 。对于图6-2 , 我们提供[1,0]作为输入 , 并期望输出是1 。你可以看到我们将输入应用于图6-2 。第一个输入神经元的输入为1.0 , 第二个输入神经元的输入为0.0 。
该输入通过神经网络馈送 , 并最终产生输出 。第4章“前馈神经网络”介绍了计算输出与总和的确切过程 。反向传播既有前向 , 也有反向 。计算神经网络的输出时 , 就会发生前向传播 。我们仅针对训练集中的这个数据项计算梯度 , 训练集中的其他数据项将具有不同的梯度 。在后文 , 我们将讨论如何结合各个训练集元素的梯度 。
现在我们准备计算梯度 。下面总结了计算每个权重的梯度的步骤:
  • 根据训练集的理想值计算误差;
  • 计算输出节点(神经元)的增量;
  • 计算内部神经元节点的增量;
  • 计算单个梯度 。
我们将在随后的内容中讨论这些步骤 。
6.2 计算输出节点增量为神经网络中的每个节点(神经元)计算一个常数值 。我们将从输出节点开始 , 然后逐步通过神经网络反向传播 。“反向传播”一词就来自这个过程 。我们最初计算输出神经元的误差 , 然后通过神经网络向后传播这些误差 。
节点增量是我们将为每个节点计算的值 。层增量也描述了该值 , 因为我们可以一次计算一层的增量 。在计算输出节点或内部节点时 , 确定节点增量的方法可能会有所不同 。首先计算输出节点 , 并考虑神经网络的误差函数 。在本书中 , 我们将研究二次误差函数和交叉熵误差函数 。
 6.2.1 二次误差函数神经网络的程序员经常使用二次误差函数 。实际上 , 你可以在网络上找到许多使用二次误差函数的示例 。如果你正在阅读一个示例程序 , 但未提及具体的误差函数 , 那么该程序可能使用了二次误差函数 , 也称为MSE函数 , 我们在第5章“训练和评估”中讨论过 。公式6-1展示了MSE函数:
最受欢迎的算法之一:反向传播训练

文章插图
 
(6-1)
公式6-1将神经网络的实际输出(
最受欢迎的算法之一:反向传播训练

文章插图
 
)与预期输出(
最受欢迎的算法之一:反向传播训练

文章插图
 
)进行了比较 。变量
最受欢迎的算法之一:反向传播训练

文章插图
 
为训练元素的数量乘以输出神经元的数量 。MSE将多个输出神经元处理为单个输出神经元的情况 。公式6-2展示了使用二次误差函数的节点增量:
最受欢迎的算法之一:反向传播训练

文章插图
 
(6-2)
二次误差函数非常简单 , 因为它取了神经网络的预期输出与实际输出之间的差 。
最受欢迎的算法之一:反向传播训练


推荐阅读