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

【机器学习深度学习】反向传播机制

目录

一、一句话定义

二、类比理解

三、为什重要?

四、用生活例子解释:神经网络 = 烹饪机器人

4.1 第一步:尝一口(前向传播)

4.2 第二步:倒着推原因(反向传播)

五、 换成人工智能流程说一遍

六、图示类比:找山顶(最优参数)

七、总结一句人话

八、PyTorch代码示例:亲眼看到每一层的梯度

九、梯度 = 损失函数对参数的偏导数

十、类比总结


反向传播(Backpropagation)是神经网络中训练过程的核心机制,它就像“模型的老师”,帮助模型知道哪里做错了,怎么改正。为了更好的理解它,这里用通俗类比 + 结构讲解 + 数学一瞥三步走方式:


一、一句话定义

反向传播是一种利用链式法则,逐层计算损失函数对各层参数(权重)梯度的方法,用于更新神经网络的参数。


二、类比理解

 模型就像在考试,“反向传播”是批改试卷

 想象你正在训练一个“学生”来考试(神经网络):

  • 考试题:输入特征(比如图像)

  • 答案:真实标签(比如这是只猫🐱)

  • 学生写答案:神经网络的前向传播,得到预测结果

  • 老师批改试卷:比较学生答案和标准答案 → 得到误差(损失)

  • 老师反复讲解错误步骤:根据误差一步步“倒着推”回去,看是哪里做错了、哪个参数有问题

  • 给出修改建议:告诉每层“你该往哪个方向调整权重”,这就是梯度

  • 学生改正:更新参数 = 梯度下降 + 学习率控制

这个讲解错误 → 分发责任 → 参数修改 的过程,就是反向传播机制


三、为什重要?

  • 没有反向传播,模型不知道哪里做错、怎么改

  • 它让复杂的深度网络高效训练成为可能

  • 自动微分(autograd) 紧密配合,在 PyTorch、TensorFlow 中自动实现


四、用生活例子解释:神经网络 = 烹饪机器人

你训练一个“烹饪机器人”去煮拉面,目标是做出你最喜欢的味道(目标值),但它一开始啥都不会,只是随机放盐、加水、煮时间。

4.1 第一步:尝一口(前向传播)

机器人做出一碗面,把你喜欢的味道(真实标签)和当前煮出来的味道(模型预测)比较一下,发现:“好咸!” → 这是误差(损失)。

4.2 第二步:倒着推原因(反向传播)

你开始反思:

  • 是不是 放盐放多了? → 盐权重太大

  • 是不是 加水太少了? → 水权重太小

  • 是不是 煮太久? → 时间权重也得改

你根据这“错误反馈”,倒着推回去判断每个步骤出错的程度,就像:

  • 盐的锅 → 错得最多 → 调整幅度大

  • 时间锅 → 错得少 → 微调一下

  • 水锅 → 也有点锅 → 适当改改

这就像神经网络在用“反向传播”去告诉各层参数:

“你们在这次预测里,谁错得多?谁需要调得多?”


五、 换成人工智能流程说一遍

1.前向传播:模型输入特征(如图像),输出预测(如猫概率 0.6)

2.损失函数计算:真实标签是猫(1),模型预测错了 → 损失=0.4

3.反向传播

  • 损失=0.4 是怎么造成的?

  • 是哪个权重、哪一层导致输出偏差?

  • 用链式法则从输出层一直“往回推”,逐层找出“是谁的锅”

4.得到梯度:每个权重知道了“我该往哪边调?调多少?”

5.更新参数:根据学习率调整权重,模型变得更聪明


六、图示类比:找山顶(最优参数)

你现在站在一座山上(参数空间),目标是走到山顶(最优解)
前向传播 = 你往前试探了一步
损失 = 你这一步高了还是低了?
反向传播 = 你回头总结:刚才这一步是哪里走错了?
→ 该往哪调,往哪儿走,走多远?


七、总结一句人话

反向传播=模型做错了题,老师倒着讲解每一层是怎么导致错误的,然后每一层的“权重”都根据自己的“责任大小”去做调整。


八、PyTorch代码示例:亲眼看到每一层的梯度

import torch
import torch.nn as nn# 简单的数据:y = 2x + 3,添加一点噪声
x = torch.unsqueeze(torch.linspace(-1, 1, 10), dim=1)  # shape [10, 1]
y = 2 * x + 3 + 0.1 * torch.randn(x.size())# 定义一个两层神经网络:Linear -> ReLU -> Linear
model = nn.Sequential(nn.Linear(1, 2),  # 第一层:输入1 -> 输出2nn.ReLU(),nn.Linear(2, 1)   # 第二层:输入2 -> 输出1
)# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)# 训练一步,观察梯度
y_pred = model(x)                    # 前向传播
loss = criterion(y_pred, y)         # 计算损失
print(f"前向传播完成,损失 = {loss.item():.4f}")loss.backward()                     # 反向传播(计算梯度)print("\n=== 各层参数及其梯度 ===")
for name, param in model.named_parameters():print(f"{name}:\n 权重/偏置值:\n{param.data}")print(f" 梯度:\n{param.grad}\n")

