想象你是一位AI工程师,公司只给你发了一张显存很小的GPU,却要你训练一个大语言模型。完整的数据批次太大,一次性喂进去显卡直接“爆显存”。正当你一筹莫展时,一位老工程师递给你一本厚书说:“你不需要把整本书同时摊在桌上读。把它拆成几小份,每次只读一小份,但认真写读书笔记。等笔记攒够了,再根据完整笔记做一次总结复习。”这个“先拆读、后总结”的方法,就是梯度累积——在小显存上等效增大批次大小的核心技巧。拆开读的每一小份叫 micro-batch,读书笔记就是梯度,攒笔记得大总结则是统一更新参数。它不增加显存,只是用时间换空间,让穷人的显卡也能训练大模型。
对AI从业者而言,梯度累积是显存受限场景下的必备工程技能。掌握它,你就能用消费级GPU训练或微调大模型,大幅降低实验门槛和算力成本,也为绿色低碳的AI训练贡献力量。
目录
可视化演示
展示梯度累积通过多个micro-batch累加梯度等效增大批大小的机制,对比直接训练与累积训练的显存占用和效果等价性,交互调节累积步数查看优化效果。
本节配有交互动效(进入视口后自动加载,约 3KB)。
梯度累积工作流程 Micro-batch: 小批量前向+反向计算梯度但不更新参数 累积更新:N步后统一执行optimizer.step()更新参数 effective_batch = micro_batch × accumulation_steps 梯度累积在N个micro-batch上累加梯度后更新,等效批大小为micro_batch×N,显存仅需micro_batch大小
核心概念:先拆读、后总结的智慧
老工程师把那本厚书摆在小桌上,翻开目录说:“你每天只需要读一页,把这一页的要点记下来。十天读完十章,桌上始终只有一页纸。”这份从容背后是一个朴素的道理:书桌放不下整本书,但放得下一页纸。训练大模型时,“书桌”是你的显存,“一页纸”是一个 micro-batch,“要点笔记”则是反向传播算出的梯度。
大多数 AI 框架的默认做法是:读完整本书(一个大 batch),记一份完整笔记,再复习一次。可显存装不下整本书时怎么办?梯度累积给出答案——每次只读一页(micro-batch 前向+反向),把笔记(梯度)累加到同一个笔记本里,读完 N 页后,再用这 N 页的合并笔记做一次复习(参数更新)。
从概念上说,梯度累积将一次大更新拆成了 N 次小计算,等效 batch size 为 micro-batch 大小乘以累积步数:
注意这个关系只讨论“每次使用多少数据来算一次更新”,并不涉及显存占用。回看那本厚书:你始终只摊开一页,书桌压力没有增加,只是读完整个章节所需的时间变长了。对 AI 工程师来说,这正是梯度累积最迷人的地方——显存瓶颈被绕开,算力效率掌握在自己手中。
- 等效批次$B_{\text{eff}}$——颗粒度描述“ 整本书”的厚度,即等效训练批次大小,决定了我们想优化目标时参考了多少样本。
- 微型批次$B_{\text{micro}}$——每次真正送进 GPU 的样本数,是“书桌上的一页纸”,受显存容量约束。
- 累积步数$N$——读多少页才做一次总结,即梯度累积步数。
- 乘积关系$B_{\text{micro}} \times N$——两者相乘得到等效批次大小,这就是“拆读 N 页合一总结”的数学表达。
数学等价:为什么攒起来就算数
“慢一点没关系,关键是算得准。”老工程师在笔记本上写写画画:“你每天记一页笔记,但你记的不是当天读到的原话,而是提炼出的观点。把这 N 天的观点平均一下,就是这十天的总结。”仔细想想,如果不拆读,一次性把十天内容读完后提炼的观点,和每天提炼再平均,结果接近一致吗?答案是:在理想线性情况下,完全一致。
标准 SGD 的做法是,在完整批次上计算梯度并更新:
而梯度累积的做法是,把完整批次切成 N 份,每份梯度加起来求平均:
为什么二者等价?因为求和和取平均都是线性运算,对一组大小相等的 micro-batch,先“每份平均再整体平均”与“全部样本一起平均”结果相同。但要注意,这个等价性要求所有 micro-batch 大小一致、且每个样本在每个 epoch 恰好被计算一次梯度。现实中,优化器状态、学习率调度、BN 统计量都会引入细微差异,所以数学等价不等于实践行为完全一致——这就像同样一份读书总结,不同人写出来的详略会不同。理解这一点,你就拿到了梯度累积的钥匙。
- 标准梯度$\nabla L_B$——完整批次上损失对参数的梯度,是所有样本梯度的平均,“十天的完整总结”。
- 样本梯度$\nabla \ell_i$——第 i 个样本对参数的梯度,即单页书的核心观点。
- 微型批次梯度$\nabla L_{B_k}$——第 k 个 micro-batch 的平均梯度,“每天一页的提炼观点”。
- 累积平均$\frac{1}{N}\sum_{k=1}^{N}\nabla L_{B_k}$——对所有 micro-batch 梯度取平均,“把 N 天观点再平均一次”。
- 更新公式$\theta_{t+1} = \theta_t - \eta \cdot \nabla \tilde{L}$——用平均梯度更新参数,把结论写回记忆。
工程实现:三步走流程
“现在你知道理论了,我来给你演示怎么动手写。”老工程师打开代码编辑器,写下三十行代码:“步骤就三步:清空笔记本、读 N 页写笔记、最后复习一次。”这三步就是梯度累积的工程骨架,几乎每个主流框架(PyTorch、HuggingFace Transformers)都已内置支持。
第一步,在开始一个累积周期前,把梯度缓冲清零。第二步,对 N 个 micro-batch 依次执行前向传播和反向传播,让梯度自动累加到缓冲中(PyTorch 的 backward() 默认行为就是累加)。第三步,当累积次数到达 N 时,执行优化器 step() 和梯度清零,开始下一轮。用伪代码表示:
传统做法在每个 batch 后都更新参数,而梯度累积把“更新频率”降为原来的 $1/N$。工程上带来的连锁效应是:梯度裁剪的时机通常在累积完成后统一做,而 warmup 和学习率调度也要基于“有效 batch”计算。一套简洁的三步走实现,能让你的单卡训练代码和多卡数据并行行为对齐——这也是很多大模型训练框架内部的标准实现方式。
- 累积周期$t \bmod N = 0$——t 是当前 micro-batch 的全局序号,N 是累积步数。每读到第 N 页,就该做总结更新。
- 更新动作$\text{optimizer.step()}$——执行参数更新,这对应“根据笔记复习总结”,是每一个累积周期的收尾。
- 缓冲清零$\text{grad.zero\_()}$——更新后清空笔记,为下一个周期做准备,避免老笔记污染新知识。
与BN交互:集体统计的失真
“你这方法有个坑。”老工程师合上书,“如果班里同学要一起做一个小组项目,你每天只喊三个人来讨论,得出来的小组平均意见,能和全班五十个人讨论出来的一样吗?”BatchNorm(批归一化)在训练时就是做这样一件事:它用当前 batch 的均值 $\mu$ 和方差 $\sigma^2$ 对特征做标准化。micro-batch 只有几个人,统计量自然失真。
BatchNorm 的核心公式是:
当 m 小到 1 或 2 时,小组意见波动极大,导致训练早期梯度剧烈抖动甚至发散。梯度累积让 micro-batch 的 m 很小,但 BN 前向时只能看到当前 micro-batch 的统计量,所以会出现“累积了 N 步的梯度,但每一步的归一化都基于单批统计”的尴尬。应对策略有:尽量调大 micro-batch(至少 ≥8)、在累积模式下使用更大的归一化缓冲、或干脆将 BN 替换为与批大小无关的 LayerNorm——大模型里几乎清一色选择后者。
- batch均值$\mu_B = \frac{1}{m}\sum_{i=1}^{m} z_i$——当前批次 m 个样本特征的均值,对应“小组的平均意见”。
- batch方差$\sigma_B^2$——当前批次特征的离散程度,衡量小组意见的分散情况。
- 标准化$\hat{z}_i = \frac{z_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$——用小组均值和方差把每个特征拉回标准分布。
与LN兼容:独立笔记更适配
“你看看 Transformer 里用的 LayerNorm。”老工程师翻到书的后半部分,“它跟 BN 不一样,每个人记自己的笔记,不需要跟全班比较。”LayerNorm(层归一化)会对每个样本单独做标准化,统计量来自该样本自身所有特征维度,与同 batch 的其他样本毫无关系。这意味着什么?batch 大小是 1 还是 1024,LN 的统计量计算结果基本不变。
LayerNorm 的公式:
正因如此,LN 与梯度累积天然兼容:无论 micro-batch 多么小,LN 的行为都不受影响。这也解释了大语言模型(如 GPT、LLaMA)为何普遍采用 LN 而非 BN——它们享受到大 batch 训练稳定的同时,也要兼容小显存训练的长尾需求。所以当你准备在消费级 GPU 上微调大模型时,优先选择基于 LN 的架构,梯度累积就可以毫无顾虑地大步迈开。
- 逐样本均值$\mu_i = \frac{1}{d}\sum_{j=1}^{d} z_{ij}$——对第 i 个样本自己的 d 个特征求均值,这是“自己的笔记平均值”。
- 逐样本方差$\sigma_i^2$——同一份笔记内部的分歧度。
- 标准化结果$\hat{z}_i$——每个样本用自己的均值和方差归一化,公式形态与 BN 相似但统计范围完全不同。
显存收益:把钱花在刀刃上
“你可能会问:不用梯度累积,直接把 batch 设小不就行了?”老工程师笑了笑,“设小 batch 确实省显存,但梯度噪声太大,模型半天不收敛。梯度累积的价值在于:保持大有效 batch 的稳定性,却只付小 batch 的显存账单。”要理解这笔账,先看看训练时显存花在哪里:
激活值显存与 batch 大小成正比。用梯度累积时,每一时刻只有 micro-batch 大小的激活值驻留在显存中,计算完立即释放。与一次性把大 batch 全部前向完保留全部激活值相比,显存峰值大幅降低。当然,世上没有免费的午餐——更新频率下降意味着同样的 epoch 次数下,训练时间变长。这正是“时间换空间”的本质:用多花的时间,换取放不下的模型和批次。
- 参数显存$M_{\text{params}}$——模型权重本身的大小,比如 7B 模型用 FP16 就是 14GB,这笔钱无论如何都要花。
- 梯度显存$M_{\text{grads}}$——每个参数对应的梯度,大小与参数相同,梯度累积时只存一份累积缓冲,不是 N 份。
- 优化器状态$M_{\text{states}}$——像 Adam 的动量、方差等,通常占参数的 2-4 倍,与 batch 大小无关。
- 激活值显存$M_{\text{acts}}$——前向计算过程中保存的中间张量,这是 gradient accumulation 真正省下的部分。
配置策略:调参的艺术
“读书计划怎么定?不是拍脑袋,得有章法。”老工程师在笔记本上画了条曲线,“累积步数定多少、学习率改不改、warmup 多长,这三件事决定了你的训练是稳稳收敛还是原地打转。”梯度累积的配置策略,本质上就是在大 batch 训练的参数调整规律中寻找参照。
第一条原则,等效 batch size 要落在合理区间。现代深度学习研究表明,适宜 batch 通常在 32~1024 之间,过小噪声大、过大收敛慢。设定累积步数时,让等效 batch 落在这个区间即可。第二条原则,遵循线性缩放法则:batch 放大 N 倍,学习率大约也要放大 N 倍:
但线性缩放有一个前提:初始学习率必须配合 warmup 策略逐步上升到目标值,否则放大后的学习率在训练初期容易震荡。第三条原则,收敛监控要盯住 训练 loss 和验证指标的双曲线,若累积步数过大导致有效 batch 过大,loss 会出现周期性锯齿状波动——那是每个累积周期内“只有笔记没有复习”造成的损失下降滞后。配置得当,loss 曲线光滑下降;配置不当,锯齿明显、收敛缓慢。调参的艺术,就是在这三原则中找到属于你数据与模型的平衡点。
- 原学习率$\eta$——原始 micro-batch 配置下的学习率。
- 缩放倍数$N$——等效 batch 增大的倍数,等于累积步数。
- 新学习率$\eta' = \eta \times N$——按线性缩放法则放大学习率,让更新步伐与更大的有效 batch 相匹配。
绿色价值:小显存也有大作为
“你可能会觉得,这个方法不过是工程上的小聪明。”老工程师合上笔记本,望向窗外,“但在算力越来越贵的今天,它其实是对资源的一种尊重。”用 12GB 显存的消费级显卡就能微调 7B 大模型,意味着什么?意味着原本需要几万块专业 GPU 才能启动的实验,现在几百块就能开始;意味着你不再需要为了尝试一个新想法,去排队等集群资源。
从能效角度看,梯度累积让已有硬件的利用率显著提升。同样一台服务器,原本因显存不足而“喂不饱”的任务,现在可以满载运行:
绿色 AI 不是玄学,而是每一份算力都花在刀刃上的工程素养。梯度累积降低了训练大模型的门槛,让更多人得以参与前沿 AI 研究,也减少了因盲目采购大算力硬件而造成的资源浪费。从一本厚书的拆读中走出来的你,已经掌握了绿色训练的第一把钥匙。
- 能量消耗$E$——完成一次训练所需的总能量,单位常为千瓦时(kWh),这是绿色计算的终极指标。
- 功率$P$——GPU 运行功率,取决于硬件型号和负载率。显存不爆、算力打满,功率才能物尽其用。
- 时间$T$——训练总时长,梯度累积通过“时间换空间”拉长训练,但总能耗仍可能低于“因显存不足而无法训练”的零收益方案。
AI 应用场景
场景一:单卡微调大语言模型
阶段:模型微调与训练
解决的问题:研究员只有一张 12GB 显存的消费级 GPU,想要微调 7B 参数的 LLaMA 模型。原生 batch size 只能设为 1,梯度噪声极大,微调几乎无法收敛。梯度累积将 micro-batch 设为 2、累积步数设为 8,等效 batch 达到 16,让消费级显卡成功微调出可用的领域模型。
具体案例:某创业公司用一张 RTX 4090 微调医疗问答模型。实测发现,micro-batch=2、accumulation_steps=8 时,训练 loss 平稳下降,最终 BLUE 分数与 A100 上使用 batch=16 的结果几乎一致,而硬件成本降低了 10 倍以上。
场景二:科研实验室低成本复现
阶段:模型训练与实验迭代
解决的问题:高校实验室预算有限,无法频繁申请 GPU 集群。梯度累积让学生能在单卡上复现论文中的大 batch 训练方案,验证算法有效性后再迁移到集群上全量训练,大幅降低实验试错成本。
具体案例:某课题组在 24GB 显存的单卡上复现一篇基于 batch=1024 的图像分类论文。通过 micro-batch=128、累积 8 步,训练完整 ResNet-50,最终精度与原论文差异小于 0.3%,节省了约 5 万元的算力采购费用。
场景三:绿色数据中心能效优化
阶段:训练基础设施规划
解决的问题:数据中心在电力额度固定的情况下,希望最大化可用算力。梯度累积允许更多训练任务在现有 GPU 上并行运行,减少了新购硬件的电力需求,直接降低 PUE 和碳排放。
具体案例:某云厂商观察到客户大量小 batch 训练任务 GPU 利用率不足 40%。通过平台层自动配置梯度累积参数,将等效 batch 提升到合理区间,GPU 利用率提升到 70%,同节点可承载任务数增加了 30%,年度电力成本节约超过百万元。
Python 演示
import numpy as np def generate_data(n=256, w_true=2.0, b_true=1.0, seed=42): rng = np.random.default_rng(seed) x = rng.uniform(-2, 2, n) y = w_true * x + b_true + rng.normal(0, 0.3, n) return x.astype(np.float32), y.astype(np.float32) def train_sgd(x, y, lr=0.05, epochs=10, batch_size=16, accum_steps=1): n = len(x) w, b = 0.0, 0.0 total_updates = 0 for epoch in range(epochs): perm = np.random.default_rng(epoch).permutation(n) x, y = x[perm], y[perm] grad_w, grad_b = 0.0, 0.0 for i in range(0, n, batch_size): xb, yb = x[i:i + batch_size], y[i:i + batch_size] pred = w * xb + b grad_w += np.mean(2 * (pred - yb) * xb) grad_b += np.mean(2 * (pred - yb)) if (i // batch_size + 1) % accum_steps == 0: w -= lr * grad_w / accum_steps b -= lr * grad_b / accum_steps grad_w, grad_b = 0.0, 0.0 total_updates += 1 return w, b, total_updates def main(): x, y = generate_data() w_full, b_full, u_full = train_sgd( x.copy(), y.copy(), lr=0.05, batch_size=32, accum_steps=1) w_acc, b_acc, u_acc = train_sgd( x.copy(), y.copy(), lr=0.05, batch_size=8, accum_steps=4) print("全批量训练: w=%.3f b=%.3f 更新次数=%d" % (w_full, b_full, u_full)) print("梯度累积训练: w=%.3f b=%.3f 更新次数=%d" % (w_acc, b_acc, u_acc)) print("结论: 两条轨迹几乎一致 -> 梯度累积数学等价验证通过") if __name__ == "__main__": main()
pred = w * xb + b对当前 micro-batch 做前向计算,这是“读一页书”的过程。grad_w += np.mean(...)把梯度累加到缓冲变量中,而不是立即更新参数,这是“记笔记”。if (i // batch_size + 1) % accum_steps == 0:判断累积步数是否达到 N,即“笔记攒够一章节”。w -= lr * grad_w / accum_steps用累积梯度的平均值更新参数,这是“做一次总结复习”。grad_w, grad_b = 0.0, 0.0更新后清零缓冲,为下一轮累积做准备。train_sgd(..., batch_size=32, accum_steps=1)对照组:原生大 batch 训练,每 32 个样本更新一次。train_sgd(..., batch_size=8, accum_steps=4)实验组:8 个样本的 micro-batch,累积 4 步再更新,等效 32。
常见误区
误区“梯度累积要把 N 份梯度都存起来再平均,显存肯定要翻好几倍吧?我的小显卡根本跑不动。”
正解梯度累积只维护一份梯度累积缓冲,大小等于单个参数的梯度(每参数 4 字节或 2 字节),与累积步数 N 无关。真正的显存大头是前向传播保存的激活值,而累积模式下每时每刻只有一个 micro-batch 的激活值驻留,用完即释放。所以显存占用和单个 micro-batch 基本持平,这就是它能“省显存”的原因。
为何常见:初学者看到“累加”二字,直觉上认为要同时保存多份数据,混淆了“数据流中的临时张量”和“梯度累积缓冲”两个不同的存储对象。
误区“显存不够就把累积步数调到 100,等效 batch 几千,模型肯定学得又快又好。”
正解等效 batch 过大反而有害:更新频率过低导致收敛变慢;梯度过于平滑会陷入锐利的极小值,泛化能力下降;BN 统计量偏移加剧;训练时间线性增加。合理做法是把等效 batch 控制在 32~1024 之间,让 micro-batch 尽量大、累积步数尽量小。
为何常见:把“等效”误解为“越多越接近大 batch”,忽略了超大规模 batch 本身在深度学习中就不是最优选择。
误区“梯度累积只是把梯度攒起来,BN 更新的是滑动平均统计量,两者互不干扰。”
正解BN 在前向传播时使用当前 micro-batch 的均值和方差做归一化。micro-batch 过小时,统计量噪声极大,导致前向输出不稳定、梯度方向朝令夕改。即使累积了 N 步梯度,每步前向的归一化都基于单批统计,问题依然存在。缓解方法包括增大 micro-batch、使用 SyncBN 或者改用 LayerNorm。
为何常见:人们习惯于从“反向传播”的视角看训练,忽略了 BN 是前向计算的一部分,其统计量在小 batch 下天然不稳定。
误区“梯度累积只是工程技巧,不改变数学本质,原来设什么学习率就还用多少。”
正解等效 batch 扩大 N 倍后,梯度方向更稳定、噪声更小,原来的学习率实际“步子偏大”,容易震荡。线性缩放法则建议将学习率乘以 N。但缩放后必须配合 warmup 过渡,否则训练初期大学习率就会把模型推到不稳定的区域。实践中应逐步验证,观察训练 loss 是否平滑下降。
为何常见:只看到了“梯度公式等价”的表面,忽略了学习率与 batch size 在优化动力学上的耦合关系。
面试题
Q1. 梯度累积的核心目的是什么?
- A.减少模型参数量以节省存储
- B.等效增大批大小而不增加显存← 正确答案
- C.提升模型推理时的吞吐量
- D.减少训练所需的全部步骤
答案:B。梯度累积把多个 micro-batch 的梯度先攒起来再更新,等效增大了 batch size,但每一刻只有一个 micro-batch 的激活值占显存。B 正确;A 与参数无关,C 是推理侧问题,D 只是累积的间接效果而非目的。
Q2. 设置累积步数为 N、micro-batch 为 B 时,等效 batch 大小为?
- A.B
- B.B × N← 正确答案
- C.B / N
- D.N / B
答案:B。等效 batch 是每个累积周期内参与更新的样本总数,等于 micro-batch 大小乘以累积步数。类比“读书笔记法”:每页读 B 字,读 N 页,总阅读量就是 B×N。
Q3. 梯度累积与直接使用大 batch 训练的数学等价,最核心的前提是?
- A.学习率必须小于 0.01
- B.梯度累加和取平均是线性运算← 正确答案
- C.模型必须使用 ReLU 激活函数
- D.训练数据必须均衡采样
答案:B。梯度累积先对各 micro-batch 求平均,再对 N 个平均梯度求平均,这与所有样本一起求平均数学等价,因为求平均是线性运算。B 正确;A、C、D 与等价性无关。
Q4. 关于梯度累积的工程实现,以下哪些说法正确?
- A.每个 micro-batch 都需要更新一次参数
- B.每个 micro-batch 只计算梯度不更新参数← 正确答案
- C.累积 N 步后统一执行优化器更新← 正确答案
- D.累积完成后不需要清空梯度缓冲
答案:BC。梯度累积的核心就是“攒梯度、不更新”,累积到 N 步才更新一次,故 B、C 正确;A 是普通 SGD 的行为,D 不清零会导致上一周期梯度污染下一周期。
Q5. 梯度累积遇到 BatchNorm 时的主要问题是什么?
- A.BN 的参数无法参与反向传播
- B.BN 按 micro-batch 统计导致归一化偏差← 正确答案
- C.BN 层的显存占用会翻 N 倍
- D.BN 与梯度累积在数学上冲突
答案:B。BN 前向使用当前 batch 的均值/方差做归一化,micro-batch 过小时统计量不稳定,造成前向输出抖动和梯度方向偏移。B 正确;A、C、D 均为对 BN 机制的误解。
Q6. LayerNorm 为什么天然兼容梯度累积?
- A.因为它只在推理阶段使用
- B.因为它对每个样本独立归一化← 正确答案
- C.因为它不参与反向传播
- D.因为它不需要任何统计量
答案:B。LayerNorm 对单个样本自身的特征维度求均值/方差并归一化,与同 batch 的其他样本无关,因此 batch 大小再小也不影响其行为。B 正确。
Q7. 关于梯度累积的显存收益,下列说法正确的是?
- A.主要减少的是激活值显存占用← 正确答案
- B.参数和优化器状态的显存不变← 正确答案
- C.梯度累积缓冲大小为 N 份梯度之和
- D.累积步数越大训练时间越长← 正确答案
答案:ABD。梯度累积让每个时刻只保留一个 micro-batch 的激活值,所以省的是激活显存;参数和优化器状态与 batch 无关、不减少;累积缓冲只有一份,不是 N 份;更新频率降为 1/N,时间必然变长。A、B、D 正确,C 错误。
Q8. 等效 batch 从 32 增大到 128,按线性缩放法则学习率应如何调整?
- A.保持不变
- B.除以 4
- C.乘以 4← 正确答案
- D.乘以 2
答案:C。线性缩放法则指出,batch 放大 k 倍时学习率约乘以 k。batch 从 32 到 128 放大了 4 倍,学习率应乘以 4。但需配合 warmup 使用,避免初期震荡。
Q9. 以下哪些场景适合使用梯度累积?
- A.单卡 12GB 显存微调 7B 大模型← 正确答案
- B.多卡显存充足且追求最高吞吐
- C.小 batch 导致梯度噪声过大时← 正确答案
- D.需要降低推理延迟的场景
答案:AC。显存受限时梯度累积是核心手段;小 batch 梯度噪声大时可通过累积增大有效 batch 来稳定训练。显存充足时直接大 batch 更高效,推理延迟与训练技巧无关。A、C 正确。
Q10. 梯度累积更新参数时,实际使用的梯度是?
- A.N 个 micro-batch 梯度的和或平均← 正确答案
- B.最后一个 micro-batch 的梯度
- C.第一个 micro-batch 的梯度
- D.N 个 micro-batch 梯度的中位数
答案:A。梯度累积将 N 个 micro-batch 的梯度累加(或者取平均)后作为最终梯度。线性等价性要求取平均;实际框架中若不做归一化,则等效于按“和”更新,此时学习率需按比例调整。A 正确,B、C 只用了部分信息,D 的非线性操作会破坏等价性。