神经网络中的反向传播:机器学习算法及示例

⚡ 智能摘要

反向传播是神经网络的核心训练算法,它通过逐层地根据前一轮训练中测得的误差来微调每个权重,从而使模型更好地泛化到未见过的数据上。

  • 🔘 核心思想: 链式法则可以逐层计算每个权重的损失梯度。
  • ☑️ 训练循环: 前向传递,测量误差,反向传播,更新权重,重复。
  • 两种变体: 静态反向传播将固定的输入映射到固定的输出;循环反向传播先稳定下来,然后再传播。
  • 🧪 为什么它的事项: 梯度下降法之所以对深度网络仍然实用,是因为梯度可以逐层重复使用。
  • 🛠️ 已知限制: 性能取决于输入质量,噪声样本会扭曲学习到的权重。
  • ⚙️ 梯度健康状况: 将许多小导数相乘会导致梯度消失;ReLU 和归一化可以减轻这种影响。

神经网络中的反向传播:机器学习算法

什么是人工神经网络?

人工神经网络是由一组相互连接的输入/输出单元组成,每个连接都带有权重。它能帮助你从大型数据库构建预测模型,其设计借鉴了人类神经系统的运作机制。这类网络支持图像理解、机器学习、计算机语音识别以及许多其他模式识别任务。

反向传播算法决定了这些权重应该是多少,因此最好将这两个概念结合起来理解。

什么是反向传播?

反向传播是神经网络训练的核心。它是一种根据前一次迭代(即epoch)中获得的错误率来微调神经网络权重的方法。适当的权重调整可以降低错误率,并通过提高模型的泛化能力来增强其可靠性。

神经网络中的反向传播是“误差反向传播”的简称。它是训练人工神经网络的标准方法。该方法有助于计算损失函数相对于网络中所有权重的梯度。

两个术语经常被混淆。反向传播 计算 梯度;诸如梯度下降之类的优化器才是真正起作用的。 变化 使用该梯度计算权重。几乎所有现代框架都会通过其自动微分引擎自动执行反向传播。

反向传播算法的工作原理

神经网络中的反向传播算法利用链式法则计算单个权重的损失函数梯度。与简单的直接计算不同,它能够高效地逐层计算。它计算梯度,但并未定义如何使用该梯度。它是对delta法则中计算方法的推广。

链式法则正是其高效的关键所在。一个前导权重对最终损失的影响是其通往输出路径上局部导数的乘积,因此该算法会缓存每一层的中间结果,并在其下一层中重复使用该结果,而不是为每个权重重新计算整个网络。

请参考以下反向传播神经网络示例图进行理解。 trac一次完整的遍历:输入从左侧进入,激活值向前穿过隐藏层到达输出,然后测量误差沿着相同的连接返回以纠正权重。

反向传播算法示意图,展示了前向传播过程如何经过输入层、隐藏层和输出层,以及误差如何向后传播。

  1. 输入 X,通过预连接路径到达
  2. 输入使用真实权重 W 建模。权重通常是随机选择的。
  3. 计算从输入层到隐藏层再到输出层的每个神经元的输出。
  4. 计算输出结果的误差:
    ErrorB= Actual Output – Desired Output
    
  5. 从输出层返回到隐藏层来调整权重,从而减少误差。
  6. 重复此过程,直到达到预期结果。

许多教科书都用相同的数量来描述 期望值减去实际值两种约定都可行,因为优化器子程序会吸收符号。tracts 是梯度,前提是整个网络保持一个约定。

实际上,错误很少仅仅是简单的子程序错误。trac损失函数,例如回归中的均方误差或分类中的交叉熵,将每个输出的差异转换为梯度反向传播实际计算的单个数字。

为什么我们需要反向传播?

反向传播最突出的优点是:

  • 反向传播快速、简单且易于编程
  • 它本身不添加任何新的参数;你所做的调整属于优化器和网络,主要包括学习率和输入数量。
  • 这是一种灵活的方法,因为它不需要有关网络的先验知识
  • 这是一种通常很有效的标准方法
  • 不需要特别提及要学习的功能的特性。

