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

相关推荐
YFJ_mily36 分钟前
【会议征稿】第八届人本计算与数据智能国际会议(HCC 2026)| 广州12月召开,EI/Scopus稳定检索,多届收录无忧
机器学习·人机交互·ei会议·数据智能·rdlink研发家·人本计算·广州会议
江畔柳前堤6 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术6 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客6 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术6 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO7 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术7 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架8 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab8 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI8 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算