深度学习(李沐)线性回归笔记

在机器学习中,小批量数据训练(Mini-batch Training)是梯度下降法的一种实现方式,广泛用于深度学习模型的优化。其核心思想是:将整个训练数据分成多个小批次(mini-batch),每次使用一个批次的数据计算梯度并更新模型参数。以下是其完整原理及过程的详细解释:

一、为什么需要小批量训练?

1. 三种梯度下降法的对比
  • 全批量梯度下降(Batch GD)

    • 每次使用全部数据计算梯度。

    • 优点:梯度方向准确,收敛稳定。

    • 缺点:计算成本高(尤其大数据集),内存需求大。

  • 随机梯度下降(SGD)

    • 每次使用单个样本计算梯度。

    • 优点:计算快,内存占用小。

    • 缺点:梯度噪声大,收敛不稳定。

  • 小批量梯度下降(Mini-batch GD)

    • 折中方案:每次使用一小部分样本(如 32、64、128 个)计算梯度。

    • 优点:平衡计算效率与梯度稳定性,适合大规模数据。

2. 小批量训练的核心优势
  • 计算效率:利用 GPU 并行计算加速。

  • 内存友好:避免一次性加载全部数据。

  • 梯度质量:比单样本噪声小,比全批量更新频率高。

  • 二、小批量训练的全过程

    假设数据集有 N 个样本,批量大小为 B,则每个 epoch 需要 ⌈N/B⌉次迭代。以下为具体步骤:

    1. 数据预处理
  • 随机打乱数据:每个 epoch 开始时打乱数据顺序,防止模型学习到数据排列的偏差。

  • 分批次:将数据划分为多个小批量,例如:

    # 示例:总样本数 1000,批量大小 64 → 16 个完整批次(每批 64) + 1 个尾部批次(16)
    2. 迭代训练
  • For 每个小批量 in 所有批次

    1. 前向传播(Forward Pass)

      • 输入当前批次的样本 X_{batch}​,通过模型计算预测值\hat{y}_{batch}​。

      • 示例:线性模型 \hat{y}_{batch}=X_{batch}*W+b。

    2. 计算损失(Loss)

      • 使用损失函数(如均方误差 MSE、交叉熵 CrossEntropy)比较预测值 \hat{y} 与真实标签 \hat{y}_{batch}

      • 示例:L=\frac{1}{B}\sum_{1}^{B}\left ( \hat{y}_{i}-y_{i} \right )^{2}(平均损失)。

    3. 反向传播(Backward Pass)

      • 计算损失 L对模型参数(如权重 W、偏置 b)的梯度 \frac{\partial L}{\partial W}\frac{\partial L}{\partial b}

      • 注意:梯度计算基于当前批次的平均损失(若损失函数已取平均)。

    4. 参数更新

      • 使用梯度下降公式更新参数:

        W \leftarrow W - \eta \cdot \frac{\partial L}{\partial W}, \quad b \leftarrow b - \eta \cdot \frac{\partial L}{\partial b}
        其中 η 是学习率(learning rate)。
    5. 梯度清零

      • 清除当前批次的梯度,避免累加到下一个批次。

3. 完成一个 Epoch
  • 遍历完所有批次后,完成一次全数据集的学习。

  • 重复多个 epoch 直至模型收敛。

三、关键细节与公式推导

1. 梯度计算的数学原理
  • 假设模型参数为 θ,损失函数为 L,单个样本的损失为 Li。

  • 小批量梯度是批量内样本梯度的平均:

    \nabla_{\theta} L = \frac{1}{B} \sum_{i=1}^{B} \nabla_{\theta} L_i
  • 参数更新公式

    \theta \gets \theta - \eta \cdot \nabla_{\theta} L
2. 批量大小的影响
  • 大批量(如 1024):

    • 梯度估计更准,但每次更新计算量大。

    • 可能陷入局部最优,需要更大的学习率。

  • 小批量(如 32):

    • 梯度噪声大,但更新频率高,可能逃离局部最优。

    • 更适合分布式计算和 GPU 加速。

