学习笔记|B 站 UP 主 刘二大人 《PyTorch深度学习实践》视频知识点总结
传送门 PyTorch深度学习实践——线性回归

1. 核心原理回顾

1.1 线性回归模型

线性回归的核心是拟合线性关系: y p r e d = w x + b y_{pred} = wx + b ypred=wx+b,其中:

  • w w w(权重)和 b b b(偏置)是模型可学习的参数
  • x x x 为输入特征, y p r e d y_{pred} ypred 为模型预测值。

1.2 损失函数

选择均方误差(MSE) 作为损失函数,衡量预测值与真实值的差距:
L o s s = 1 n ∑ i = 1 n ( y p r e d − y t r u e ) 2 Loss = \frac{1}{n}\sum_{i=1}^n (y_{pred} - y_{true})^2 Loss=n1i=1n(ypredytrue)2
损失值越小,代表模型拟合效果越好。

1.3 反向传播与参数更新

  • 前向传播:输入数据 → 计算 y p r e d y_{pred} ypred → 计算 Loss;
  • 反向传播:以 Loss 为起点,通过链式法则反向推导,计算 Loss 对 w w w b b b 的梯度:
    ∂ L o s s ∂ w = 2 n ∑ i = 1 n ( w x i + b − y t r u e ) ∗ x i \frac{\partial Loss}{\partial w} = \frac{2}{n}\sum_{i=1}^n (wx_i + b - y_{true}) * x_i wLoss=n2i=1n(wxi+bytrue)xi
    ∂ L o s s ∂ b = 2 n ∑ i = 1 n ( w x i + b − y t r u e ) \frac{\partial Loss}{\partial b} = \frac{2}{n}\sum_{i=1}^n (wx_i + b - y_{true}) bLoss=n2i=1n(wxi+bytrue)
  • 参数更新:利用梯度下降优化器,沿梯度反方向调整 w w w b b b,逐步减小 Loss。

2. 完整代码实现

import torch
import torch.nn as nn
import torch.optim as optim

# 1. 生成模拟数据
torch.manual_seed(42)  # 固定随机种子,保证结果可复现
x = torch.randn(100, 1)  # 输入特征:100个样本,1维特征
y_true = 3 * x + 2 + 0.1 * torch.randn(100, 1)  # 真实值:y=3x+2 + 少量噪声

# 2. 定义线性回归模型
class LinearRegression(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(1, 1)  # 输入维度1,输出维度1

    def forward(self, x):
        return self.linear(x)  # 前向传播逻辑

model = LinearRegression()

# 3. 定义损失函数和优化器
criterion = nn.MSELoss()  # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降,学习率0.01

# 4. 训练模型
epochs = 1000
for epoch in range(epochs):
    # 前向传播
    y_pred = model(x)
    loss = criterion(y_pred, y_true)

    # 反向传播 + 参数更新
    optimizer.zero_grad()  # 清空上一轮梯度(必须!否则梯度会累加)
    loss.backward()  # 自动反向传播,计算梯度
    optimizer.step()  # 更新参数

    # 打印训练过程
    if (epoch + 1) % 100 == 0:
        print(f"Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}")

# 5. 查看训练后的参数
w, b = model.linear.weight.item(), model.linear.bias.item()
print(f"\n训练后参数:w = {w:.4f}, b = {b:.4f}")

2.1 关键函数解析

  • nn.Linear(1, 1):PyTorch 内置线性层,封装了 w w w b b b 的初始化与前向计算;
  • optimizer.zero_grad():每次迭代前清空梯度,避免梯度累加导致参数更新错误;
  • loss.backward():PyTorch 自动完成反向传播,无需手动计算梯度(核心优势);
  • optimizer.step():根据反向传播得到的梯度,更新模型参数。

2.2 运行结果说明

训练完成后, w w w 会接近 3, b b b 会接近 2(因数据添加了噪声,不会完全相等),Loss 会持续下降至接近 0,说明模型成功拟合了线性关系。

更多推荐