梯度下降总结(BGD ,SGD, MBGD)

本文介绍了梯度下降法的三种形式:批梯度下降(BGD)、随机梯度下降(SGD)和小批量随机梯度下降(MBGD)。在机器学习中,梯度下降用于优化损失函数,寻找参数的最小值。BGD每次迭代遍历所有样本,计算量大;SGD每次仅用一个样本,计算快但可能陷入局部最优;MBGD则平衡了计算量和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 从梯度下降开始

这两天学习了机器学习课程的第二课,课程内容是围绕梯度下降展开的,下面就我的学习内容做一个总结。

  • 什么是梯度下降?

梯度下降 (Gradient Decent) 是优化算法的一种,其思想是让损失函数沿着梯度的方向下降, 以最快的速度取到最小值。为啥是沿梯度的方向?因为梯度 (gradient) 就是函数变化最快的方向,贴一个梯度的定义: 梯度-维基百科,想深入了解的同学可以自取。

2. 批梯度下降 (Batch Gradient Decent)

批梯度下降是梯度下降最基本的形式,下面尝试在Linear Regression算法中使用批梯度下降来优化他的损失函数。

作为新手,在理解算法的时候,很多时候难住我们的不是逻辑,而是各种千奇百怪的符号,所以我先把公式中需要用到的符号列在这里,以消除符号的干扰。

符号解释:

  • h ( x ) h(x) h(x) 学习算法的假设函数,本例中的学习算法是Linear Regression
  • x i x_{i} xi 数据集的第 i 个特征
  • θ i \theta_{i} θi 假设函数对第 i 个特征的系数
  • n n n 数据集的特征数
  • m m m 数据集的样本数目
  • ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)) 第 i 条训练样本

图片可能更加直观,请原谅我拙劣的画技,原始图片取自课程课件:
在这里插入图片描述

Linear Regression 的假设函数为:
h ( x ) = ∑ i = 0 n θ i x i h(x) = \sum_{i=0}^{n}{\theta_{i}x_{i}} h(x)=i=0nθixi
其损失函数:
J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}{(h_{\theta} (x^{(i)}) - y^{(i)}) ^ 2} J(θ)=21i=1m(hθ(x(i))y(i))2
在给定训练集的情况下, ( x , y ) (x, y) (x,y) 均已知,损失函数只与 θ \theta θ有关,记为 J ( θ ) J(\theta) J(θ) , 前面的系数 1 2 \frac{1}{2} 2

### 随机梯度下降、批量梯度下降与小批量梯度下降的比较及其应用 在机器学习领域,优化算法的选择对于模型性能至关重要。三种常见的梯度下降变体——随机梯度下降(Stochastic Gradient Descent, SGD)、批量梯度下降(Batch Gradient Descent, BGD)以及小批量梯度下降(Mini-Batch Gradient Descent, MBGD),各自具有不同的特点和适用场景。 #### 批量梯度下降 (BGD) 批量梯度下降利用整个数据集来执行一次权重更新操作。这种方法能够提供最稳定的收敛路径,但由于每一步都需要遍历全部样本,计算开销极大,尤其是在处理大规模数据集时效率低下[^2]。 ```python def batch_gradient_descent(X, y, theta, alpha=0.01, iterations=1000): m = len(y) for iteration in range(iterations): gradients = 2/m * X.T.dot(X.dot(theta) - y) theta -= alpha * gradients return theta ``` #### 随机梯度下降 (SGD) 相比之下,随机梯度下降每次仅选取单一样本进行参数调整,这不仅显著降低了内存占用率,而且加快了训练速度。然而,频繁的方向变化可能导致解空间内的振荡现象更为明显,使得最终找到全局最优解的过程变得曲折。 ```python import numpy as np def stochastic_gradient_descent(X, y, theta, alpha=0.01, num_epochs=50): m = len(y) for epoch in range(num_epochs): indices = list(range(m)) np.random.shuffle(indices) for i in indices: xi = X[i:i+1] yi = y[i:i+1] gradients = 2 * xi.T.dot(xi.dot(theta) - yi) theta -= alpha * gradients return theta ``` #### 小批量梯度下降 (MBGD) 作为前两者的折衷方案,小批量梯度下降采用固定数量的小批样本集合来进行每一次迭代更新。这种方式既保留了部分随机性的优势,又能在一定程度上缓解因过度波动带来的负面影响,成为实践中最为广泛采纳的方法之一。 ```python def mini_batch_gradient_descent(X, y, theta, alpha=0.01, epochs=50, batch_size=32): m = len(y) 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(0, m, batch_size): xi = X_shuffled[i : i + batch_size] yi = y_shuffled[i : i + batch_size] gradients = 2 / batch_size * xi.T.dot(xi.dot(theta) - yi) theta -= alpha * gradients return theta ``` 通过上述分析可以看出,在面对不同规模的数据集或者特定的应用需求时,合理选择合适的梯度下降策略可以有效提升模型的学习效果和运行效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值