3. 损失函数的处理
  • 总和损失 vs 平均损失

    • 若损失函数计算的是批次内总和(如 loss = sum((y_pred - y)^2)),梯度需手动除以 B。

    • 若损失函数计算的是平均损失(如 loss = mean((y_pred - y)^2)),梯度已自然归一化。

四、可视化流程 

原始数据集

├── 打乱顺序 → [样本3, 样本7, 样本1, ..., 样本N]

├── 分批次 → Batch1: [样本3, 样本7, ...], Batch2: [...], ..., BatchK: [...]

└── 逐批次训练:
      前向传播 → 计算损失 → 反向传播 → 更新参数 → 梯度清零
      (循环直至所有批次完成)

五、代码示例(结合 PyTorch)

import torch
from torch.utils.data import DataLoader, TensorDataset

# 假设 features 和 labels 是训练数据
dataset = TensorDataset(features, labels)
dataloader = DataLoader(dataset, batch_size=64, shuffle=True)

model = torch.nn.Linear(input_dim, output_dim)  # 简单线性模型
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
loss_fn = torch.nn.MSELoss()

for epoch in range(num_epochs):
    for X_batch, y_batch in dataloader:
        # 前向传播
        y_pred = model(X_batch)
        # 计算损失(PyTorch 默认取平均)
        loss = loss_fn(y_pred, y_batch)
        # 反向传播
        loss.backward()
        # 参数更新
        optimizer.step()
        # 梯度清零
        optimizer.zero_grad()

目前先关注流程部分

六、总结

小批量训练通过折中全批量与随机梯度下降,实现了:

  1. 高效计算:利用硬件并行性加速。

  2. 内存优化:避免一次性加载全部数据。

  3. 稳定收敛:梯度噪声适中,更新方向更可靠。

实际应用中,批量大小(batch size)和学习率(learning rate)是需调参的关键超参数,通常通过实验选择最优组合。

### 如何获取李沐撰写的深度学习相关笔记的PDF文件 对于希望获取李沐撰写的《动手学深度学习笔记PDF版本的需求,可以通过以下方式实现: #### 官方资源 官方提供了在线阅读和下载的方式。具体来说,《动手学深度学习》这本书籍及其配套资料可以在其官方网站上找到。书籍支持多种编程语言环境下的实践操作指南[^1]。 - **项目地址**: 提供了完整的源码和文档托管服务,访问链接为 [GitCode](https://gitcode.com/Open-source-documentation-tutorial/d8d79)。 通过该仓库可以直接克隆或下载所需的内容,其中包括详细的笔记、代码示例以及其他辅助材料。 #### 社区贡献版 除了官方渠道外,在社区中也有许多爱好者整理并分享了自己的学习心得与总结。例如有用户基于李沐老师的视频教程制作了一系列详尽的学习笔记[^2]。这些笔记不仅涵盖了理论要点还包含了实际应用中的PyTorch编码技巧等内容。 如果倾向于更加结构化的纸质形式而非电子屏幕浏览体验的话,则建议关注B站UP主“跟李沐学AI”的系列专栏页面(https://space.bilibili.com/1567748478/channel/seriesdetail?sid=358497),这里可能会不定期更新一些高质量的手写或者打印版讲义供粉丝们免费索取使用。 另外关于数据处理方面的一些额外补充说明也可以参阅专门针对这部分知识点所做的记录文档[^3],它能够帮助初学者更好地理解如何有效地收集训练模型所需的原始素材等问题。 ```bash # 如果想直接从命令行界面快速拉取最新版教材至本地电脑目录下执行下面这条指令即可完成整个过程: git clone https://gitcode.com/Open-source-documentation-tutorial/d8d79.git ``` 以上方法均能有效满足不同场景下对获取李沐教授所著深度学习领域教学资料副本的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值