简而言之,如果没有有效的方法来获取梯度,训练超过单层的任何深度在计算上都是不切实际的。

什么是前馈网络?

前馈神经网络是一种人工神经网络,其中节点永远不会形成循环。这种神经网络具有输入层、隐藏层和输出层。它是第一种也是最简单的人工神经网络类型。

这里的区别很重要,因为反向传播的前向传播恰好就是前馈传播;只是纠错过程的方向相反。

反向传播网络的类型

两种类型的反向传播网络是:

  • 静态反向传播
  • 循环反向传播

静态反向传播

它是一种反向传播网络,可以生成地图。ping 静态输入对应静态输出。它适用于解决静态分类问题,例如光学字符识别。

循环反向传播

循环反向传播 数据挖掘 前向传播直至达到固定值。之后,计算误差并反向传播。

这两种方法的主要区别在于:地图ping 静态反向传播算法速度很快,而循环反向传播算法则不是静态的。下表列出了这两种算法的对比。

标准 静态反向传播 循环反向传播
地图绘制 静态输入到静态输出 非静态的;网络在错误发生之前就已经稳定下来。
速度 快速,每个样本只需一次检测 较慢的激活过程会反复进行,直到稳定下来。
网络形状 前馈,无循环 包含反馈连接
典型用途 光学字符识别,固定尺寸分类 输出取决于既定内部状态的问题

反向传播的历史

  • 1961 年,J. Kelly、Henry Arthur 和 E. Bryson 在控制理论的背景下推导出了连续反向传播的基本概念。
  • 1969年,Bryson和Ho提出了多阶段动态系统优化方法。
  • 1970 年,塞波·林奈马发表了自动微分的逆模式,现代反向传播算法正是基于这种计算方法建立起来的。
  • 1974年,Werbos提出了在人工神经网络中应用这一原理的可能性。
  • 1982年,霍普菲尔德提出了他的神经网络的想法。
  • 1986年,在David E. Rumelhart,Geoffrey E. Hinton,Ronald J. Williams的努力下,反向传播获得了认可。
  • 1989 年,Yann LeCun 和他的同事训练了一个带有反向传播的卷积神经网络来读取手写数字,这是最早的大规模实际应用之一。
  • 1993年,万成为第一个利用反向传播方法赢得国际模式识别大赛冠军的人。
  • 2006 年,Hinton 在深度信念网络和逐层预训练方面的工作重新激发了人们对训练深度网络的兴趣,此前由于梯度消失问题,深度网络的训练一度停滞不前。
  • 2010 年,Xavier Glorot 和 Yoshua Bengio 分析了深度网络难以训练的原因,并引入了改进的权重初始化,这与 ReLU 激活函数一起使深度反向传播变得实用。
  • 2012 年,AlexNet(Krizhevsky、Sutskever 和 Hinton)利用 GPU 加速的反向传播赢得了 ImageNet 竞赛,引发了现代深度学习的蓬勃发展。
  • 2014 年,Adam 优化器(Kingma 和 Ba)被引入,并迅速成为反向传播算法中使用的默认梯度下降变体。
  • 2015 年,批量归一化和残差网络 (ResNet) 解决了非常深网络中的梯度流问题,从而可以反向传播数百层。
  • 2015-2017年,TensorFlow和PyTorch 将自动微分作为标准软件功能,因此不再需要手动推导梯度。
  • 2017 年,Transformer 架构问世,它采用反向传播进行端到端训练,基于该架构构建的大型语言模型也是如此。
  • 2019 年,Bengio、Hinton 和 LeCun 因其在深度神经网络方面的工作而获得 ACM AM 图灵奖。
  • 2020 年,论文《反向传播与大脑》(Lillicrap、Santoro、Marris、Akerman 和 Hinton)认为,大脑可能近似于反向传播式的学习,重新引发了生物学合理性之争。
  • 2022 年,Hinton 提出了前向-前向算法,这是一种完全避免反向传播的训练方法。
  • 2024年,约翰·霍普菲尔德和杰弗里·辛顿因其奠定机器学习和人工神经网络基础的发现而获得诺贝尔物理学奖。
  • 2025 年,前向传播方法扩展到了卷积网络,表明无需反向传播的训练也可以用于图像分类任务。
  • 截至 2026 年,反向传播仍然是几乎所有深度学习模型的标准训练算法,同时,人们仍在研究无梯度、局部和并行学习方法,以降低其内存和计算成本。

