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

反向传播是训练神经网络的最常用方法之一 。Rumelhart、Hinton和Williams(1986)引入了反向传播 , 该方法到今天仍然很流行 。程序员经常使用反向传播训练深层神经网络 , 因为在图形处理单元上运行时 , 它的伸缩性很好 。要了解这种用于神经网络的算法 , 我们必须探讨如何训练它 , 以及它如何处理模式 。
经典的反向传播已得到扩展和修改 , 产生了许多不同的训练算法 。本章中将讨论神经网络最常用的训练算法 。我们从经典的反向传播开始 , 然后以随机梯度下降结束本章 。
6.1 理解梯度反向传播是梯度下降的一种 , 许多教科书中通常互换使用这两个术语 。梯度下降是指针对每个训练元素 , 在神经网络中的每个权重上计算一个梯度 。由于神经网络不会输出训练元素的期望值 , 因此每个权重的梯度将为你提示如何修改权重以实现期望输出 。如果神经网络确实输出了预期的结果 , 则每个权重的梯度将为0 , 这表明无需修改权重 。
梯度是权重当前值下误差函数的导数 。误差函数用于测量神经网络输出与预期输出的差距 。实际上 , 我们可以使用梯度下降 , 在该过程中 , 每个权重的梯度可以让误差函数达到更低值 。
梯度实质上是误差函数对神经网络中每个权重的偏导数 。每个权重都有一个梯度 , 即误差函数的斜率 。权重是两个神经元之间的连接 。计算误差函数的梯度可以确定训练算法应增加 , 还是减小权重 。反过来 , 这种确定将减小神经网络的误差 。误差是神经网络的预期输出和实际输出之间的差异 。许多不同的名为“传播训练算法”的训练算法都利用了梯度 。总的来说 , 梯度告诉神经网络以下信息:

  • 零梯度——权重不会导致神经网络的误差;
  • 负梯度——应该增加权重以减小误差;
  • 正梯度——应当减小权重以减小误差 。
由于许多算法都依赖于梯度计算 , 因此我们从分析这个过程开始 。
 6.1.1 什么是梯度首先 , 让我们探讨一下梯度 。本质上 , 训练是对权重集的搜索 , 这将使神经网络对于训练集具有最小的误差 。如果我们拥有无限的计算资源 , 那么只需尝试各种可能的权重组合 , 来确定在训练期间提供最小误差的权重 。
因为我们没有无限的计算资源 , 所以必须使用某种快捷方式 , 以避免需要检查每种可能的权重组合 。这些训练算法利用了巧妙的技术 , 从而避免对所有权重进行蛮力搜索 。但这种类型的穷举搜索将是不可能的 , 因为即使小型网络也具有无限数量的权重组合 。
请考虑一幅图像 , 它展示每个可能权重的神经网络误差 。图6-1展示了单个权重的误差 。
最受欢迎的算法之一:反向传播训练

文章插图
 
图6-1 单个权重的误差
从图6-1中很容易看到 , 最佳权重是曲线的
最受欢迎的算法之一:反向传播训练

文章插图
 
(
最受欢迎的算法之一:反向传播训练

文章插图
 
)值最低的位置 。问题是我们只看到当前权重的误差;我们看不到整幅图像 , 因为该过程需要穷尽的搜索 。但是 , 我们可以确定特定权重下误差曲线的斜率 。在图6-1中 , 我们看到误差曲线在
最受欢迎的算法之一:反向传播训练

文章插图
 
=1.5处的斜率 。与误差曲线相切(在
最受欢迎的算法之一:反向传播训练

文章插图
 
=1.5处)的直线给出了斜率 。在这个例子中 , 斜率或梯度为−0.562 2 。负斜率表示增大权重会降低误差 。
梯度是指在特定权重下误差函数的瞬时斜率 。误差曲线在该点的导数给出了梯度 。这条线的倾斜程度告诉我们特定权重下误差函数的陡峭程度 。
导数是微积分中最基本的概念之一 。对于本书 , 你只需要了解导数在特定点处提供函数的斜率即可 。训练技巧和该斜率可以为你提供信息 , 用于调整权重 , 从而降低误差 。现在 , 利用梯度的实用定义 , 我们将展示如何计算它 。


推荐阅读