PyTorch自動微分:從基礎到實戰

目錄

1. 自動微分是什么?

1.1 計算圖

1.2?requires_grad?屬性

2. 標量和向量的梯度計算

2.1 標量梯度

2.2 向量梯度

3. 梯度上下文控制

3.1 禁用梯度計算

3.2 累計梯度

4. 梯度下降實戰

4.1 求函數最小值

4.2 線性回歸參數求解

5. 總結


在深度學習中,自動微分是神經網絡訓練的核心機制之一。PyTorch通過torch.autograd模塊提供了強大的自動微分功能,能夠自動計算張量操作的梯度。今天,我們就來深入探討PyTorch的自動微分機制,并通過一些實戰案例來理解它的原理和應用。

1. 自動微分是什么?

在神經網絡訓練中,我們通常需要計算損失函數對模型參數的梯度,以便通過梯度下降法更新參數,從而最小化損失函數。手動計算梯度是非常繁瑣且容易出錯的,尤其是當網絡結構復雜時。自動微分通過自動構建計算圖并計算梯度,極大地簡化了這一過程。

1.1 計算圖

計算圖是自動微分的核心概念。它是一個有向圖,節點表示張量(Tensor),邊表示張量之間的操作。當我們對張量進行操作時,PyTorch會自動構建一個動態計算圖,并在反向傳播時沿著這個圖計算梯度。

例如:
在上述代碼中,x y 是輸入張量,即葉子節點,z 是中間結果,loss 是最終輸出。每一步操作都
會記錄依賴關系:
z = x * yz 依賴于 x y
loss = z.sum()loss 依賴于 z
這些依賴關系形成了一個動態計算圖,如下所示:

1.2?requires_grad?屬性

在PyTorch中,每個張量都有一個requires_grad屬性,用于指定是否需要計算梯度。如果requires_grad=True,則該張量的所有操作都會被記錄在計算圖中;如果requires_grad=False,則不會記錄操作,也不會計算梯度。

x = torch.tensor(1.0, requires_grad=True)
y = x ** 2
y.backward()
print(x.grad)  # 輸出梯度

2. 標量和向量的梯度計算

2.1 標量梯度

當我們對一個標量進行操作時,可以直接調用backward()方法來計算梯度。

x = torch.tensor(1.0, requires_grad=True)
y = x ** 2
y.backward()
print(x.grad)  # 輸出:tensor(2.)

2.2 向量梯度

對于向量,我們需要提供一個與輸出形狀相同的梯度張量作為backward()的參數。

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2
y.backward(torch.tensor([1.0, 1.0, 1.0]))
print(x.grad)  # 輸出:tensor([2., 4., 6.])

如果我們將輸出轉換為標量(例如通過求和),則可以直接調用backward()

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x ** 2
loss = y.sum()
loss.backward()
print(x.grad)  # 輸出:tensor([2., 4., 6.])

3. 梯度上下文控制

在某些情況下,我們可能不需要計算梯度,或者希望控制梯度的計算過程。PyTorch提供了幾種方式來控制梯度計算的上下文。

3.1 禁用梯度計算

使用torch.no_grad()上下文管理器可以臨時禁用梯度計算。

x = torch.tensor(1.0, requires_grad=True)
with torch.no_grad():y = x ** 2
print(y.requires_grad)  # 輸出:False

3.2 累計梯度

默認情況下,多次調用backward()會累計梯度。如果需要清零梯度,可以使用x.grad.zero_()

x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
for i in range(3):y = x ** 2loss = y.sum()if x.grad is not None:x.grad.zero_()loss.backward()print(x.grad)
# 輸出:tensor([2., 4., 6.])tensor([2., 4., 6.])tensor([2., 4., 6.])

4. 梯度下降實戰

4.1 求函數最小值

通過梯度下降法,我們可以找到函數的最小值。以下是一個簡單的例子,通過梯度下降法找到函數y = x^2的最小值。

x = torch.tensor([3.0], requires_grad=True)
lr = 0.1
epochs = 50
for epoch in range(epochs):y = x ** 2if x.grad is not None:x.grad.zero_()y.backward()with torch.no_grad():x -= lr * x.gradprint(f'Epoch {epoch}, x: {x.item()}, y: {y.item()}')

4.2 線性回歸參數求解

我們還可以通過梯度下降法求解線性回歸模型的參數。以下是一個簡單的線性回歸模型,通過梯度下降法求解參數ab

