当前位置: 首页 > news >正文

反向传播 梯度消失

反向传播 backpropagation

反向传播(Backpropagation) 是神经网络训练中的一种核心算法,用于通过计算误差并将其传播回网络,从而更新神经网络的参数。通过反向传播,网络能够在每次迭代中逐步调整其参数(例如权重和偏置),以最小化预测误差,从而学习到合适的特征表示。

基本原理

反向传播算法基于链式法则(链式求导法则),这意味着它通过计算误差梯度逐层传播回网络,并逐步更新每一层的权重和偏置。具体来说,反向传播的目标是通过最小化网络的损失函数(例如平方误差,交叉熵等)来优化网络的参数。

反向传播的步骤

  1. 前向传播 (Forward Pass)

    • 输入数据通过神经网络的每一层传递,直到输出层。
    • 在每一层,数据通过加权和、激活函数等操作,最终得出网络的预测结果。
  2. 计算损失函数的误差

    • 损失函数(如均方误差、交叉熵等)是网络输出与实际标签之间的差异度量。目标是最小化损失函数。
    • 损失函数的梯度表示损失函数相对于网络每个参数(例如权重和偏置)的变化率。
  3. 反向传播过程

    • 从输出层开始,通过链式法则将损失函数的误差逐层传播回网络。

    • 使用链式法则(链式求导法则)计算每一层的梯度。链式法则帮助我们理解误差是如何通过各层的权重传播的。

    • 具体来说,反向传播通过逐层计算每个节点(神经元)对损失的贡献,将误差梯度从输出层传递到输入层。

  4. 参数更新

    • 得到每个参数的梯度后,通过梯度下降或其他优化算法(如Adam优化器)来更新参数。
    • 权重的更新公式为:
      w = w − η ⋅ ∂ L ∂ w w = w - \eta \cdot \frac{\partial L}{\partial w} w=wηwL
      其中:
    • w w w 是权重。
    • η \eta η 是学习率,决定了每次更新的步长。
    • ∂ L ∂ w \frac{\partial L}{\partial w} wL 是损失函数相对于权重 w w w 的梯度。
  5. 重循环步骤

    • 反向传播和参数更新是通过多次迭代(或称训练周期)进行的。每次迭代后,网络的权重都会得到更新,网络的预测结果会更准确。

举例说明

假设我们有一个简单的三层神经网络,输入为 x x x,通过隐藏层进行处理,最终输出为 y ^ \hat{y} y^(网络的预测值)。目标是通过反向传播最小化损失函数 L ( y ^ , y ) L(\hat{y}, y) L(y^,y),其中 y y y 是实际标签。

  1. 前向传播:计算输出 y ^ \hat{y} y^

  2. 损失计算:计算 L ( y ^ , y ) L(\hat{y}, y) L(y^,y)

  3. 反向传播

    • 计算输出层损失相对于输出层参数的梯度 ∂ L ∂ w 3 \frac{\partial L}{\partial w_3} w3L ∂ L ∂ b 3 \frac{\partial L}{\partial b_3} b3L
    • 利用链式法则,将梯度传播到前一层(隐藏层),计算隐藏层的梯度 ∂ L ∂ w 2 \frac{\partial L}{\partial w_2} w2L ∂ L ∂ b 2 \frac{\partial L}{\partial b_2} b2L
    • 继续反向传播,直到输入层。
  4. 参数更新:利用计算得到的梯度更新所有层的权重和偏置。

梯度消失 vanishing gradient

梯度消失问题通常出现在训练深层神经网络时,尤其是当使用反向传播算法时。在训练神经网络时,我们通过反向传播计算每个参数的梯度,并使用梯度下降法更新这些参数。但是,随着网络层数的增加,梯度值可能会逐渐变得非常小,甚至接近零。这个问题通常出现在深层网络和使用某些激活函数(如sigmoid或tanh)时。

原因:在反向传播过程中,梯度需要通过每一层逐层传递。如果激活函数的导数很小(如sigmoid的导数最大为0.25),那么梯度在每一层都会被缩小,导致靠近网络输入的层几乎无法接收到有效的梯度信号。这样,网络的前几层更新速度非常慢,甚至停止更新,从而导致网络训练不充分,无法学习有效的特征。

http://www.lqws.cn/news/602227.html

相关文章:

  • OSE3.【Linux】练习:编写进度条及pv命令项目中的进度条函数
  • 07CSRF 漏洞保护
  • vite项目中引入tailwindcss,难倒AI的操作
  • Modbus协议
  • 数字图像处理学习笔记
  • Spring IOC容器核心阶段解密:★Bean实例化全流程深度剖析★
  • 菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]
  • 城市灯光夜景人像街拍摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 自由学习记录(66)
  • RESTful API 设计原则深度解析
  • 转录组分析流程(六):列线图
  • 笨方法学python-习题12
  • JavaScript 安装使用教程
  • 解码知识整理,使您的研究更高效!
  • 分区表设计:历史数据归档与查询加速
  • [论文阅读] 人工智能 + 软件工程 | 从软件工程视角看大语言模型:挑战与未来之路
  • python训练day46 通道注意力
  • 2025-0701学习记录19——“问题-方法-洞见”框架做汇报
  • 半导体和PN结
  • socket编程
  • Android11 添加自定义物理按键事件监听回调
  • Vite 7.0 与 Vue 3.5:前端开发的性能革命与功能升级
  • 【Linux】进程
  • NLP——RNN变体LSTM和GRU
  • Android布局管理器实战指南:从LinearLayout到ConstraintLayout的优化之旅
  • Redis——常用指令汇总指南(一)
  • 【Python】断言(assert)
  • 监听器模式
  • [Python] -基础篇8-Python中的注释与代码风格PEP8指南
  • 【C++】inline的作用