反向传播关键点

  • 通过移除对训练网络影响最小的加权链接来简化网络结构
  • 您需要研究一组输入和激活值来建立输入层和隐藏单元层之间的关系。
  • 它有助于评估给定输入变量对网络输出的影响。从此分析中获得的知识应以规则的形式呈现。
  • 反向传播对于处理容易出错的项目(例如图像或语音识别)的深度神经网络特别有用。
  • 反向传播利用了链式和幂规则,这使得它可以处理任意数量的输出。

反向传播最佳实践

神经网络中的反向传播可以用“鞋带”的比喻来解释。权重更新就像鞋带的张力:太小的话什么都固定不住,太大的话就会断掉。

鞋带张力 训练期间的意义
张力不足 约束不足且过于宽松——模型拟合度欠高。
压力太大了 约束过多(过度训练);耗时过长(过程相对缓慢);更容易出错
拉紧其中一根鞋带的力度比另一根大。 不适感(偏见)——网络中的某一部分主导了拟合度

从这个类比中可以得出两个实用的习惯:在训练之前缩放输入,使任何一个特征的权重都与其他特征相等;观察验证损失,以便在过拟合发生之前释放压力。

使用反向传播的缺点

  • 反向传播对特定问题的实际性能取决于输入数据。
  • 数据挖掘中的反向传播算法对噪声数据非常敏感
  • 对于小批量数据,反向传播应该采用基于矩阵的方法来实现;ping 一次只处理一个例子会明显变慢。
  • 在深度网络中,小导数的重复乘法会导致梯度趋近于零,因此最底层几乎无法学习——这就是文献中描述的梯度消失问题。 Google 机器学习速成课程.

这些都不能排除这种方法。它们恰恰是实践者在从浅层网络过渡到深层网络时,选择使用 ReLU 激活函数、归一化和精心设计的学习率策略的原因。 深入学习 模型。

常见问题

反向传播算法计算损失函数相对于每个权重的梯度。梯度下降算法则利用该梯度来调整每个权重。前者计算斜率,后者则执行步长调整。

学习率决定了每个权重沿其梯度移动的幅度。学习率太小,训练速度会非常慢;学习率太大,损失函数会振荡或发散。随着训练轮数的增加,学习率逐渐降低的训练策略通常能更可靠地收敛。

时间反向传播通过将序列展开成一系列副本,然后对每条副本应用普通的反向传播算法来训练循环神经网络。长序列通常会被截断,因为否则梯度会在多次迭代后消失或急剧增大。

任何可微的损失函数都可以。均方误差适用于回归,二元交叉熵适用于二分类问题,而分类交叉熵适用于多分类输出层。选择哪种损失函数会改变输出层的梯度,而不是反向传播算法本身。

自动化搜索工具探索学习率、层宽和正则化设置的速度远超手动试错法。贝叶斯优化和提前停止ping 调度器会迅速剪掉性能较差的运行,将计算资源留给那些真正能减少验证损失的配置。

GitHub 副驾驶 它通过简短的注释生成训练循环、梯度检查和层定义草稿,从而减少重复性工作。它生成的导数会与数值梯度检查结果进行比对,因为即使符号看起来合理但实际错误,程序也会静默运行。

较大的权重会导致每一层的反向乘积不断增长,直到更新过度,损失变得不稳定。梯度裁剪ping较小的初始权重、批量归一化和较低的学习率都能使幅度保持在范围内。

批次是指在一次权重更新之前处理的一组样本。一次迭代是指一次权重更新。一个轮次是指对训练集进行一次完整的遍历,其中包含的迭代次数与批次的数量相同。

总结一下这篇文章: