反向传播通过 “综合损失” 协调权重调整,比如100张图像,狗33张,猫33张,鸟34张,是训练每一张图像每次都反向传播?还是训练完100张图像反向传播?
在训练过程中,反向传播的触发时机取决于所采用的优化策略,主要有三种模式,对应不同的 “更新频率”:
- 随机梯度下降(SGD):每训练 1 张图像就反向传播一次;
- 批量梯度下降(Batch GD):训练完所有 100 张图像(整个数据集)后反向传播一次;
- 小批量梯度下降(Mini-batch SGD):将 100 张图像分成若干小批(比如每批 16 张),训练完 1 批就反向传播一次(实际中最常用)。
具体结合你的例子(100 张图像:33 狗、33 猫、34 鸟)展开说明:
1. 随机梯度下降(SGD):每 1 张图像后反向传播
- 操作流程:
输入第 1 张图像(比如狗)→ 前向计算输出概率→ 计算该张图像的损失(与 “狗” 标签的差距)→ 立即反向传播,调整所有层的权重(隐藏层 + 输出层)→ 输入第 2 张图像(比如猫)→ 重复上述过程…… 直到 100 张图像全部训练完(称为 “1 个 epoch”)。
- 特点:
- 每次更新只依赖 1 张图像的损失,计算速度快(单张图像计算量小),适合大数据集;
- 但梯度(损失对权重的导数)受单张图像影响大,噪声高,权重更新路径会很 “震荡”(比如第 1 张狗图像让权重偏向狗特征,第 2 张猫图像可能立即让权重偏向猫特征,来回波动)。
2. 批量梯度下降(Batch GD):100 张图像全训练完后反向传播
- 操作流程:
依次输入 100 张图像(33 狗 + 33 猫 + 34 鸟)→ 对每张图像计算损失,但不立即更新权重,而是累计所有 100 张图像的总损失(或平均损失)→ 用总损失进行一次反向传播,统一调整所有权重→ 完成 1 个 epoch。
- 特点:
- 梯度基于所有样本计算,更 “稳定”(噪声低),理论上能找到更优的权重;
- 但缺点明显:100 张图像的总计算量太大(尤其当图像分辨率高、网络深时),会占用大量内存,且训练速度极慢(1 个 epoch 只能更新 1 次权重),实际中很少用(仅适用于极小数据集)。
3. 小批量梯度下降(Mini-batch SGD):每 “一小批” 图像后反向传播(实际最常用)
- 操作流程:
将 100 张图像分成若干 “小批量”(比如每批 16 张,100 张可分成 7 批:6 批 16 张 + 1 批 4 张)→ 训练第 1 批(比如包含 5 狗 + 5 猫 + 6 鸟)→ 计算这 16 张的平均损失→ 反向传播,更新一次权重→ 训练第 2 批→ 重复→ 直到 7 批全训练完,完成 1 个 epoch。
- 特点:
- 平衡了速度和稳定性:每批 16 张的计算量适中(比单张快,比 100 张省内存),且批量内的平均损失能降低梯度噪声(比 SGD 稳定);
- 是目前深度学习的主流选择,常见的批量大小(batch size)为 16、32、64 等(根据显卡内存调整)。
核心结论:
- 反向传播的时机取决于 “批量大小”:可以每 1 张(SGD)、每 100 张(Batch GD),或每 16 张(Mini-batch)更新一次;
- 实际中几乎都用小批量梯度下降,因为它既避免了 SGD 的剧烈震荡,又解决了 Batch GD 的计算效率问题;
- 无论哪种模式,最终目标都是通过 “多次迭代(多个 epoch)” 让权重逐渐收敛 —— 即对狗、猫、鸟的特征都能精准响应,输出正确概率。
简单说:训练就像 “调整方向盘”,SGD 是 “每走 1 米微调一次”,Batch GD 是 “走完 100 米大调一次”,小批量是 “每走 16 米调整一次”,最终都要把车(权重)开到正确的方向(分类准确)。
