梯度下降的数学原理:用泰勒公式剖析梯度下降
梯度下降的数学原理:用泰勒公式剖析梯度下降
梯度下降是机器学习中最基础也是最重要的优化算法之一。它通过迭代调整模型参数,使得损失函数逐步减小,最终达到最优解。本文将从数学的角度,利用泰勒公式深入剖析梯度下降的工作原理,帮助读者理解为什么沿着梯度的反方向调整参数能够有效减少损失函数的值。
梯度下降(Gradient Descent)是机器学习中非常核心的优化算法,通过不断调整模型参数,让损失函数(Loss Function)逐渐变小,从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数,因此最小化损失函数是训练机器学习模型的目标。这篇文章用一个更数学化的视角来剖析梯度下降的原理,特别是通过泰勒公式来解释为什么沿着梯度反方向调整参数能够有效减少损失函数的值。
1. 损失函数与目标
1.1 什么是损失函数?
损失函数L ( θ ) L(\theta)L(θ)是模型参数θ \thetaθ的函数,用于量化模型预测值y ^ \hat{y}y^ 和真实值y yy的差距。以下是两种常见的损失函数:
- 均方误差(MSE):
L ( θ ) = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L(\theta) = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2L(θ)=n1 i=1∑n (yi −y^ i )2这里,y i y_iyi 是真实值,y ^ i \hat{y}_iy^ i 是由模型参数θ \thetaθ计算得到的预测值。
- 交叉熵损失(Cross-Entropy Loss):
L ( θ ) = − 1 n ∑ i = 1 n [ y i log y ^ i + ( 1 − y i ) log ( 1 − y ^ i ) ] L(\theta) = -\frac{1}{n} \sum_{i=1}^n \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]L(θ)=−n1 i=1∑n [yi logy^ i +(1−yi )log(1−y^ i )]
这个损失函数常用于分类任务,特别是二分类问题。
1.2 目标
在机器学习的训练过程中,我们希望找到一组最优参数θ \thetaθ,让损失函数L ( θ ) L(\theta)L(θ)达到最小值:
min θ L ( θ ) \min_\theta L(\theta)θmin L(θ)
直观上,这意味着我们希望模型的预测尽可能接近真实值。
2. 用泰勒公式分析损失函数的变化
为了理解梯度下降背后的数学原理,我们需要借助泰勒公式,来研究参数θ \thetaθ的调整如何影响损失函数L ( θ ) L(\theta)L(θ)的值。
2.1 一阶泰勒展开
假设当前模型参数是θ t \theta_tθt ,损失函数在这一点的值为L ( θ t ) L(\theta_t)L(θt )。如果将参数从θ t \theta_tθt 调整为θ t + 1 \theta_{t+1}θt+1 ,损失函数的值可以用一阶泰勒展开近似:
L ( θ t + 1 ) ≈ L ( θ t ) + ∇ L ( θ t ) T ( θ t + 1 − θ t ) L(\theta_{t+1}) \approx L(\theta_t) + \nabla L(\theta_t)^T (\theta_{t+1} - \theta_t)L(θt+1 )≈L(θt )+∇L(θt )T(θt+1 −θt )
- L ( θ t ) L(\theta_t)L(θt ):当前参数点的损失函数值。
- ∇ L ( θ t ) \nabla L(\theta_t)∇L(θt ):损失函数在θ t \theta_tθt 处的梯度,表示损失函数在每个参数维度上的变化率。
- θ t + 1 − θ t \theta_{t+1} - \theta_tθt+1 −θt :参数调整的变化量。
这个公式告诉我们,损失函数的变化主要由两部分决定:
- 当前的损失函数值L ( θ t ) L(\theta_t)L(θt );
- 参数变化方向和大小对损失函数的贡献,即∇ L ( θ t ) T ( θ t + 1 − θ t ) \nabla L(\theta_t)^T (\theta_{t+1} - \theta_t)∇L(θt )T(θt+1 −θt )。
2.2 梯度的含义梯度
∇ L ( θ t ) \nabla L(\theta_t)∇L(θt )是一个向量,包含损失函数对每个参数的偏导数:
∇ L ( θ t ) = ( ∂ L ∂ θ 1 , ∂ L ∂ θ 2 , … , ∂ L ∂ θ n ) \nabla L(\theta_t) = \left( \frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}, \dots, \frac{\partial L}{\partial \theta_n} \right)∇L(θt )=(∂θ1 ∂L ,∂θ2 ∂L ,…,∂θn ∂L )
几何上,梯度指向损失函数L ( θ ) L(\theta)L(θ)增加最快的方向。也就是说,如果我们沿着梯度的方向调整参数,损失函数的值会迅速增大。
3. 梯度下降:让损失函数减小
我们关心的是让损失函数逐步减小,因此需要反其道而行之,沿着梯度的反方向调整参数。
3.1 参数更新公式在梯度下降中,参数的更新公式是:
θ t + 1 = θ t − α ∇ L ( θ t ) \theta_{t+1} = \theta_t - \alpha \nabla L(\theta_t)θt+1 =θt −α∇L(θt )
- α \alphaα是学习率(Learning Rate),控制参数调整的步长。
- − ∇ L ( θ t ) -\nabla L(\theta_t)−∇L(θt )是梯度的反方向,表示损失函数下降最快的方向。这个公式的核心思想很简单:在每一步迭代中,我们根据当前的梯度信息,沿着损失函数下降最快的方向移动一小步,从而逐步逼近损失函数的最小值。
那学习率为什么不设置最大呢?那样子损失函数一步岂不是能降很多?
这里就陷入了一个误区,因为每一轮迭代中,此时导数的方向是只针对于“当前这个时刻的”,在下一个时刻,导数的方向可能
改变
,可以看下图:
3.2 损失函数的变化将参数更新公式代入泰勒展开式,我们可以进一步研究损失函数的变化:
L ( θ t + 1 ) ≈ L ( θ t ) + ∇ L ( θ t ) T ( − α ∇ L ( θ t ) ) L(\theta_{t+1}) \approx L(\theta_t) + \nabla L(\theta_t)^T (-\alpha \nabla L(\theta_t))L(θt+1 )≈L(θt )+∇L(θt )T(−α∇L(θt ))
化简后得到:
L ( θ t + 1 ) ≈ L ( θ t ) − α ∇ L ( θ t ) 2 L(\theta_{t+1}) \approx L(\theta_t) - \alpha \nabla L(\theta_t)^2L(θt+1 )≈L(θt )−α∇L(θt )2
- ∇ L ( θ t ) 2 \nabla L(\theta_t)^2∇L(θt )2是梯度的范数平方,表示梯度的大小。
- 因为∇ L ( θ t ) 2 > 0 \nabla L(\theta_t)^2 > 0∇L(θt )2>0且α > 0 \alpha > 0α>0,可以确定L ( θ t + 1 ) < L ( θ t ) L(\theta_{t+1}) < L(\theta_t)L(θt+1 )<L(θt )。
这说明,每次更新参数后,损失函数的值都会减小。
4. 梯度下降的执行流程
基于上面的分析,梯度下降法的执行流程可以总结为以下几个步骤:
- 初始化参数:随机初始化模型参数θ \thetaθ(或根据经验设置初值)。
- 计算梯度:在当前参数点θ t \theta_tθt ,计算损失函数的梯度∇ L ( θ t ) \nabla L(\theta_t)∇L(θt )。
- 更新参数:根据梯度下降公式调整参数:θ t + 1 = θ t − α ∇ L ( θ t ) \theta_{t+1} = \theta_t - \alpha \nabla L(\theta_t)θt+1 =θt −α∇L(θt )
- 判断收敛条件:如果梯度的范数∇ L ( θ t ) \nabla L(\theta_t)∇L(θt )足够小,或者损失函数的变化量小于设定阈值,则停止迭代;否则回到第 2 步。
5. 梯度下降的核心思想
通过这个分析,我们可以直观理解梯度下降法的核心思想:
- 梯度的方向性:梯度∇ L ( θ ) \nabla L(\theta)∇L(θ)指向损失函数L ( θ ) L(\theta)L(θ)增加最快的方向,沿着反方向调整参数可以快速减少损失。
- 学习率的重要性:学习率α \alphaα控制了每次调整的步长,步长过大可能导致不稳定,过小则会收敛缓慢。
- 迭代收敛:通过逐步调整参数,梯度下降法让损失函数值逐步减小,最终逼近最优解。
- 为什么必须减去梯度的值?可以理解为是泰勒公式本身的要求,因为展开的第二项就带有一个一阶导数
在最后会详细解释
梯度下降法作为机器学习中最基础的优化算法之一,其数学原理非常直观,但效果却极为强大。通过梯度下降,我们可以高效地找到损失函数的最优解,从而训练出性能优秀的机器学习模型。
详细解释:为什么要让θ \thetaθ减去α \alphaα倍梯度?
从泰勒展开到梯度下降:为什么要让θ \thetaθ减去α \alphaα倍梯度?
在机器学习的优化过程中,我们常常使用梯度下降法(Gradient Descent)来最小化损失函数L ( θ ) L(\theta)L(θ)。下面通过泰勒展开的思路,解释为什么选择
θ ← θ − α ∇ L ( θ ) \theta\leftarrow \theta - \alpha \nabla L(\theta)θ←θ−α∇L(θ)
能够保证损失函数持续下降。
我们先从泰勒公式出发,通过分析损失函数在当前参数附近的局部线性变化,发现如果让参数在梯度反方向移动,就能够在每一步迭代里最大程度地让损失函数减小。然后,才自然地得到θ \thetaθ的更新规则是「减去α \alphaα倍的梯度」。
1. 从泰勒公式出发
在参数θ \thetaθ附近,对损失函数L ( θ ) L(\theta)L(θ)做一阶泰勒展开:
L ( θ + Δ θ ) ≈ L ( θ ) + ∇ L ( θ ) T Δ θ . L(\theta + \Delta\theta) \approx L(\theta) + \nabla L(\theta)^T \Delta\theta.L(θ+Δθ)≈L(θ)+∇L(θ)TΔθ.
- ∇ L ( θ ) \nabla L(\theta)∇L(θ)是损失函数在θ \thetaθ处的梯度向量。
- Δ θ \Delta\thetaΔθ是参数改变的量。我们的目标是让L ( θ + Δ θ ) < L ( θ ) L(\theta + \Delta\theta) < L(\theta)L(θ+Δθ)<L(θ),因此需要
∇ L ( θ ) T Δ θ < 0. \nabla L(\theta)^T ,\Delta\theta < 0.∇L(θ)TΔθ<0.
2. 梯度反方向:最快下降的方向
- 梯度方向:∇ L ( θ ) \nabla L(\theta)∇L(θ)指向L ( θ ) L(\theta)L(θ)增长(上升)最快的方向。
- 反梯度方向:− ∇ L ( θ ) -\nabla L(\theta)−∇L(θ)则是L ( θ ) L(\theta)L(θ)减少(下降)最快的方向。如果令
Δ θ = − α ∇ L ( θ ) , \Delta\theta = -\alpha ,\nabla L(\theta),Δθ=−α∇L(θ),
那么
∇ L ( θ ) T Δ θ = ∇ L ( θ ) T ( − α ∇ L ( θ ) ) = − α ∇ L ( θ ) 2 , \nabla L(\theta)^T ,\Delta\theta = \nabla L(\theta)^T \bigl(-\alpha \nabla L(\theta)\bigr)= -,\alpha,\nabla L(\theta)^2,∇L(θ)TΔθ=∇L(θ)T(−α∇L(θ))=−α∇L(θ)2,
由于∇ L ( θ ) 2 > 0 \nabla L(\theta)^2 > 0∇L(θ)2>0且α > 0 \alpha > 0α>0,所以该结果为负值,即
L ( θ + Δ θ ) ≈ L ( θ ) − α ∇ L ( θ ) 2 < L ( θ ) . L(\theta + \Delta\theta) \approx L(\theta) - \alpha ,\nabla L(\theta)^2 < L(\theta).L(θ+Δθ)≈L(θ)−α∇L(θ)2<L(θ).
这表示我们在当前点处让损失函数确实向下移动了一步。
3. 推导更新公式
为了让损失函数一步步地下降,我们可以把上述“在反梯度方向移动”写成一个迭代式子:
Δ θ = − α ∇ L ( θ ) , \Delta\theta = -\alpha ,\nabla L(\theta),Δθ=−α∇L(θ),
Δ θ = θ t + 1 − θ t \Delta\theta = \theta_{t+1} - \theta_tΔθ=θt+1 −θt
从而有:
θ t + 1 = θ t − α ∇ L ( θ t ) . \theta_{t+1} = \theta_t - \alpha ,\nabla L(\theta_t).θt+1 =θt −α∇L(θt ).
- θ t \theta_tθt 表示在第t tt步的参数值;
- α \alphaα是学习率(Learning Rate),用于控制移动的步长。在每一步迭代中,我们根据当前参数θ t \theta_tθt 的梯度∇ L ( θ t ) \nabla L(\theta_t)∇L(θt ),沿着反梯度方向走一小步,使L ( θ ) L(\theta)L(θ)得到下降。
4. 结论
- 先有泰勒展开的分析:
通过局部线性化,明确看到− ∇ L ( θ ) -\nabla L(\theta)−∇L(θ)能带来最大的负变化,让损失快速下降。
- 再有梯度下降的更新公式:
使用θ ← θ − α ∇ L ( θ ) \theta \leftarrow \theta - \alpha \nabla L(\theta)θ←θ−α∇L(θ),逐步向使损失函数减小的方向移动,直到达到最优或近似最优解。因此,正是因为在泰勒公式的分析中我们发现“减去α \alphaα倍的梯度”能够让损失在每一步减少最多,才推导出参数更新规则中要让θ \thetaθ减去α \alphaα倍的梯度。