203_深度学习的第一步:线性回归模型与 SGD 优化算法实战

线性回归试图学到一个线性模型,以尽可能准确地预测输出。在 PyTorch 中,我们可以通过简单的几行代码,实现从数据生成、模型构建到自动训练的全过程。

1. 线性回归的核心要素

线性回归模型可以表示为:

  • 训练数据 :特征 和标签
  • 模型参数 :权重 和偏差
  • 损失函数:均方误差(MSE Loss),用于衡量预测值与真实值之间的平方差。
  • 优化算法:小批量随机梯度下降(SGD),通过不断沿着梯度的反方向更新参数来最小化损失。

2. 核心代码:从零开始与简洁实现

对比手动实现(Scratch)与使用 PyTorch 官方库(nn.Module)的两种方式。以下是利用官方库的简洁实现

Python

复制代码
import torch
from torch import nn
from torch.utils import data

# 1. 生成或准备数据 (假设已有 features 和 labels)
def load_array(data_arrays, batch_size, is_train=True):
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset, batch_size, shuffle=is_train)

batch_size = 10
data_iter = load_array((features, labels), batch_size)

# 2. 定义模型结构
# Linear(输入特征数, 输出特征数)
net = nn.Sequential(nn.Linear(2, 1))

# 3. 初始化模型参数
net[0].weight.data.normal_(0, 0.01) # 权重初始化为均值为0,方差为0.01的正态分布
net[0].bias.data.fill_(0)          # 偏差初始化为0

# 4. 定义损失函数与优化器
loss = nn.MSELoss() # 均方误差损失
trainer = torch.optim.SGD(net.parameters(), lr=0.03) # 学习率为0.03的SGD

3. 训练过程:循环迭代

训练过程是不断从数据迭代器中获取批量数据,并更新参数的过程。

Python

复制代码
num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        # 前向传播:计算预测值与损失
        l = loss(net(X), y)
        
        # 反向传播:三步走
        trainer.zero_grad() # 1. 梯度清零
        l.backward()        # 2. 计算梯度
        trainer.step()      # 3. 更新参数
    
    # 打印每一轮后的总损失
    train_l = loss(net(features), labels)
    print(f'epoch {epoch + 1}, loss {train_l:f}')

4. 关键细节解析

为什么需要 DataLoader

在深度学习中,我们通常不一次性处理所有数据(内存压力大),也不一张一张处理(效率低)。DataLoader 帮助我们将数据分成一个个 Minibatch,这能在保证计算效率的同时,为优化过程引入一定的随机性,帮助模型跳出局部最优解。

net.parameters() 的作用

在定义优化器时,我们需要传入 net.parameters()。这告诉优化器:"你需要负责更新这个网络中所有的权重和偏差"。


5. 总结:深度学习的标准化样板

通过线性回归的学习,我们其实已经掌握了所有深度学习模型的通用模版:

  1. 数据流:Dataset -> DataLoader。
  2. 模型流:nn.Linear -> nn.Sequential。
  3. 计算流:Forward -> Loss -> Backward -> Step。

💡 学习小结

线性回归虽然简单,但它包含了深度学习的绝大部分基因。一旦你理解了权重如何根据梯度更新,你就已经推开了通往卷积神经网络(CNN)和循环神经网络(RNN)的大门。

相关推荐
ZhengEnCi21 小时前
09bad-斯坦福CS336作业一-构建优化器
人工智能
ZhengEnCi21 小时前
09bac-斯坦福CS336作业一-实现训练损失计算
人工智能
冬奇Lab21 小时前
Skill 系列(01):Skill 评测体系——如何量化一个 AI Skill 的质量
人工智能
IT_陈寒1 天前
Redis内存爆了,原来我漏掉了这个致命配置
前端·人工智能·后端
用户3521802454751 天前
🎆从 Prompt 到 Skill:让 Spring AI Agent 学会"装新技能"
人工智能·spring boot·ai编程
米小虾1 天前
手把手教你搭建第一个生产级AI Agent:从选型到实战的完整指南
人工智能·agent
任沫1 天前
Agent之Function Call
javascript·人工智能·go
米小虾1 天前
2026年AI Agent全面爆发:从开源生态到企业级应用的进化之路
人工智能·agent
用户6919026813391 天前
Vibe Coding 开发项目的基本范式
人工智能·设计模式·代码规范
To_OC1 天前
别再跟 AI 死磕 prompt 了,我写了个 Loop 让它自己改到满意为止
人工智能·aigc·agent