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)的大门。

相关推荐
心态与习惯13 分钟前
人工智能对管理科学与工程科研的冲击
人工智能·科研·读博·冲击·管科
sinat_2869451914 分钟前
gitnexus vs graphify
人工智能
Ztopcloud极拓云视角19 分钟前
Claude Opus 4.8 实战接入指南:动态工作流 + 思考投入控制深度使用
大数据·人工智能·gpt·claude·deepseek
cxr82823 分钟前
高分子复合材料 AI 逆向设计合—— 认知基座与理论框架
人工智能·材料逆向设计合成
落叶无情25 分钟前
第二章 ICEF核心知识解读 第二节 ICEF:从“规律驱动提示“到“世界规律认知操作系统“的范式跃迁
人工智能
逻辑君26 分钟前
Foresight研究报告【20260014】
人工智能·深度学习
FserSuN26 分钟前
Machine Learning Specialization - Week 1, 9-20学习总结
人工智能·学习·机器学习
cxr82827 分钟前
高分子复合材料 AI 逆向设计合——核心生成引擎与物理约束架构
人工智能·架构·材料逆向合成
jiayong2329 分钟前
AI架构师面试问题与解答 - 机器学习基础篇
人工智能·机器学习
ZhengEnCi30 分钟前
09aba-将离散的 token ID 映射为连续的稠密向量
人工智能