随机梯度下降和批量梯度下降的区别

本文探讨了机器学习中批量梯度下降(BGD)与随机梯度下降(SGD)的区别。批量梯度下降每步迭代使用所有样本,寻求全局最优解;而SGD每次仅用一个样本,可能找到全局或局部最优解。

最近,看了斯坦福大学讲的梯度下降算法的视频,对其中的批量梯度下降算法(batch gradient descent algorithm,BGD)和随机梯度下降算法(Stochastic gradient descent algorithm,SGD)的区别还是不太理解。在网上查了一下,给出自己的理解:


样本个数为m,x为n维的向量。

(1)批量梯度下降:

权值更新公式:


从公式中可以看出,批量梯度下降算法每迭代一步,要用到训练集的所有样本,最后得到的是一个全局最优解。


(2)随机梯度下降:

权值更新公式:


也是看公式,能够发现随机梯度的权值更新公式里调整项没有累加符号,说明随机梯度下降中只用到了训练集的一个样本,最后得到的可能是全局最优解,也可能是局部最优解。













### 随机梯度下降批量梯度下降的对比 #### 区别 - **数据利用方式** 批量梯度下降法(Batch Gradient Descent, BGD)在每一次迭代过程中使用整个训练集来计算损失函数关于权重向量的梯度并更新模型参数,这意味着每一步都力求全局最优解的方向前进[^1]。而随机梯度下降法(Stochastic Gradient Descent, SGD),则是在每次迭代只选取单一样本进行梯度估计参数调整,因此SGD可以看作是一种更快速但波动较大的逼近方法。 - **收敛特性** 对于BGD而言,因为每次都考虑到了全部的数据样本,在理想情况下能够稳定地朝着全局最小值移动,不过一旦遇到复杂的误差曲面可能会陷入局部极小值难以逃脱。相比之下,SGD由于其固有的噪声性质反而有助于跳出某些浅层陷阱,但也正因为这种不稳定性使得最终找到的确切位置可能不是真正的全局最优点附近的位置。 - **计算开销** 计算成本方面,BGD需要遍历一遍完整的数据集才能完成一次参数更新操作,当面对大规模数据时显然效率低下;相反,SGD仅需处理单一实例即可执行同样的任务,大大减少了内存占用以及运算时间,尤其适合在线学习场景或是实时性强的应用场合。 #### 共同点 - **目标一致** 不论是采用哪种形式的梯度下降策略,两者都是为了通过不断修正权值以使预测输出尽可能贴近实际标签值,从而达到降低整体损失的目的。理论上讲,如果给予足够多的时间资源,两种算法都应该能给出相近的结果。 - **依赖超参调节** 这两类方法均高度依赖诸如初始条件设定、步长选择等因素的影响,不当的选择可能导致无法有效寻优甚至完全失败。例如过大的学习率会让搜索过程变得不稳定,容易越过最低点造成振荡现象;反之太小又会使进展缓慢,延长必要的等待周期[^3]。 ```python import numpy as np def batch_gradient_descent(X, y, theta_init, alpha=0.01, iterations=1000): m = len(y) Theta_optimal = theta_init for _ in range(iterations): gradient = (1/m)*X.T.dot(X.dot(Theta_optimal)-y) Theta_optimal -= alpha * gradient return Theta_optimal def stochastic_gradient_descent(X, y, theta_init, alpha=0.01, epochs=50): m = len(y) Theta_optimal = theta_init for epoch in range(epochs): shuffled_indices = np.random.permutation(m) X_shuffled = X[shuffled_indices] y_shuffled = y[shuffled_indices] for i in range(m): random_index = np.random.randint(m) xi = X_shuffled[random_index:random_index+1] yi = y_shuffled[random_index:random_index+1] gradients = 2*xi.T.dot(xi.dot(Theta_optimal) - yi) Theta_optimal = Theta_optimal - alpha * gradients return Theta_optimal ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值