初识pytorch:更新网络参数的反向传播、损失函数和优化器

news/2025/10/16 19:36:40/文章来源:https://www.cnblogs.com/wodetiansama/p/19146448

目录
  • 反向传播、损失函数和优化器
    • 这三者之间的联系
    • 损失函数(Loss Function),模型优化的“指南针”
    • 反向传播(Backpropagation):参数优化的 “路径规划”
    • 优化器:参数优化的执行者

——————————————————————————————————————————————————————————————————————————————————————————————————————————

反向传播、损失函数和优化器

在之前的章节中我们讲述了关于数据部分和网络结构部分的知识,在这一章节里面我们将讲到反向传播和损失函数相关的知识

这三者之间的联系

在 PyTorch 中,损失函数(Loss Function)、反向传播(Backpropagation)和优化器(Optimizer)是模型训练流程中紧密协作的三个核心组件,它们共同构成了参数更新的完整闭环。三者的联系可概括为:损失函数提供误差量化,反向传播计算参数梯度,优化器利用梯度更新参数。

示例代码:

# 1. 定义模型、损失函数、优化器
model = MyModel()
criterion = nn.CrossEntropyLoss()  # 损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)  # 优化器# 2. 训练循环
for inputs, labels in dataloader:# 前向传播:计算预测值outputs = model(inputs)# 计算损失(损失函数的核心作用)loss = criterion(outputs, labels)  # 量化预测误差# 反向传播:计算梯度(依赖损失值)optimizer.zero_grad()  # 清空上一轮梯度loss.backward()        # 自动计算所有参数的梯度(存储在 param.grad 中)# 优化器更新参数(依赖梯度)optimizer.step()       # 根据梯度调整模型参数

损失函数(Loss Function),模型优化的“指南针”

损失函数是衡量模型预测结果与真实标签之间差异程度的函数,其输出值(损失值,Loss)越小,说明模型预测越准确。它是模型训练的 “目标”—— 我们的最终目的是通过调整参数使损失值最小化。

1. 核心作用

量化误差:将 “预测是否准确” 转化为可计算的数值(如分类任务中预测类别与真实类别不符的程度)。
指导参数更新:损失函数的梯度(对每个参数的偏导数)是反向传播的核心依据,决定了参数调整的方向和幅度。

2. 常见损失函数及适用场景

损失函数类型 适用场景
均方误差(MSE) 回归任务(如房价预测、温度预测)
交叉熵损失(Cross-Entropy) 分类任务(如图片分类、情感分析)
二元交叉熵(BCE) 二分类任务(如垃圾邮件检测)
三元组损失(Triplet Loss) 相似度学习(如人脸识别、推荐系统)

反向传播(Backpropagation):参数优化的 “路径规划”

反向传播是一种高效计算梯度的算法,它根据损失函数的输出(损失值),从模型的输出层开始,逐层反向计算损失对每个参数(权重、偏置)的偏导数(梯度),最终指导参数更新。

1. 核心原理:链式法则
神经网络的计算是 “正向” 的(输入→隐藏层→输出),而梯度计算是 “反向” 的,依赖微积分中的链式法则.
通俗理解:反向传播像 “多米诺骨牌”,从输出层的损失出发,依次计算每一层参数对损失的 “贡献度”(梯度),最终传递到输入层附近的参数。

正向传播:输入数据通过网络计算,得到预测值,并通过损失函数计算损失L。

反向传播:
- 从输出层开始,计算损失L对输出层参数(如最后一层权重)的梯度;
- 利用链式法则,将梯度传递到前一层,计算损失对隐藏层参数的梯度;
- 重复上述步骤,直到计算出所有参数的梯度。

参数更新:根据梯度和优化器调整参数,使损失减小。

优化器:参数优化的执行者

优化器(Optimizer)是深度学习模型训练的核心组件,其作用是根据反向传播计算出的梯度,调整模型参数(权重、偏置等),以最小化损失函数。简单来说,优化器是 “参数调整的策略”,直接影响模型的收敛速度和最终性能。

一、优化器的核心目标
深度学习的本质是优化问题:通过调整模型参数 w,使损失函数 L(w)达到最小值。优化器的任务就是:
1.利用反向传播得到的梯度 ∇L(w)(参数对损失的影响程度);
2.按照特定规则更新参数 w 。

二、优化器的核心要素
1.学习率(Learning Rate, lr)
控制参数更新的步长(lr越大,更新越激进;过小则收敛慢)。是优化器最关键的超参数。

2.梯度利用方式
不同优化器的核心差异在于 “如何利用当前梯度和历史梯度”,例如:

  • 基础优化器仅用当前梯度;
  • 高级优化器会结合历史梯度的均值、方差等信息。

3.正则化机制
部分优化器支持权重衰减(Weight Decay),通过对参数大小施加惩罚,防止模型过拟合。

三、常见优化器及分类

优化器名称 优化器类型 适用场景
随机梯度下降(SGD) 基础优化器 数据量大、作为基准对比,或配合学习率调度器使用。
SGD + 动量(Momentum) 基础优化器 比纯 SGD 收敛更快,适合非凸优化问题(多数深度学习场景)。
Adam 自适应学习率优化器:自动调参 收敛快、稳定性好,对超参数不敏感,是多数场景的默认选择。
AdamW 自适应学习率优化器:自动调参 预训练模型(如 BERT、GPT)、需要强正则化的任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Composition API 与 React Hook 很像,区别是什么?

从 React Hook 的实现角度看,React Hook 是根据 useState 调用的顺序来确定下一次重渲染时的 state 是来源于哪个 useState,所以出现了以下限制:不能在循环、条件、嵌套函数中调用 Hook; 必须确保总是在你的 React…

