今天咱们来聊聊深度学习里的 “核心引擎”—— 自动微分。刚学 PyTorch 的时候,我总在想:模型是怎么自己调整权重的?梯度又是怎么算出来的?其实这背后的关键就是自动微分。
这篇文章会从最基础的单轮更新讲起,一步步带你理解多轮训练中的梯度处理,最后结合实际案例看看怎么用自动微分推导权重和偏置的梯度。全程代码实操,保证通俗易懂!
一、先搞懂:什么是自动微分?
简单说,自动微分就是 PyTorch 帮我们自动计算导数(梯度)的功能。在深度学习里,我们需要通过梯度来调整模型的权重(比如让损失越来越小),手动算梯度不仅麻烦,还容易出错。有了自动微分,只需要一行代码就能搞定梯度计算,简直是炼丹必备!
二、单轮梯度更新:从 0 到 1 理解过程
咱们先从最简单的单轮更新开始,看看自动微分是怎么工作的。
代码实操:单轮更新示例
import torch # 1. 定义需要求导的权重(必须是浮点型,且开启requires_grad) w = torch.tensor([10, 20], requires_grad=True, dtype=torch.float) print('初始权重 w--->', w) print('初始梯度 w.grad--->', w.grad) # 刚开始没计算梯度,所以是None这里有两个关键点:
requires_grad=True:告诉 PyTorch"这个张量需要计算梯度"- 必须是浮点型(
dtype=torch.float):PyTorch 只对浮点张量支持自动微分
接下来定义一个简单的损失函数(可以理解为 “误差”),这里用