8.自动微分模块训练神经网络时最常用的算法就是反向传播。在该算法中参数(模型权重)会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度PyTorch内置了名为 torch.autograd 的微分引擎(自动微分模块)。一般来说,pytorch中模型的计算流程为前向计算 → 构建计算图 → 计算损失 → 反向传播 → 自动微分 → 优化器更新参数 自动微分负责“怎么算梯度” 反向传播是计算梯度的一种高效算法利用链式法则从后往前算 优化器拿到梯度后负责“怎么更新参数”8.1 前向传播与计算图的构建前向传播把输入数据xxx沿着神经网络层层递进,经过所有参数和激活函数的运算,最终得到输出结果的过程。计算图是一个有向无环图(DAG),由两部分组成节点(Nodes)张量(数据),参数(w和b)或操作(如加、减、乘、卷积、激活函数)。pytorch中,直接创建的张量被称为叶子节点(Leaf Tensor)边(Edges)代表数据的流向(即张量作为输入,经过运算,产生输出)。每执行一次前向传播,就是遍历一次模型代码,同时pytorch.autograd会遍历其中的所有数学运算,构建出计算图,在调用backward()时提供精确的“导数路线”。requires_grad和梯度累计你可以在张量初始化时指定requires_gradTrue或调用.retain_grad()来声明此张量数据是可训练的参数,对每个requires_gradTrue的叶子节点(Leaf Tensor),都会关联一个AccumulateGrad节点。同时,对requires_gradTrue具有传播性与其有关的张量都具备requires_gradTrue。每个requires_gradTrue的叶子节点(Leaf Tensor)其梯度都会被保存在内存中。AccumulateGrad结点是pytorch中自动微分引擎中一个特殊的、底层的 Function节点它专门负责接收反向传播来的梯度并将其累加到对应叶子张量的.grad属性中,直到调用zero_grad()才会将梯度清零。下图展示了一个简单的计算图,其数学表达式如下lossMSE(y,z),zw∗xb loss MSE(y,z) \quad ,z w * x blossMSE(y,z),zw∗xb在这个例子中,www和bbb的梯度计算方式为∂l∂w∂l∂z⋅∂z∂w2(w∗xb−y)∗x∂l∂b∂l∂z⋅∂z∂b2(w∗xb−y)∗1 \begin{align} \frac{\partial l}{\partial w} \frac{\partial l}{\partial z} \cdot \frac{\partial z}{\partial w} 2(w * x b - y) * x \\ \\ \frac{\partial l}{\partial b} \frac{\partial l}{\partial z} \cdot \frac{\partial z}{\partial b} 2(w * x b - y) * 1 \end{align}∂w∂l∂z∂l⋅∂w∂z2(w∗xb−y)∗x∂b∂l∂z∂l⋅∂b∂z2(w∗xb−y)∗1其中,∂l∂z2(z−y)\frac{\partial l}{\partial z} 2(z - y)∂z∂l2(z−y),被称为顶层误差信号。并在后续计算当中被传递到∂l∂w\frac{\partial l}{\partial w}∂w∂l和∂l∂b\frac{\partial l}{\partial b}∂b∂l之中。如定义初始常量x5,y0,w1,b3x5,y0,w1,b3x5,y0,w1,b3,可以得到其计算图的自顶向下的拓扑结构loss (grad_fnMseLossBackward0) ← 均方误差结点 (关联了z和y以及MSE的求导规则) └── z (grad_fnAddBackward0) ← 加法节点 (关联了b和w*x以及加法求导规则) ├── (左) MulBackward0 ← 乘法节点 (关联了w和x以及乘法求导规则) │ ├── w (叶子, AccumulateGrad) │ └── x (常量, 不追踪) └── (右) b (叶子, AccumulateGrad)其程序及pytorch的计算过程如下# 当X为标量时梯度的计算defscaler_grad_compute():xtorch.tensor(5)# 目标值: labelytorch.tensor(0.)# 设置要更新的权重和偏置的初始值wtorch.tensor(1,requires_gradTrue,dtypetorch.float32)btorch.tensor(3,requires_gradTrue,dtypetorch.float32)# 设置网络的输出值zw*xb# 设置损失函数,并进行损失的计算losstorch.nn.MSELoss()lossloss(z,y)# 自动微分loss.backward()# 打印 w,b 变量的梯度# backward 函数计算的梯度值会存储在张量的 grad 变量中print(fw-{w.grad})print(fb-{b.grad})scaler_grad_compute()计算顶层误差:∂l∂z2(z−y)2∗(wxb−y)16\frac{\partial l}{\partial z} 2(z - y) 2 * (wx b - y) 16∂z∂l2(z−y)2∗(wxb−y)16,并传递到AddBackward0(加法)节点中,此时loss、y、MSE被“移出”计算图。AddBackward0把误差信号复制成两份因为加法节点的梯度分流(左) 乘法结点根据乘法求导法则计算出www的梯度∂l∂w∂l∂z⋅∂z∂w16∗580\frac{\partial l}{\partial w} \frac{\partial l}{\partial z} \cdot \frac{\partial z}{\partial w} 16 * 5 80∂w∂l∂z∂l⋅∂w∂z16∗580,并传递给其叶子节点(右) 计算bbb的梯度∂l∂b∂l∂z⋅∂z∂b16∗116\frac{\partial l}{\partial b} \frac{\partial l}{\partial z} \cdot \frac{\partial z}{\partial b} 16 * 1 16∂b∂l∂z∂l⋅∂b∂z16∗116,由于其requires_gradTrue且为叶子节点(Leaf Tensor),其梯度都会被保存在内存中 b.grad16。此时、*、x(requires_gradFalse)被“移出”计算图,而w节点接收上层的梯度并保存 w.grad 80。ad16。此时、*、x(requires_gradFalse)被“移出”计算图,而w节点接收上层的梯度并保存 w.grad 80。这种通过计算图拓扑的方法简化了计算梯度的复杂度。这就是反向传播算法(Back Propagation)的核心思想。
企业数字化 ERP 产品动态
相关推荐
Qwen-Image 2.1是什么?ComfyUI官方AI文生图模型仓库速览:完整文件结构与能力一览 Qwen-Image 2.1是什么?ComfyUI官方AI文生图模型仓库速览:完整文件结构与能力一览 【免费下载链接】Qwen-Image-2.1 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/Qwen-Image-2.1
Qwen-Image 2.1 是 ComfyUI 官方适配的新一代 AI 文生… · 2026/9/24 14:29:30
自研Pogo Pin测试治具:从选针到Python脚本的完整实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:29:30
Skia demos.skia.org 本地运行指南:用本地 CanvasKit 构建调试 Web 2D 演示 图形学 【免费下载链接】skia Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions. 项目地址: https://gitcode.com/gh_mirrors/ski/skia 点击查看 免费下载 导读
本文围绕 Skia… · 2026/9/24 15:02:58
经典游戏 Hammurabi 的 MiniScript 移植:Basic Computer Games 单文件实现与运行指南 示例工程 【免费下载链接】basic-computer-games An updated version of the classic "Basic Computer Games" book, with well-written examples in a variety of common MEMORY SAFE, SCRIPTING programming languages. See https://coding-horror.github.io/basic… · 2026/9/24 15:02:39
欧姆龙NJ/NX PLC的FINS通信与Node-RED可视化实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:02:14
擦亮眼睛!不是所有 AI 都能写论文,2026 导师信赖工具清单 每年毕业季,无数同学深陷论文难题:开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对这些痛点,许多学生转向通用型AI工具寻求帮助,但市面上的AI工具普遍存在编造虚假参考文献、… · 2026/9/24 15:02:14
综科智控以太网IO模块Modbus TCP协议深度解析与半导体产线实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 15:02:14
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44