梯度下降(批量梯度下降、随机梯度下降、小批量梯度下降)

上一篇中我们推导了损失函数 J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (y^{(i)} - h_{\theta}(x^{(i)}))^2 J(θ)=2m1i=1m(y(i)hθ(x(i)))2的由来,结尾讲到最小化这个损失函数来找到最优的参数 θ \theta θ,通常是使用梯度下降实现的。

梯度下降广泛用于机器学习和统计建模中的参数估计,特别是在训练线性回归模型时。它的目标是最小化一个损失函数(目标函数),这个函数量化了模型预测和真实数据之间的误差。梯度下降通过迭代地调整模型的参数来减少成本函数的值。

梯度下降的过程类似于一个“盲人下山”的过程:

起始点:就像盲人随机地在山上的某个位置开始,梯度下降算法通常从一个随机的参数值开始。这个起始点可能远离最小值,也就是最低点。

目标值(误差最低值):算法的目标是找到成本函数的最小值,这就好比盲人想要下山到达山谷底部,那里是海拔最低的地方。

获取移动方向:盲人通过脚下的坡度来判断下山的方向,而梯度下降算法通过计算成本函数的梯度来确定下降的方向。梯度告诉我们成本函数上升最快的方向,我们需要往相反方向移动来降低成本函数的值。

控制移动距离(步长):盲人下山时的每一步都不会太大,以免跌倒;同理,梯度下降算法中的学习率决定了每一步下降的距离。学习率太大可能会越过最小值,太小则下降过程会非常缓慢。

递归移动(迭代更新):盲人会一步一步地移动,每走一步都基于当前位置的坡度来决定下一步的方向。梯度下降算法通过迭代地更新参数,每次迭代都基于当前参数的梯度来更新,直到找到最小值或者达到其他停止条件。
梯度下降
在这个下山(梯度下降)概念中,又细分出几种算法,其中如上述的普通梯度下降被命名为:批量梯度下降,除了批量梯度下降外还有随机梯度下降和小批量梯度下降。

批量梯度下降:

批量梯度下降(Batch Gradient Descent)和上述的方法一样,小步多次逐步找到最终的目标值,在每次迭代中使用全部的训练数据来计算损失函数的梯度。因为要用到全部训练数据,所以内存占用高、性能差、速度慢、准确度高。
批量梯度下降的详细步骤:

  1. 初始化参数:
    在开始迭代之前,首先随机选择一组参数 θ \theta θ或者从一个零向量开始。
  2. 计算梯度:
    在每次迭代中,先计算损失函数对于每个参数 θ j \theta_j θj的梯度。这涉及到对整个训练集的计算,如下所示: ∇ θ J ( θ ) = − α 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x ( i ) \nabla_{\theta} J(\theta) = -\alpha \frac{1}{m} \sum_{i=1}^{m} (y^{(i)}-h_{\theta}(x^{(i)}) )x^{(i)} θJ(θ)=αm1i=1m(y(i)hθ(x(i)))x(i)

其中:

  • ∇ θ J ( θ ) \nabla_{\theta} J(\theta) θJ(θ)表示损失函数 J ( θ ) J(\theta) J(θ)关于参数向量 θ \theta θ的梯度
  • m m m是训练样本的数量
  • x ( i ) x^{(i)} x(i)是第 i i i个训练样本的特征
  • y ( i ) y^{(i)} y(i)是对应的目标值
  • y ( i ) − h θ ( x ( i ) ) y^{(i)} - h_{\theta}(x^{(i)}) y(i)hθ(x(i))是预测误差,也就是模型对第 i i i个训练样本的预测值 h θ ∗ ( x ( i ) ) h_{\theta}* (x^{(i)}) hθ(x(i))与实际值 y ( i ) y^{(i)} y(i)之间的差异
  • x ( i ) x^{(i)} x(i)(第 i i i的特征向量)与预测误差相乘,表示梯度是如何随着特征 x ( i ) x^{(i)} x(i)的变化而变化
  • α \alpha α表示步长
  1. 更新参数:
    计算出梯度后,更新参数 θ : = θ − α ∇ θ J ( θ ) \theta := \theta - \alpha \nabla_{\theta} J(\theta) θ:=θαθJ(θ)
    α 是学习率,决定了在参数空间中移动的步长。
    迭代直至收敛:

重复步骤2和步骤3直到损失函数的值不再显著变化,或者达到一定的迭代次数。
所以相对于 θ j \theta_j θj的下一个位置 θ j ′ \theta_j^{\prime} θj就可以表示为 θ j \theta_j θj减去 ( − 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x ( i ) ) (-\frac{1}{m} \sum_{i=1}^{m} (y^{(i)}-h_{\theta}(x^{(i)}) )x^{(i)}) (m1i=1m(y(i)hθ(x(i)))x(i)),即:

θ j ′ = θ j + α 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j^{\prime} = \theta_j + \alpha \frac{1}{m} \sum_{i=1}^{m} \left(y^{(i)} - h_{\theta}(x^{(i)}) \right) x_j^{(i)} θj=θj+αm1i=1m(y(i)hθ(x(i)))xj(i)

随机梯度下降:

随机梯度下降是批量梯度下降的一个优化版本,每次只找一个样本,迭代速度快,但不一定每次都朝着收敛方向。对于每个参数 θ j ′ \theta_j^{\prime} θj,更新规则如下:

θ j ′ = θ j + ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j^{\prime}= \theta_j + \left({y^{(i)} - h_ \theta}(x^{(i)}) \right) x_j^{(i)} θj=θj+(y(i)hθ(x(i)))xj(i)

小批量梯度下降:

小批量梯度下降在每次迭代中使用一个小批量(batch)的样本来计算梯度和更新参数。相当于取少量的数据牺牲一些每次移动的准确性,从而极大提高运算速度,因此也是最常用的梯度下降方法。对于每个参数 θ j ′ \theta_j^{\prime} θj,更新规则如下:
θ j ′ = θ j − α 1 B ∑ i = k k + B − 1 ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j^{\prime}= \theta_j - \alpha \frac{1}{B} \sum_{i=k}^{k+B-1} \left( h_{\theta}(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θj=θjαB1i=kk+B1(hθ(x(i))y(i))xj(i)

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值