跳到主内容
快讯直播
AI智模界
AI 词典

梯度累积:显存不够时的大 batch 平替

一句话定义:梯度累积(Gradient Accumulation)是把一个大批次(batch)拆成几个小批次(micro-batch)依次前向、反向传播,把梯度先攒起来,攒够次数后再更新一次模型权重。

打个比方:你要把 100 块砖搬上楼,一次扛不动,就分 10 趟、每趟扛 10 块。虽然中间跑了 10 趟,但只有最后一趟结束时才算“这趟活儿干完了”,才结算一次搬运量。梯度累积也是这样:每跑完一个 micro-batch,得到一个梯度,先不急着改参数,而是加到累积器里;等跑满设定的累积步数(accumulation steps),才调用一次优化器(optimizer)的 step 更新权重,然后把梯度清零重新攒。

代码上通常长这样:把 loss 除以累积步数再反向传播,累积 N 次后 step 一次。这个除法不能省——否则梯度会被放大 N 倍,等价于偷偷把学习率(learning rate)调高了 N 倍,训练很容易发散。

它不等于真的大 batch,这是最容易被误解的地方:

维度真·大 batch梯度累积
显存占用低(只按 micro-batch 算)
梯度来源一次性在整批数据上求平均各 micro-batch 梯度相加/平均
批量归一化(BatchNorm)用整批统计量,稳定每个 micro-batch 各自算,统计量更抖
速度更快更慢,多次前向反向的固定开销叠加
学习率按大批次设定需重新调,通常随有效批量放大

关键差异出在“不是所有层都能等到最后再算”。带 BatchNorm 的网络,归一化统计量是在每个 micro-batch 内部当场算出来的,攒梯度并不能把它们拼成全局统计量;AI 词典:Dropout">Dropout、逐样本的数据增强同样如此。所以梯度累积是近似,不是数学等价。

对从业者的实际意义:单卡显存小、又想复现别人用大 batch 训出来的效果时,梯度累积是最省事的兜底方案。比如目标 batch size 512、显存只够 64,就设累积 8 次。但记得三件事:一是同步调学习率(常见做法是按有效批量线性或平方根缩放,然后跑几组小实验验证);二是如果模型里有 BatchNorm,考虑换成 GroupNorm 之类不依赖批统计的归一化,或直接接受这点噪声;三是留意训练变慢的代价,必要时配合梯度检查点(gradient checkpointing)一起用。对不写代码的人来说,理解它是“用时间换空间”的思路就够了——真正要训练时,具体配置以框架官方文档和你的实测为准。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。