梯度下降算法计算过程的理解

本文主要注重计算细节,即计算过程,前提要知道梯度下降算法的大致原理,如有错误欢迎指正
( 内容基于文心一言生成)

下面介绍的是批量梯度下降(Batch Gradient Descent, BGD)和小批量梯度下降算法(Mini-Batch Gradient Descent, MBGD)

视频讲解:【[5分钟深度学习] #01 梯度下降算法】 https://www.bilibili.com/video/BV1oY411N7Xz/?share_source=copy_web&vd_source=78d2dcd96262168cc1157adc0b58ab57

文心一言对话:https://yiyan.baidu.com/share/jE4rZGZlOs

案例引入

线性回归模型

假设有一个简单的线性回归模型,其形式为:

h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x) = \theta_0 + \theta_1 x hθ(x)=θ0+θ1x

其中, h θ ( x ) h_{\theta}(x) hθ(x) 是模型的预测值, x x x 是输入特征, θ 0 \theta_0 θ0 θ 1 \theta_1 θ1 是模型参数(也称为权重)。

损失函数

对于线性回归,常用的损失函数是均方误差(Mean Squared Error, MSE):

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2

其中, m m m 是训练样本的数量, x ( i ) x^{(i)} x(i) y ( i ) y^{(i)} y(i) 分别是第 i i i 个样本的输入和输出(真实值), h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i)) 是模型对第 i i i 个样本的预测值。

求全局梯度

为了找到使损失函数最小的参数 θ \theta θ,需要计算损失函数关于每个参数 θ j \theta_j θj 的偏导数,即梯度。

对于参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1,梯度分别为(本质上为单个样本梯度求和后取平均值):

∂ J ( θ ) ∂ θ 0 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J(\theta)}{\partial \theta_0} = \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) θ0J(θ)=m1i=1m(hθ(x(i))y(i))

∂ J ( θ ) ∂ θ 1 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x ( i ) \frac{\partial J(\theta)}{\partial \theta_1} = \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x^{(i)} θ1J(θ)=m1i=1m(hθ(x(i))y(i))x(i)

这里,可以注意到梯度计算涉及到了所有训练样本(代值到上面的公式)。具体来说:

  1. 对于每个样本 i i i(样本理解为一组训练数据),计算预测值 h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i)) 和真实值 y ( i ) y^{(i)} y(i) 之间的误差 h θ ( x ( i ) ) − y ( i ) h_{\theta}(x^{(i)}) - y^{(i)} hθ(x(i))y(i)
  2. 然后,将这些误差相加(对于 θ 0 \theta_0 θ0 的梯度,直接相加;对于 θ 1 \theta_1 θ1 的梯度,还需要乘以对应的 x ( i ) x^{(i)} x(i))。
  3. 最后,将累加的结果除以 m m m(样本数量),以得到平均梯度

例子

假设有以下三个训练样本:

x ( i ) x^{(i)} x(i) y ( i ) y^{(i)} y(i)
12
23
35

并且当前的参数值为 θ 0 = 0 \theta_0 = 0 θ0=0 θ 1 = 0 \theta_1 = 0 θ1=0

  1. 正向传播

    • 对于第一个样本, h θ ( 1 ) = 0 + 0 ⋅ 1 = 0 h_{\theta}(1) = 0 + 0 \cdot 1 = 0 hθ(1)=0+01=0,误差为 0 − 2 = − 2 0 - 2 = -2 02=2
    • 对于第二个样本, h θ ( 2 ) = 0 + 0 ⋅ 2 = 0 h_{\theta}(2) = 0 + 0 \cdot 2 = 0 hθ(2)=0+02=0,误差为 0 − 3 = − 3 0 - 3 = -3 03=3
    • 对于第三个样本, h θ ( 3 ) = 0 + 0 ⋅ 3 = 0 h_{\theta}(3) = 0 + 0 \cdot 3 = 0 hθ(3)=0+03=0,误差为 0 − 5 = − 5 0 - 5 = -5 05=5
  2. 计算梯度(代上面公式):

    • ∂ J ( θ ) ∂ θ 0 = 1 3 ( ( − 2 ) + ( − 3 ) + ( − 5 ) ) = 1 3 ⋅ ( − 10 ) = − 10 3 \frac{\partial J(\theta)}{\partial \theta_0} = \frac{1}{3} \left( (-2) + (-3) + (-5) \right) = \frac{1}{3} \cdot (-10) = -\frac{10}{3} θ0J(θ)=31((2)+(3)+(5))=31(10)=310
    • ∂ J ( θ ) ∂ θ 1 = 1 3 ( ( − 2 ) ⋅ 1 + ( − 3 ) ⋅ 2 + ( − 5 ) ⋅ 3 ) = 1 3 ⋅ ( − 2 − 6 − 15 ) = 1 3 ⋅ ( − 23 ) = − 23 3 \frac{\partial J(\theta)}{\partial \theta_1} = \frac{1}{3} \left( (-2) \cdot 1 + (-3) \cdot 2 + (-5) \cdot 3 \right) = \frac{1}{3} \cdot (-2 - 6 - 15) = \frac{1}{3} \cdot (-23) = -\frac{23}{3} θ1J(θ)=31((2)1+(3)2+(5)3)=31(2615)=31(23)=323

