反向傳播及優化器

反向傳播(Backpropagation)

反向傳播是計算梯度的算法,核心作用是高效求解 “損失函數對模型所有參數的偏導數”(即梯度)。沒有反向傳播,深度學習的大規模訓練幾乎不可能實現。?

?

整個過程像 “從終點回溯到起點”,因此稱為 “反向傳播”。?

# 測試損失函數
loss=nn.CrossEntropyLoss()
for data in dataloader:imgs, targets = dataoutput = module(imgs)result_loss=loss(output,targets)# print(result_loss)# 反向傳播result_loss.backward()

優化器(Optimizer)

優化器的作用是根據反向傳播計算的梯度,更新模型參數,最終目的是減小損失。它是 “梯度→參數更新” 的執行者。

1. 核心目標

根據梯度調整參數,使損失函數盡可能小。基本邏輯是: \(參數_{新} = 參數_{舊} - 學習率 \times 梯度\) (“減梯度” 是因為梯度方向是損失增大的方向,反向才能減小損失)

2. 常見優化器及特點

不同優化器通過改進 “梯度使用方式” 提升效果,以下是主流優化器對比:

優化器

核心特點

適用場景

SGD

基礎版:直接用當前梯度更新(\(W = W - lr \cdot \nabla Loss\))

簡單模型、需要穩定收斂

SGD + 動量

模擬物理動量:保留部分歷史梯度,減少震蕩(適合非凸損失函數)

復雜模型(如 CNN)、避免局部最優

Adam

結合動量和自適應學習率(對不同參數用不同學習率),收斂快且穩定

大部分場景(推薦新手首選)

RMSprop

自適應學習率:對頻繁變化的參數用小學習率,稀疏參數用大學習率

處理非平穩目標(如 RNN)

?

無論哪種優化器,都需要指定兩個基礎參數