x = torch.tensor([1, 2, 3, 4, 5], dtype=torch.float)
y = torch.tensor([3, 5, 7, 9, 11], dtype=torch.float)
a = torch.tensor([1.0], requires_grad=True)
b = torch.tensor([1.0], requires_grad=True)
lr = 0.01
epochs = 1000
for epoch in range(epochs):y_pred = a * x + bloss = ((y_pred - y) ** 2).mean()if a.grad is not None and b.grad is not None:a.grad.zero_()b.grad.zero_()loss.backward()with torch.no_grad():a -= lr * a.gradb -= lr * b.gradif (epoch + 1) % 100 == 0:print(f'Epoch {epoch + 1}, Loss: {loss.item()}')
print(f'a: {a.item()}, b: {b.item()}')

5. 總結

通過這篇文章,我們學習了PyTorch的自動微分機制,包括:

  • 如何構建計算圖。

  • 如何計算標量和向量的梯度。

  • 如何控制梯度計算的上下文。

  • 如何通過梯度下降法求解函數最小值和線性回歸模型的參數。

自動微分是深度學習的核心技術之一,希望這篇文章能幫助你更好地理解和使用PyTorch的自動微分功能。

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

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

相關文章

Spring AI 項目實戰(十六):Spring Boot + AI + 通義萬相圖像生成工具全棧項目實戰(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4

從零到一:企業如何組建安全團隊

在這個"黑客滿天飛,漏洞遍地跑"的時代,沒有安全團隊的企業就像裸奔的勇士——雖然很有勇氣,但結局往往很悲慘。 📋 目錄 為什么要組建安全團隊安全團隊的核心職能團隊架構設計人員配置策略技術體系建設制度流程建立實施…

業務訪問控制-ACL與包過濾

業務訪問控制-ACL與包過濾 ACL的定義及應用場景ACL(Access Control List,訪問控制列表)是用來實現數據包識別功能的;ACL可以應用于諸多場景: 包過濾功能:對數據包進行放通或過濾操作。NAT(Netwo…

穿梭時空的智慧向導:Deepoc具身智能如何賦予導覽機器人“人情味”

穿梭時空的智慧向導:Deepoc具身智能如何賦予導覽機器人“人情味”清晨,當第一縷陽光透過高大的彩繪玻璃窗,灑在博物館光潔的地板上,一位特別的“館員”已悄然“蘇醒”。它沒有制服,卻有著清晰的指引;它無需…

PostgreSQL 查詢庫中所有表占用磁盤大小、表大小

SELECTn.nspname AS schema_name,c.relname AS table_name,-- 1?? 總大小(表 toast 索引)pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size,-- 2?? 表不包含索引(含 TOAST)pg_size_pretty(pg_total_relation_s…

日記-生活隨想

最近鼠鼠也是來到上海打拼(實習)了,那么秉持著來都來了的原則,鼠鼠也是去bw逛了逛,雖說沒票只能在外場看看😭。可惜幾乎沒有多少我非常喜歡的ip,不由感慨現在的二次元圈已經變樣了。雖說我知道內…

串口A和S的含義以及RT的含義

A async 異步S sync 同步RT 收發U A RT 異步U SA RT 同步/異步

spring cloud負載均衡分析之FeignBlockingLoadBalancerClient、BlockingLoadBalancerClient

本文主要分析被 FeignClient 注解的接口類請求過程中負載均衡邏輯&#xff0c;流程分析使用的依賴版本信息如下&#xff1a;<spring-boot.version>3.2.1</spring-boot.version><spring-cloud.version>2023.0.0</spring-cloud.version><com.alibaba.…

ref 和 reactive

文章目錄ref 和 reactive一、差異二、能否替代的場景分析&#xff08;1&#xff09;基本類型數據&#xff08;2&#xff09;對象類型數據&#xff08;3&#xff09;數組類型數據&#xff08;4&#xff09; 需要整體替換的場景三、替代方案與兼容寫法1. 用 reactive 模擬 ref2. …

BatchNorm 與 LayerNorm:原理、實現與應用對比

BatchNorm 與 LayerNorm&#xff1a;原理、實現與應用對比 Batch Normalization (批歸一化) 和 Layer Normalization (層歸一化) 是深度學習中兩種核心的歸一化技術&#xff0c;它們解決了神經網絡訓練中的內部協變量偏移問題&#xff0c;大幅提升了模型訓練的穩定性和收斂速度…

OcsNG基于debian一鍵部署腳本

&#x1f914; 為什么有了GLPI還要部署OCS-NG&#xff1f; 核心問題&#xff1a;數據收集的風險 GLPI直接收集的問題&#xff1a; Agent直接向GLPI報告數據時&#xff0c;任何收集異常都會直接影響資產數據庫網絡問題、Agent故障可能導致重復資產、錯誤數據、資產丟失無法對收集…

001_Claude開發者指南介紹

Claude開發者指南介紹 目錄 Claude簡介Claude 4 模型開始使用核心功能支持資源 Claude簡介 Claude 是由 Anthropic 構建的高性能、可信賴和智能的 AI 平臺。Claude 具備出色的語言、推理、分析和編程能力&#xff0c;可以幫助您解決各種復雜任務。 想要與 Claude 聊天嗎&a…

004_Claude功能特性與API使用

Claude功能特性與API使用 目錄 API 基礎使用核心功能特性高級功能開發工具平臺支持 API 基礎使用 快速開始 通過 Anthropic Console 獲取 API 訪問權限&#xff1a; 在 console.anthropic.com/account/keys 生成 API 密鑰使用 Workbench 在瀏覽器中測試 API 認證方式 H…

ReAct論文解讀(1)—什么是ReAct?

什么是ReAct&#xff1f; 在大語言模型&#xff08;LLM&#xff09;領域中&#xff0c;ReAct 指的是一種結合了推理&#xff08;Reasoning&#xff09; 和行動&#xff08;Acting&#xff09; 的提示方法&#xff0c;全稱是 “ReAct: Synergizing Reasoning and Acting in Lan…

【云服務器安全相關】服務器防火墻常見系統日志信息說明

目錄? 一、防火墻日志是做什么的&#xff1f;&#x1f6e0;? 二、常見防火墻日志信息及說明&#x1f9ea; 三、典型日志示例解析1. 被阻斷的訪問&#xff08;DROP&#xff09;2. 被允許的訪問&#xff08;ACCEPT&#xff09;3. 被拒絕的端口訪問4. 可疑端口掃描行為&#x1f…

011_視覺能力與圖像處理

視覺能力與圖像處理 目錄 視覺能力概述支持的圖像格式圖像上傳方式使用限制最佳實踐應用場景API使用示例視覺能力概述 多模態交互 Claude 3 系列模型具備強大的視覺理解能力,可以分析和理解圖像內容,實現真正的多模態AI交互。這種能力使Claude能夠: 圖像內容分析:理解圖…

ansible自動化部署考試系統前后端分離項目

1. ?ansible編寫劇本步驟1??創建roles目錄結構2??在group_vars/all/main.yml中定義變量列表3??在tasks目錄下編寫tasks任務4??在files目錄下準備部署文件5??在templates目錄下創建j2模板文件6??在handlers目錄下編寫handlers7??在roles目錄下編寫主playbook8??…

【AI論文】GLM-4.1V-Thinking:邁向具備可擴展強化學習的通用多模態推理

摘要&#xff1a;我們推出GLM-4.1V-Thinking&#xff0c;這是一款旨在推動通用多模態推理發展的視覺語言模型&#xff08;VLM&#xff09;。在本報告中&#xff0c;我們分享了在以推理為核心的訓練框架開發過程中的關鍵發現。我們首先通過大規模預訓練開發了一個具備顯著潛力的…

Linux進程通信——匿名管道

目錄 1、進程間通信基礎概念 2、管道的工作原理 2.1 什么是管道文件 3、匿名管道的創建與使用 3.1、pipe 系統調用 3.2 父進程調用 fork() 創建子進程 3.3. 父子進程的文件描述符共享 3.4. 關閉不必要的文件描述符 3.5 父子進程通過管道進行通信 父子進程通信的具體例…

sql:sql在office中的應用有哪些?

在Office軟件套件中&#xff0c;主要是Access和Excel會用到SQL&#xff08;結構化查詢語言&#xff09;&#xff0c;以下是它們在這兩款軟件中的具體應用&#xff1a; 在Access中的應用 創建和管理數據庫對象&#xff1a; 創建表&#xff1a;使用CREATE TABLE語句可以創建新的數…