news 2026/6/10 7:36:02

掌握反向传播算法原理与实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
掌握反向传播算法原理与实践

目录

一、前言

二、神经网络为什么需要学习

三、前向传播是什么

四、什么是反向传播

五、什么是梯度

六、反向传播的数学基础——链式法则

七、神经网络中的链式法则

八、为什么不能暴力计算梯度

九、反向传播完整流程

十、手动实现反向传播

十一、PyTorch中的自动求导

十二、训练神经网络中的反向传播

十三、梯度消失问题

十四、梯度爆炸问题

十五、现代深度学习如何解决

十六、反向传播与梯度下降的关系

十七、面试高频问题

什么是反向传播?

为什么需要反向传播?

反向传播的数学基础是什么?

loss.backward()作用是什么?

optimizer.step()作用是什么?

反向传播和梯度下降区别?

十八、总结


在学习深度学习时,你一定见过这样的代码:

loss.backward() optimizer.step()

很多初学者知道:

optimizer.step() 负责更新参数

但是:

loss.backward() 到底在干什么?

事实上:

梯度下降 负责更新参数

而:

反向传播(Back Propagation) 负责计算梯度

如果没有反向传播:

神经网络无法知道 每个参数应该如何调整

因此:

反向传播是神经网络能够学习的核心机制,也是现代深度学习最重要的基础算法之一。

本文将系统讲解:

什么是反向传播 为什么需要反向传播 链式法则 梯度计算过程 前向传播与反向传播关系 反向传播实现流程 PyTorch自动求导机制 实战案例解析

二、神经网络为什么需要学习

假设我们训练一个猫狗分类模型。

输入:

图片

输出:

猫 或者 狗

训练过程:

输入图片 ↓ 神经网络 ↓ 预测结果 ↓ 真实标签 ↓ 计算误差

例如:

真实值:1 预测值:0.3

说明:

模型预测错误

此时问题来了:

如何修改参数 让预测更准确?

这正是反向传播解决的问题。


三、前向传播是什么

神经网络预测过程称为:

Forward Propagation 前向传播

流程:

例如:

一个神经元:

输入:x=2 权重:w=3 偏置:b=1

计算:

z = wx + b

结果:

z = 2×3 + 1 z = 7

经过激活函数:

得到预测结果

这就是:

前向传播

四、什么是反向传播

前向传播完成预测后。

会计算损失:

Loss

例如:

真实值:10 预测值:8

损失:

Loss = 2

此时神经网络需要知道:

哪个参数导致误差? 应该修改多少?

于是:

从Loss开始 向后逐层计算梯度

这就是:

Back Propagation 反向传播

流程:

注意:

计算方向 与预测方向相反

因此称为:

反向传播

五、什么是梯度

梯度可以理解为:

参数变化 对Loss影响有多大

例如:

函数:

Loss = w²

导数:

dLoss/dw = 2w

假设:

w = 5

则:

梯度 = 10

说明:

当前参数偏离最优解较远

需要较大幅度调整。

如果:

w = 0.1

梯度:

0.2

说明:

已经接近最优解

六、反向传播的数学基础——链式法则

反向传播能够成功工作的核心原因:

链式法则(Chain Rule)

例如:

y = x² z = y + 1

那么:

z = x² + 1

求导:

dz/dx

链式法则:

dz/dx = dz/dy × dy/dx

计算:

dz/dy = 1 dy/dx = 2x

因此:

dz/dx = 2x

这就是反向传播的数学基础。


七、神经网络中的链式法则

假设:

x ↓ 神经元1 ↓ 神经元2 ↓ Loss

结构:

求:

Loss对X的影响

需要:

逐层求导

即:

Loss对H2求导 × H2对H1求导 × H1对X求导

这正是链式法则的应用。


八、为什么不能暴力计算梯度

假设:

GPT模型 拥有数百亿参数

如果采用:

每个参数单独求导

需要:

数百亿次计算

几乎无法完成。

而反向传播:

一次前向传播 + 一次反向传播

即可获得:

所有参数梯度

效率极高。

因此:

现代深度学习 必须依赖反向传播

九、反向传播完整流程

训练一次神经网络:

前向传播 ↓ 计算Loss ↓ 反向传播 ↓ 获得梯度 ↓ 梯度下降 ↓ 更新参数

完整结构:


