批量梯度下降(BGD),随机梯度下降(SGD),小批量梯度下降(MBGD)对比理解

1.批量梯度下降(BGD)

我们所说的梯度下降算法一般都默认是批量梯度下降。我们用每个样本去计算每个参数的梯度后,要将这个梯度进行累加求和
在这里插入图片描述
注意这里有一个求和符号,意思就是我们每次计算参数都是用全部的样本来计算这个参数的变化。
优点:
1.每次都使用全部全部数据,能更好的代表样本总体,从而更好的指示了正确的梯度下降的方向。
2.对于凸最优化问题,一定能够收敛的全局最优
3 可以并行化
缺点:
每次都使用全部样本进行计算,会导致计算量很大,对于样本数量很大的情况,这种计算会很耗费时间。

2.随机梯度下降(SGD)

与批量梯度下降不同,随机梯度下降每次迭代只使用一个样本来更新参数,使得训练速度更快。
在这里插入图片描述
注意这里是没有求和符号的,因为只用第i个样本来进行这次更新的计算。

优点:
每次迭代只用一个样本来更新参数,这就使得每次迭代的速度会大大加快,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的。
缺点:
很大可能会收敛于局部最优

3.小批量梯度下降(MBGD)

小批量梯度下降实际上是在批量梯度下降和随机梯度下降之间做了个中和。
下面我们假设一共1000个样本,每次迭代用10个样本进行参数更新,那么参数的更新如下。
在这里插入图片描述
对于小批量梯度下降需要注意的就是这个批量batch大小的选择:
如果选择过大:
1.如果batch过大的话,那么我们每个batch就变化很小,就有点接进去批量梯度下降算法
2.内存可能会撑不住
如果选择过小:
会导致其接近于随机梯度下降算法,它的梯度方向可能没那么准确

<think>嗯,用户现在想理解梯度的基本概念,还有随机梯度下降SGD)和小批量梯度下降MBGD)的工作原理,以及它们的区别和联系。我需要结合之前的引用内容,整理出一个清晰的回答。 首先,梯度是什么?根据引用[2],梯度是函数在各个变量方向上的偏导数组成的向量,指示了函数增长最快的方向。所以,梯度下降就是沿着相反方向调整参数,减少函数值。这点需要先讲清楚。 然后是随机梯度下降。根据引用[3]和[4],SGD每次只用一个样本计算梯度,更新参数。优点是计算快,但梯度估计有噪声,收敛路径不稳定,不过总体能收敛到最优解。要提到为什么噪声存在,但总体有效,比如引用4里说的,虽然单个样本可能不准,但多次迭代后方向正确。 接下来是小批量梯度下降,引用[5]提到它介于BGDSGD之间,用一个小批量的样本计算梯度。这样既比SGD稳定,又比BGD计算量小。需要说明小批量的优势,比如利用矩阵运算加速,减少参数更新的方差。 区别与联系方面,BGD用全部样本,计算准确但慢;SGD用单个样本,快但有噪声;MBGD折中,平衡速度和稳定性。应用场景上,BGD适合小数据集,SGD适合在线学习,MBGD适合深度学习。可能需要对比它们的计算复杂度、收敛速度和内存需求。 用户可能需要了解为什么MBGD常用,比如在深度学习中,GPU并行处理小批量数据更高效。同时,要提到学习率调整的重要性,如引用5中的学习率调度函数,防止震荡。 另外,引用中提到的全梯度下降(FGD)可能是指BGD,需要统一术语。确保回答中使用一致的术语,避免混淆。 最后,生成相关问题,可能涉及优化方法、应用场景、具体实现等。比如不同算法的优缺点,如何选择批量大小,学习率调整策略等。</think>### 梯度与梯度下降算法解析 #### 一、梯度的基本概念 梯度是多元函数在各变量方向上的偏导数组成的向量,表示函数在该点增长最快的方向。对于目标函数$J(\theta)$,其梯度记为$\nabla J(\theta)$,计算公式为: $$ \nabla J(\theta) = \left( \frac{\partial J}{\partial \theta_1}, \frac{\partial J}{\partial \theta_2}, ..., \frac{\partial J}{\partial \theta_n} \right)^T $$ 梯度下降算法通过沿梯度反方向更新参数$\theta$(即$\theta \leftarrow \theta - \eta \nabla J(\theta)$,其中$\eta$为学习率),逐步逼近函数最小值[^2]。 --- #### 二、随机梯度下降SGD) **工作原理** 每次迭代仅使用**一个随机样本**计算梯度并更新参数: $$ \theta \leftarrow \theta - \eta \nabla J_i(\theta) $$ 其中$J_i(\theta)$为第$i$个样本的损失函数。 **特点**: 1. 计算速度快,适合大规模数据集[^4] 2. 梯度估计存在噪声,收敛路径不稳定但总体收敛[^4] 3. 支持在线学习(实时更新模型)[^3] --- #### 三、小批量梯度下降MBGD) **工作原理** 每次迭代使用**小批量样本**(如32、64个)计算梯度: $$ \theta \leftarrow \theta - \eta \cdot \frac{1}{m} \sum_{i=1}^m \nabla J_i(\theta) $$ 其中$m$为批量大小。 **特点**: 1. 平衡计算效率与梯度稳定性,适合GPU并行加速[^5] 2. 减少参数更新的方差,收敛曲线更平滑[^5] 3. 需根据任务调整批量大小(过大导致内存不足,过小退化为SGD)[^3] --- #### 四、区别与联系 | **算法** | **样本使用** | 计算速度 | 内存需求 | 收敛稳定性 | 典型应用场景 | |----------------|---------------------|----------|----------|------------|----------------------| | 批量梯度下降BGD) | 全部样本 | 慢 | 高 | 高 | 小规模数据集 | | 随机梯度下降SGD) | 单个随机样本 | 快 | 低 | 低 | 在线学习、大规模数据 | | 小批量梯度下降MBGD)| 小批量随机样本 | 中等 | 中等 | 中等 | 深度学习、GPU训练 | **联系**: 1. 三者核心目标一致:通过梯度方向优化模型参数 2. MBGDBGDSGD的折中方案,兼具两者的优势 3. 均需合理设置学习率,可采用动态调整策略(如引用5中的`learning_rate_schedule`) --- #### 五、代码示例(小批量梯度下降) ```python import numpy as np # 生成数据 X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) X_b = np.c_[np.ones((100, 1)), X] # 参数初始化 theta = np.random.randn(2, 1) batch_size = 10 n_epochs = 1000 # 学习率调度函数 t0, t1 = 5, 50 def learning_rate_schedule(t): return t0 / (t + t1) # 训练过程 for epoch in range(n_epochs): shuffled_indices = np.random.permutation(len(X_b)) # 打乱数据 X_b_shuffled = X_b[shuffled_indices] y_shuffled = y[shuffled_indices] for i in range(0, len(X_b), batch_size): xi = X_b_shuffled[i:i+batch_size] yi = y_shuffled[i:i+batch_size] gradients = 2/batch_size * xi.T.dot(xi.dot(theta) - yi) # 计算梯度 eta = learning_rate_schedule(epoch * len(X_b) + i) theta -= eta * gradients # 更新参数 print("最终参数:", theta) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值