參數含義作用
params模型需要更新的參數(如?model.parameters()告訴優化器 “要調整哪些參數”(必須指定,否則無法定位更新對象)
lr(learning rate)學習率(核心超參數,通常取值?1e-31e-4?等)控制參數更新的 “步長”:
- 過大:可能跳過最優解(不收斂);
- 過小:收斂太慢或陷入局部最優

?其他參數 依據各個優化器算法的不同而不同


?

代碼案例:?

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoaderdataset = torchvision.datasets.CIFAR10("../torchvision_dataset", train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset, batch_size=1)class MyModule(nn.Module):def __init__(self):super().__init__()self.model1 = Sequential(Conv2d(3, 32, 5, stride=1, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, stride=1, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, stride=1, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10),)def forward(self, x):x = self.model1(x)return xmodule = MyModule()
loss=nn.CrossEntropyLoss()
# 隨機梯度下降(SGD)優化器
optim=torch.optim.SGD(module.parameters(),lr=0.001)
for epo in range(20):running_loss=0for data in dataloader:# 每次訓練前,先把各個梯度設為0optim.zero_grad()imgs, targets = dataoutput = module(imgs)result_loss=loss(output,targets)# 反向傳播,依據鏈式法則計算各個梯度result_loss.backward()optim.step()running_loss=result_loss+running_lossprint(running_loss)

看幾輪訓練結果的損失函數值變化?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90292.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習深度學習】生成式模型的評估與驗證

目錄 前言 1. 主觀評估:以人為本的質量判斷 1.1 什么是主觀評估? 1.2 主觀評估的核心流程 1.3 主觀評估的優缺點 2. 客觀評估:量化的性能衡量 2.1 什么是客觀評估? 2.2 常見的客觀評估指標 文本生成 圖像生成 多模態生…

Linux文件——Ext2文件系統(3)_軟硬鏈接

文章目錄文件的軟硬鏈接軟鏈接硬鏈接軟硬鏈接對比軟硬鏈接應用軟硬鏈接注意事項總結文件的軟硬鏈接 本篇文章將重點講解文件系統中的一個重要的知識點: 即文件的軟硬鏈接。 軟鏈接 對于軟鏈接的講解,我們先來使用一個指令看看效果:ln -s 被…

Java SE:類與對象的認識

Java中的類與對象:構建程序世界的基石 在Java編程的世界里,類與對象是面向對象編程(OOP)的核心概念,它們就像構建大廈的磚瓦,支撐起整個程序的結構。理解類與對象,是掌握Java編程的關鍵一步。 類…

Hexo - 免費搭建個人博客03 - 將個人博客托管到github,個人博客公開給大家訪問

導言我的博客:https://q164129345.github.io/ 既然要將個人博客托管到github,首先我們肯定要有一個github賬戶。另外也需要在電腦上安裝另外一個著名的代碼管理工具git。 一、創建github倉庫二、在Hexo設置部署的內容# Deployment## Docs: https://hexo.…

一次Oracle集群腦裂問題分析處理

問題描述 填寫問題的基礎信息。 系統名稱 數據庫集群 IP地址 xxxxxx 操作系統 Linux 數據庫 Oracle 11.2.0.4 癥狀表現 問題的癥狀表現如下 4月26號晚22點02分左右,HIS集群發生腦裂,十幾分鐘后(22.18)一節點集群率先獲…

0基礎法考隨手筆記 02(刑訴法專題04 辯護與代理)

0基礎法考隨手筆記 02(刑訴法專題04 辯護與代理) 1.值班律師相關權力義務2. 3. 4.什么是強制醫療 注意:為強制醫療指派的律師,是訴訟代理人,不是辯護人,因為此人不會被追究刑事責任。 “強制醫療” 是刑事訴…

HF86611_VC1/HF86611Q_VC1:多通道USB HiFi音頻解碼器固件技術解析

引言隨著音頻技術的不斷發展,多通道音頻處理和多接口兼容性成為現代音頻設備的重要需求。本文將介紹一款基于XMOS XU316技術的多通道USB HiFi音頻解碼器固件——HF86611_VC1/HF86611Q_VC1,這是一款專為多接口HiFi音頻應用設計的軟件解決方案。產品概述HF…

python---列表(List)

文章目錄創建列表基本操作訪問元素(索引)切片操作修改列表常用方法列表推導式多維列表列表是 Python 中最基本、最常用的數據結構之一,它是一個有序的可變集合,可以包含不同類型的元素。創建列表 # 空列表 empty_list [] empty_…

ESP32-S3學習筆記<3>:UART的應用

ESP32-S3學習筆記<3>:UART的應用1. 頭文件包含2. UART的配置2.1 uart_num的選擇2.2 uart_config的設定2.2.1 baud_rate/波特率設置2.2.2 data_bits/數據位數設置2.2.3 parity/奇偶校驗位設置2.2.4 stop_bits/停止位設置2.2.5 flow_ctrl/流控位…

【Vue3】加載高德地圖案例

官方API:展示地圖-入門教程-地圖 JS API 2.0 | 高德地圖API 1、獲取高德Key 參考:準備-地圖 JS API 2.0 | 高德地圖API 2、創建工程 npm create vitelatest 3、下載依賴集運行項目 npm install npm i amap/amap-jsapi-loader --save npm run dev 4、編寫核心…

【工具】Pycharm隱藏側邊燈泡提示

問題描述 在Pycharm中,每行前面很容易出現一個小燈泡,有時候很影響操作,需要將其取消掉設置方法打開設置 按 CtrlAltS 打開設置對話框或者通過菜單 File → Settings(在 macOS 上是 PyCharm → Preferences)導航到外觀…

XSS相關理解

由于本人對一小部分dom型xss、原型鏈污染和存儲型xss理解不夠透徹,因此在本篇文章中原型鏈污染和存儲型xss偏重進行概念理解或簡單的代碼理解,隨后會慢慢補充 文章目錄1 XSS概述1.1 什么是XSS?1.2 XSS主要分三種類型2 XSS基礎2.1 XSS基礎練習…

Odoo:免費開源的金屬制品行業ERP管理軟件

引言開源智造Odoo數字化解決方案專家團隊意識到,在當今全球市場中,將盈利能力和競爭力最大化的機會促使許多金屬制品制造商投資于推進業務發展的新技術。金屬制品會計軟件是企業用來處理他們業務和增加利潤的解決方案。某金屬制品加工工藝流程圖&#xf…

Ubuntu22.04配置GTest測試框架

前言 鴻蒙系統的代碼倉庫使用GTest作為單元測試的工具。特性開發時,需要寫demo以驗證開發思路。因此有必要搭建GTest開發環境配合鴻蒙特性開發做開發demo。 我測試環境是wsl2 Ubuntu22.04 LTS。 搭建過程 安裝必備C組件 sudo apt install -y unzip g gcc cmake …

學習日志15 python

1 filter() 函數filter(function, iterable)filter函數是python中的高階函數, 第一個參數是一個篩選函數, 第二個參數是一個可迭代對象, 返回的是一個生成器類型, 可以通過next獲取值。filter() 函數是 Python 內置的高階函數,其主要功能是對可迭代對象中的每個元素…

Linux 環境下安裝 MySQL 8.0.34 二進制 詳細教程 附docker+k8s啟動

文章目錄Linux 環境下安裝 MySQL 8.0(二進制)詳細教程準備工作安裝依賴包下載并解壓 MySQL下載 MySQL 二進制包解壓 MySQL移動目錄并創建 MySQL 用戶配置 MySQL配置數據目錄與日志目錄編輯配置文件 /etc/my.cnf初始化 MySQL 數據庫配置啟動腳本與環境變量…

HTML ISO-8859-1: 完全解析

HTML ISO-8859-1: 完全解析 引言 ISO-8859-1,又稱為 Latin-1,是一種廣泛使用的字符編碼標準,特別是在HTML文檔中。本文將詳細介紹ISO-8859-1編碼的特點、應用場景以及如何在使用HTML時正確地使用ISO-8859-1編碼。 ISO-8859-1編碼概述 定義 ISO-8859-1編碼是一種單字節編…

c++學習第3篇編輯器——centos7.9.2009系統離線安裝clion軟件并成功調試c++程序

遠程linux服務器安裝clion0 前提2個:1 下載CLion-2021.1.1.tar.gz安裝包2 上傳到linux系統并解壓3 修改linux系統里的/etc/ssh/sshd_config文件中的X11UseLocalhost 注釋去掉并設為no4 安裝xauth5 安裝MobaXterm軟件并使用ssh組件打開clion5.1 如果打不開clion,報錯…

20250722解決在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13出現找不到lz4的問題

20250722解決在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13出現找不到lz4的問題 2025/7/22 15:21緣起:在Ubuntu 24.04.2下編譯RD-RK3588開發板的Android13。 報錯:/bin/sh: 1: lz4: not found為了簡單起見,直接在 榮品的技術支持QQ群的 …

加載用戶設置時遇到錯誤找到一個帶有無效“icon“的配置文件。將該配置文件默認為無圖標。確保設置“icon“時,該值是圖像的有效文件路徑“

"C:\Users\Yourname\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json 修改所有icon字段位none 如:{"guid": "{bf61c995-08cc-4a56-b781-5dba411ef19c}","hidden": false,"icon&…