十、手动实现反向传播

假设:

y = wx

训练数据:

x = 2 真实值 = 10

代码:

x = 2 y_true = 10 w = 1 lr = 0.1 for i in range(20): y_pred = w * x loss = (y_pred - y_true) ** 2 grad = 2 * (y_pred - y_true) * x w = w - lr * grad print(loss)

输出:

Loss不断下降

说明:

参数逐渐逼近最优值

十一、PyTorch中的自动求导

PyTorch内置:

Autograd

自动实现反向传播。

示例:

import torch x = torch.tensor( 2.0, requires_grad=True ) y = x ** 2 y.backward() print(x.grad)

输出:

4

因为:

y = x² dy/dx = 2x x=2 结果=4

十二、训练神经网络中的反向传播

完整示例:

import torch import torch.nn as nn model = nn.Linear(1,1) criterion = nn.MSELoss() optimizer = torch.optim.SGD( model.parameters(), lr=0.01 ) for epoch in range(100): pred = model(x) loss = criterion(pred,y) optimizer.zero_grad() loss.backward() optimizer.step()

其中:

loss.backward()

作用:

计算梯度

而:

optimizer.step()

作用:

更新参数

两者缺一不可。


十三、梯度消失问题

深层网络训练时:

梯度不断向前传播

可能出现:

越来越小

例如:

0.1 × 0.1 × 0.1 × 0.1

结果:

0.0001

导致:

前面层参数几乎无法更新

称为:

Gradient Vanishing 梯度消失

十四、梯度爆炸问题

另一种情况:

梯度越来越大

例如:

10 × 10 × 10 × 10

结果:

10000

导致:

参数剧烈震荡

称为:

Gradient Explosion 梯度爆炸

十五、现代深度学习如何解决

解决方案:

ReLU BatchNorm Residual Adam

例如:

ResNet

通过残差连接:

解决深层网络梯度传递问题

因此:

网络可以达到 几十层 上百层 甚至上千层

十六、反向传播与梯度下降的关系

很多人容易混淆。

实际上:

算法作用
反向传播计算梯度
梯度下降更新参数

关系:

反向传播 ↓ 获得梯度 ↓ 梯度下降 ↓ 更新参数

可以理解为:

反向传播 负责告诉你 该往哪里走 梯度下降 负责真正迈出这一步

十七、面试高频问题

什么是反向传播?

从Loss开始 利用链式法则 逐层计算梯度

为什么需要反向传播?

为了获得参数梯度

反向传播的数学基础是什么?

链式法则

loss.backward()作用是什么?

自动计算梯度

optimizer.step()作用是什么?

更新参数

反向传播和梯度下降区别?

反向传播计算梯度 梯度下降更新参数

十八、总结

反向传播是现代深度学习最重要的基础算法之一。

其核心流程:

前向传播 ↓ 计算Loss ↓ 反向传播 ↓ 获得梯度 ↓ 梯度下降 ↓ 更新参数

可以说:

如果梯度下降负责让模型不断进步,那么反向传播就是告诉模型应该如何进步。没有反向传播,就没有今天的深度学习、Transformer,更不会有 ChatGPT 和大语言模型。掌握反向传播,就是掌握神经网络学习机制的核心秘密。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 23:50:33

React Refs:深入理解与最佳实践

React Refs:深入理解与最佳实践 引言 在React中,refs是一种非常强大的工具,它允许我们直接访问DOM元素或组件实例。尽管refs在React的官方文档中并没有被重点介绍,但它们在许多场景下都非常有用。本文将深入探讨React Refs的概念、用法以及最佳实践。 什么是Refs? 在R…

作者头像 李华
网站建设 2026/6/10 7:36:02

八大网盘直链获取神器:如何彻底告别下载限速与客户端依赖?

八大网盘直链获取神器:如何彻底告别下载限速与客户端依赖? 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…

作者头像 李华
网站建设 2026/6/6 23:37:55

贝叶斯逆博弈与多模态融合在动态交互中的应用

1. 贝叶斯逆博弈框架解析在动态交互场景中,传统博弈论方法往往假设所有参与者的目标函数和策略空间完全已知,这在实际应用中存在明显局限。贝叶斯逆博弈通过引入概率建模,将对手目标函数的推断转化为后验分布估计问题。其核心数学形式可表示为…

作者头像 李华