现在,有了全局梯度,可以使用这些梯度来更新参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1,以期望减少损失函数的值。

总结

在批量梯度下降算法计算过程中需要遍历整个数据集进行计算,其中计算全局梯度的方法是分别求每一个训练数据的loss(即单个样本的损失),再分别求每一个loss关于模型参数的梯度,最后将这些梯度求和并取均值。

具体来说,对于每个训练样本 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i)),可以计算其损失 L ( i ) ( θ ) L^{(i)}(\theta) L(i)(θ)(注意这里为了与全局损失 J ( θ ) J(\theta) J(θ) 区分,使用了 L ( i ) ( θ ) L^{(i)}(\theta) L(i)(θ) 来表示单个样本的损失),然后计算该损失关于模型参数 θ \theta θ 的梯度 ∇ θ L ( i ) ( θ ) \nabla_{\theta}L^{(i)}(\theta) θL(i)(θ)

🌟全局损失 J ( θ ) J(\theta) J(θ) 是所有单个样本损失的平均值

J ( θ ) = 1 m ∑ i = 1 m L ( i ) ( θ ) J(\theta) = \frac{1}{m} \sum_{i=1}^{m} L^{(i)}(\theta) J(θ)=m1i=1mL(i)(θ)

其中 m m m 是训练样本的数量。

🌟全局梯度 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) θJ(θ) 则是所有单个样本梯度 ∇ θ L ( i ) ( θ ) \nabla_{\theta}L^{(i)}(\theta) θL(i)(θ) 的平均值:

∇ θ J ( θ ) = 1 m ∑ i = 1 m ∇ θ L ( i ) ( θ ) \nabla_{\theta}J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \nabla_{\theta}L^{(i)}(\theta) θJ(θ)=m1i=1mθL(i)(θ)

在实际操作中,通常会遍历整个训练集,对每个样本执行以下步骤:

  1. 使用当前参数 θ \theta θ 和样本 x ( i ) x^{(i)} x(i) 进行正向传播,计算预测值 h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i))
  2. 计算单个样本的损失 L ( i ) ( θ ) L^{(i)}(\theta) L(i)(θ)
  3. 执行反向传播,计算单个样本损失关于模型参数的梯度 ∇ θ L ( i ) ( θ ) \nabla_{\theta}L^{(i)}(\theta) θL(i)(θ)
  4. 将这个梯度累加到全局梯度中(或者,更常见的是,使用一个变量来累加所有梯度的和,并在遍历完所有样本后除以 m m m 来得到平均梯度)。

最后,使用计算得到的平均梯度来更新模型参数 θ \theta θ

这种方法确保了在更新参数时考虑到了训练集中的所有样本,从而能够朝着全局损失函数减小的方向进行优化。

拓展:小批量梯度下降

小批量梯度下降算法(Mini-Batch Gradient Descent, MBGD)可以部分地理解为在每个batch中的计算过程类似于批量梯度下降(Batch Gradient Descent, BGD)的计算过程,但存在一些关键的区别。

共同点

  • 梯度计算:在MBGD中,对于每个batch内的所有样本,都会计算它们的损失函数,并基于这些损失函数对模型参数求梯度。这与BGD中对整个训练集的所有样本计算梯度的方式在局部batch范围内是相似的。

区别

  • 样本范围:BGD在每次迭代时考虑整个训练集的所有样本,而MBGD则只考虑训练集中的一个子集(即一个batch)的样本。这意味着MBGD的梯度是基于部分数据计算得出的,而不是全部数据。
  • 迭代次数与收敛速度:由于MBGD每次只处理一个batch的数据,因此它的迭代次数会多于BGD(如果总样本数相同且batch大小小于总样本数)。然而,MBGD通常能够更快地收敛,因为它在每次迭代中都能得到一定的梯度更新,而BGD在样本数量极大时可能会因为计算量大而导致迭代速度缓慢。
  • 内存与计算资源:MBGD在内存和计算资源的使用上更加高效,因为它不需要一次性加载整个训练集到内存中。这对于处理大规模数据集尤为重要。

小批量梯度下降算法的具体步骤

  1. 初始化参数:随机初始化模型参数。
  2. 划分数据集:将训练数据集分成若干个小批量(batch),每个小批量包含一定数量的训练样本。
  3. 计算梯度:对于每个小批量,计算其损失函数对模型参数的梯度。
  4. 更新参数:按照梯度的负方向更新模型参数。
  5. 迭代:重复步骤3和4,直到损失函数收敛或达到预设的迭代次数。

综上所述,虽然MBGD在每个batch中的计算过程与BGD有相似之处,但它们在样本范围、迭代次数、收敛速度以及内存和计算资源的使用上存在显著差异。MBGD作为BGD和随机梯度下降(SGD)之间的折中方案,在深度学习中被广泛使用。

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YXXYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值