题解:CF1483E Vabank

题意:交互题。现在有个隐藏的数 \(M\),你可以询问 \(X\) 和 \(M\) 的大小关系,如果 \(X\le M\) 则你会增加 \(X\) 块钱,如果 \(X>M\) 你需要支付 \(X\) 块钱,如果你付不起就挂了。初始有 \(1\) 块钱,要找出 \…

20251016 正睿二十连测

正睿二十连测 C 最后的 DP 比较神奇,花了至少 \(1h\) 才搞懂。 给定 \(n, k\),问有多少长度为 \(n\) 的排序能在至多 \(k\) 次 “双向冒泡排序” 后变得有序。一个经典的套路:对于每个 \(x\),将 \(\le x\) 的数看成…

[贝佐斯-六页纸]

1) 结论先行,明确要做什么 2)原因,解决什么问题 3)打算怎么做,和之前做法不同 4)验证效果 5)讨论分析,关键控制点 6)总结,谁具体负责。

cc

#include <stdio.h> main() {int a=1,i,j=10000,m=0,n;for(j=10000;j>=0;j--){m=0;n=j;for(i=1;i<=9;i++)n=n/2-1;if(n==1){m=1;break;}} }getch();}

感知节点@7@ ESP32+arduino+ 第五个程序FreeRTOS 上 增加一个新任务ADC任务

思路:1、提出AI得到初始化+Loop代码2、将初始化+Loop代码,修改为任务函数3、为此任务函数,创建一个新任务,并执行。1、提问AI: ESP32 ADC arduino 编程,使用ADC读取输入两路电压信号,范围0-3.3V 给出代码:// 定…

2025年10月切削液厂家 TOP 企业品牌推荐排行榜,全合成切削液,半合成切削液,微乳切削液推荐这十家公司!

在金属加工行业中,切削液扮演着极为关键的角色,其性能优劣直接关乎加工效率、产品质量以及设备寿命。然而,当下切削液市场存在诸多问题。一方面,市场上切削液产品种类繁杂,质量参差不齐,这使得采购者在选择时面临…

普源精电RIGOL DS2202A示波器保存波形到CSV文件过慢解决方法:保存为WFM格式、通过LAN接口使用SCPI+PyVISA控制

提示:本文包含AI编写的代码。 前言 最近我正在研究学校的这个包浆示波器,发现它在保存内存所有采样点为CSV文件时的速度非常堪忧,于是准备研究一下解决办法。 通过自行搜索和询问群友,我找到了以下两种方法。 方法…

动手学深度学习——引言

机器学习中的关键组件 1.数据 数据集由一个个样本组成。样本由一组特征或者协变量组成 2.模型 深度学习的模型由神经网络交织在一起构成。 3.目标函数 一个定义的函数,希望优化它到最小值。有时候被称为损失函数,但是…

CF1989E Distance to Different

首先想一想最终的 \(b\) 的形式应该是什么样子,我们断言:\(b\) 为左右两边各接了一个单调下降和单调上升的段,中间一定可以被划分为若干个单峰回文子段。发现子段内元素必定固定,所以考虑 DP 段的个数,此时除了旁…

详细介绍:学习:uniapp全栈微信小程序vue3后台(29)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

lianxi

import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from multiprocessing import freeze_support import sys def load_data(): tran…

AngularJS:构建更智能的Web应用框架

AngularJS是一个强大的JavaScript MVC框架,通过扩展HTML语法、双向数据绑定和依赖注入等特性,让开发者能够更高效地构建动态Web应用。虽然官方支持已于2022年结束,但其设计理念和功能仍值得学习借鉴。AngularJS Ang…

给档案装上“智慧大脑”:文档抽取技术的四大赋能场景

随着数字化转型的深入,档案管理正从传统的实体保管向数字化、智能化的知识服务转变。在这一变革中,文档抽取技术作为自然语言处理和人工智能的关键分支,正扮演着愈发重要的角色。本文将深入探讨文档抽取技术如何重塑…

P11816QOJ1250 Pionki 轮廓线DP

判定有解是一个比较经典的Hall定理。 也即,将 \(a\) 看作正数,将 \(b\) 看作负数,那么一个在 \((i,j,k)\) 的 \(1\),可以与一个在 \((a,b,c)(a\ge i,b\ge j,c\ge k)\) 的 \(-1\) 进行匹配。 根据 Hall 定理,有 \(…

Zookeeper 技术详细介绍 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Bug——PaddleX人脸识别报错:Process finished with exit code -1073741819 (0xC0000005) - 教程

Bug——PaddleX人脸识别报错:Process finished with exit code -1073741819 (0xC0000005) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !…

linux系统scatter/gather I/O技术

struct iovec 是一种用于分散/聚集 I/O 操作的数据结构,它允许在一次系统调用中从多个非连续内存缓冲区读取或写入多个非连续内存缓冲区。 该结构通常与 readv 和 writev 等函数一起使用。#include <sys/uio.h>…

PostgreSQL 为什么不选择 B+ 树索引? - Lafite

我们知道,MySQL 的索引设计使用了 B+Tree,而 PostgreSQL 使用了 B-Tree, 那 PostgreSQL 为什么不使用 B+Tree 做索引结构呢?今天就来聊一聊这个话题。 B+Tree 和 B-Tree B+TreeB+Tree 主键索引的叶子节点存储数据,…

Joeys shell

您熟悉bash的语法吗?"Youre afraid of bugs? Get a bug!" --Joey Tribbiani, "FRIENDS". 想找个mini shell来看看源码,浏览了些网页,有“这玩意也配叫shell?”之感。bash-1.14.7.tar.gz 1996…