2. 全批量梯度下降(BGD):原理详解、优缺点分析、适用场景

2.1 先聊聊直觉:什么是“全批量”?

全批量梯度下降,英文叫 Batch Gradient Descent,简称 BGD。

说白了,它的核心就一句话:每次更新参数,都要看遍所有样本。

你想想看,假设你有 10 万张猫狗图片。BGD 的做法是:先把这 10 万张全部算一遍,算出一个总的损失,然后才更新一次模型参数。嗯,就是这么“实在”。

我刚开始接触深度学习时,觉得这方法挺笨的——明明看几张图就能学,为啥非要全看完?后来踩了坑才明白,这种“笨办法”在某些场景下反而是最稳的。

核心公式:

θ = θ - η · ∇θ J(θ)

其中 J(θ) 是所有样本的损失之和,∇θ 是梯度。

2.2 原理详解:一步步拆解

咱们把 BGD 的流程拆开来看,其实就三步:

  1. 前向传播:把所有样本喂进模型,算出每个样本的损失。
  2. 计算总梯度:把所有样本的梯度加起来,取平均。
  3. 更新参数:用这个平均梯度去更新模型权重。

举个例子,假设你有一个线性回归模型 y = wx + b,训练集有 1000 个样本。BGD 的做法是:

# 伪代码示意
for epoch in range(epochs):
    total_grad_w = 0
    total_grad_b = 0
    for i in range(1000):
        y_pred = w * x[i] + b
        loss = (y_pred - y[i]) ** 2
        total_grad_w += 2 * (y_pred - y[i]) * x[i]
        total_grad_b += 2 * (y_pred - y[i])
    
    # 取平均梯度
    avg_grad_w = total_grad_w / 1000
    avg_grad_b = total_grad_b / 1000
    
    # 更新参数
    w -= lr * avg_grad_w
    b -= lr * avg_grad_b

看到了吗?每更新一次 w 和 b,都要遍历全部 1000 个样本。这就是“全批量”的含义。

2.3 优缺点分析:别急着否定它

优点

  • 梯度方向最准:因为用了全部样本,算出来的梯度是全局最优方向。我在做图像分类时对比过,BGD 的收敛曲线是最平滑的,没有那种“上蹿下跳”的感觉。
  • 容易收敛到全局最优:尤其对于凸函数,BGD 保证能找到全局最小值。这一点 SGD 做不到。
  • 训练过程稳定:损失函数单调下降,调参时特别好判断——如果损失不降了,那就是真的不降了,不是随机波动。

缺点

  • 慢,非常慢:这是最大的痛点。我曾在 100 万级别的数据集上跑 BGD,一次迭代就要等十几分钟。你想想看,一天能迭代几次?
  • 内存扛不住:所有样本的中间结果都要存着。我遇到过显存爆掉的惨案——32G 的 V100 都撑不住。
  • 不适合在线学习:如果数据是流式进来的,BGD 根本没法用。你得等数据攒够了才能更新一次。

避坑指南:我曾经在一个推荐系统项目里强行用 BGD,结果每次训练要 3 小时。后来换成 Mini-batch,20 分钟就搞定了。所以,数据量超过 1 万条时,我建议你慎重考虑 BGD。

2.4 适用场景:什么时候该用它?

说实话,现在纯用 BGD 的场景不多了。但以下情况,它依然是首选:

场景 原因
小数据集(< 1000 条) 计算量小,BGD 反而更稳定
凸优化问题 需要精确的全局最优解
需要精确梯度分析 研究梯度行为时,BGD 的梯度最干净
硬件资源充足 显存够大,不在乎时间

我个人习惯是:做实验验证算法时先用 BGD 跑一遍,看看理论上能不能收敛。如果 BGD 都不收敛,那其他方法基本也没戏。

2.5 知识体系图

下面这张图帮你理清 BGD 的核心逻辑:

BGD 核心知识体系 全批量梯度下降 原理:全样本计算 优缺点分析 适用场景 前向传播 计算总梯度 更新参数 梯度最准 收敛稳定 速度慢/内存大 小数据集(<1000条) 凸优化 / 精确梯度分析

2.6 一个真实的教训

最后分享一个我自己的经历。有次做金融风控模型,数据量只有 500 条,我习惯性地用了 Mini-batch。结果模型死活不收敛,损失曲线像心电图一样。

后来我换成 BGD,一次迭代后损失就稳定下降了。为什么?因为数据太少,Mini-batch 的随机性反而成了干扰。BGD 的全局梯度让模型稳稳地找到了方向。

小技巧:如果你不确定该用哪种梯度下降,先试试 BGD。如果数据量小,它往往是最省心的选择。如果数据量大,BGD 跑不动了,再换 Mini-batch 也不迟。

嗯,BGD 就聊到这儿。它虽然慢,但稳。在合适的场景下,它依然是那个最可靠的“老黄牛”。

可可精品资料库