Loading

【深度学习】batch_size和学习率lr之间的关系

参考文献

https://blog.csdn.net/jgj123321/article/details/106196577

问题描述

在训练ssd的过程中,出现了训练几轮之后loss开始变成nan的现象
搜索了之后发现了上面的博客里的说法,于是研究一下batchsize和lr之间的关系

分析

按上面的说法,当batchsize减小时,lr也要跟着减小
豆包的解释:
在深度学习模型训练中,batch size(批量大小)与学习率(LR)存在密切关联,尤其是当batch size减小时需相应降低学习率。以下从理论原理、数学推导、实际影响及经验策略四个维度展开解析:

一、核心关联:梯度估计的方差与更新稳定性

  1. batch size对梯度的影响

    • batch size越大:梯度估计基于更多样本,噪声(方差)越小,梯度方向更接近全局最优方向。
    • batch size越小:梯度仅基于少量样本,方差显著增大,更新方向可能剧烈波动(如图1所示)。
  2. 学习率与梯度噪声的平衡

    • 当batch size较小时,若学习率保持不变,较大的步长会放大梯度噪声的影响,导致参数更新震荡甚至发散。
    • 减小学习率可缩小步长,使模型在噪声较大的梯度引导下更平稳地收敛。

二、数学推导:从SGD到Mini-Batch SGD的理论支撑

  1. 梯度期望与方差的数学表达
    设训练集样本为${x_i, y_i}_{i=1}^N$,模型参数为$\theta$,损失函数为$L(\theta; x_i, y_i)$。

    • 批量梯度(Batch Gradient)
      $$g_B = \frac{1}{B} \sum_{i=1}^B \nabla L(\theta; x_i, y_i)$$
      其中$B$为batch size,梯度期望为$\mathbb{E}[g_B] = \nabla L(\theta)$,方差为$\text{Var}(g_B) = \frac{1}{B} \text{Var}(\nabla L(\theta; x_i))$。
    • 结论:方差与$B$成反比,即batch size越小,梯度方差越大
  2. 学习率与batch size的线性缩放原则

    • 当batch size从$B_1$调整为$B_2$时,为保持梯度更新的“等效强度”,学习率应按比例调整:
      $$\text{LR}_2 = \text{LR}_1 \times \frac{B_2}{B_1}$$
    • 推导:更新量$\Delta\theta = -\text{LR} \cdot g_B$,若保持$\Delta\theta$的期望不变,则:
      $$\text{LR}_2 \cdot \frac{1}{B_2} = \text{LR}_1 \cdot \frac{1}{B_1} \quad \Rightarrow \quad \text{LR}_2 = \text{LR}_1 \times \frac{B_2}{B_1}$$
    • 示例:若原batch size=256,LR=0.1;当batch size降至64时,LR应调整为$0.1 \times \frac{64}{256} = 0.025$。

三、实际影响:训练动态与收敛特性对比

指标 大batch size(如256) 小batch size(如16)
梯度稳定性 方差小,更新方向更稳定,适合大学习率 方差大,更新方向波动大,需小学习率抑制震荡
训练速度 单次迭代耗时更长,但每个epoch的迭代次数少(如10000样本/B=256需391次迭代) 单次迭代耗时短,但总迭代次数多(B=16需625次迭代),完整epoch耗时可能更长
泛化能力 可能陷入尖锐局部最优,泛化性略差(大batch的正则化效应弱) 梯度噪声类似数据增强,可能跳出平坦局部最优,泛化性更好(需配合小LR)
内存占用 占用更多显存(需存储更多样本的中间激活值) 显存占用低,适合小显存设备

四、经验策略:如何根据batch size调整学习率

  1. 线性缩放策略(适用于SGD+动量)

    • 当batch size按倍数$k$缩放时,学习率也按$k$倍调整,即:
      $$\text{LR}{\text{new}} = \text{LR}{\text{old}} \times k \quad (k = \frac{B_{\text{new}}}{B_{\text{old}}})$$
    • 适用场景:ImageNet分类、目标检测等大规模视觉任务,如ResNet训练中常用此策略。
  2. 小batch size的补偿策略

    • 若batch size过小(如B=1~8),除降低学习率外,可结合以下技巧:
      • 增加迭代次数:因为小batch的每个epoch迭代次数更多,需保证总训练样本数足够(如原计划100 epoch,可增至150 epoch)。
      • 添加梯度平滑:如使用EMA(指数移动平均)对梯度进行平滑,减少噪声影响。
      • 启用warm-up策略:初始阶段用极小学习率(如1e-5)热身,再线性提升至目标学习率,避免初始阶段梯度爆炸。
  3. 自适应优化器的特殊处理

    • 对于Adam、RMSprop等自适应优化器,batch size对学习率的影响相对较弱(因自适应调整二阶矩),但仍建议:
      • 当batch size从标准值(如32)减半时,学习率可按0.5~0.7倍缩放(而非严格线性)。
      • 避免batch size过小(如B<4),否则自适应优化器可能因梯度方差过大而失效。

五、总结:核心逻辑与实践建议

  1. 本质原因:小batch size导致梯度方差增大,需通过减小学习率来平衡更新步长,避免震荡。
  2. 黄金法则:batch size与学习率按线性比例同步调整($LR \propto B$),但需结合任务特性灵活微调。
  3. 工程实践
    • 若显存充足,优先使用较大batch size(如32~256),并按线性法则设置学习率。
    • 若必须使用小batch size(如设备显存限制),建议:
      # 示例:batch size从32降至8时,学习率调整
      original_lr = 0.01
      original_batch = 32
      new_batch = 8
      new_lr = original_lr * (new_batch / original_batch)  # 0.01 * (8/32) = 0.0025
      
    • 配合warm-up、梯度累积等技巧(如将多个小batch的梯度累加后更新,等效增大batch size),可进一步优化训练稳定性。

关于batchsize

batchsize和iteration的关系很大
如果batchsize为4,就会在每个iteration中选择四张图像,利用gpu的并行计算功能同时处理这四张图像并进行反向传播,当batchsize过大,同时处理的数据量超过了gpu的能力,训练就会失败
也就是说:每个epoch中,迭代iteration的次数 = 数据集图像数量 / batchsize

关于学习率lr

学习率(Learning Rate,简称 LR)是深度学习优化过程中最重要的超参数之一,其本质是控制模型参数更新的步长

posted @ 2025-06-19 19:07  SaTsuki26681534  阅读(559)  评论(0)    收藏  举报