【运行结果】 

model.0.weight:
 权重/偏置值:
tensor([[0.23],
            [0.14]])
 梯度:
tensor([[0.51],
            [0.26]])

【解读分析】 

 这里运行了一个简单神经网络:

model = nn.Sequential(nn.Linear(1, 2),  # 输入 1 个数,输出 2 个特征nn.ReLU(),nn.Linear(2, 1)   # 把 2 个特征转为 1 个输出
)

这说明 model.0 是第一层的线性变换,即:

把输入 xxx(一个数)映射到两个神经元输出 → 有两个权重


【输出解释】

model.0.weight:权重/偏置值:
tensor([[0.23],[0.14]])梯度:
tensor([[0.51],[0.26]])

model.0.weight 是第一层的权重

✅ 第一部分:权重解释

tensor([[0.23],[0.14]])

表示第一层的两个神经元的权重分别是:

  • 第一个神经元的权重 = 0.23

  • 第二个神经元的权重 = 0.14

也就是说:

  • 如果输入 x=1.0,

  • 那么第一层输出是:

✅ 第二部分:梯度解释(关键点)

tensor([[0.51],[0.26]])

这是 每个权重的梯度,也就是反向传播告诉每个参数“你错了多少”

  • 第一个神经元的权重误差影响程度 = 0.51

  • 第二个神经元的权重误差影响程度 = 0.26

也就是说:

如果我们要减小损失函数,让模型更准,那第一个神经元的权重要 往负梯度方向调整 0.51 × 学习率,第二个权重要调 0.26 × 学习率。

  • param.grad 就是这个权重的梯度(反向传播后产生)

通过它你可以清晰看到每层参数的梯度是多少,知道反向传播真的在起作用!


九、梯度 = 损失函数对参数的偏导数

它的含义可以总结为:

你改动这个权重一点点,损失函数会怎么变?

所以:

  • 梯度大 → 这个参数对误差影响大 → 要重点调整

  • 梯度小 → 影响小 → 小调或者不调


十、类比总结

项目类比
权重决策参数,比如调味量
前向输出最终预测结果
梯度“你调多了/少了”的批评建议程度
学习率 × 梯度你该往回修正的量(用于更新权重)
http://www.lqws.cn/news/503713.html

相关文章:

  • 使用argparse封装python程序为命令行工具
  • C++ 第二阶段:模板编程 - 第一节:函数模板与类模板
  • Linux线程概念及常用接口(1)
  • 数据分箱:科学分类的简单指南
  • 轻量级小程序自定义tabbar组件封装的实现与使用
  • MediaMarktSaturn EDI 对接指南:欧洲零售卖场的数字化协同范例
  • 火山引擎向量数据库 Milvus 版正式开放
  • 竹云受邀出席华为开发者大会,与华为联合发布海外政务数字化解决方案
  • 【MATLAB代码】基于MVC的EKF和经典EKF对三维非线性状态的滤波,提供滤波值对比、误差对比,应对跳变的观测噪声进行优化
  • 安全报告:LLM 模型在无显性攻击提示下的越狱行为分析
  • SSE和Kafka应用场景对比
  • taro小程序,tailwindcss的bg-x-x,背景颜色不生效,只有自定义的写法颜色才生效
  • Qt面试题汇总
  • 在微服务中使用 Sentinel
  • PYTHON从入门到实践3-变量
  • LayUI的table实现行上传图片+mvc
  • JavaEE初阶第四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(二)
  • 在 .NET Core WebAPI 项目中,执行文件(.exe)方式运行并指定端口
  • Python实例题:Web 爬虫与数据可视化
  • 《AI大模型核心技术揭秘与商业落地实战》学习内容系统总结
  • Android APP内切换语言无感重启到当前界面
  • Jenkins+Jmeter+Ant接口持续集成
  • 6.24_JAVA_微服务_Elasticsearch搜索
  • Temporal Join,一探究竟
  • 【服务器】教程 — Linux上如何挂载服务器NAS
  • GitHub Actions 的深度解析与概念介绍
  • 智能制造——解读基于AI框架的智能工厂设计思路【附全文阅读】
  • 【论文阅读 | CVPRW 2023 |CSSA :基于通道切换和空间注意力的多模态目标检测】
  • CSS 实现文本溢出省略号(三种主流方式,适配单行 多行)
  • PHP 华为云H5上传文件:临时链接上传文件和POST表单直传