梯度下降(Gradient Descent)是机器学习中非常核心的优化算法,通过不断调整模型参数,让损失函数(Loss Function)逐渐变小,从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数,因此最小化损失函数是训练机器学习模型的目标。这篇文章用一个更数学化的视角来剖析梯度下降的原理,特别是通过泰勒公式来解释为什么沿着梯度反方向调整参数能够有效减少损失函数的值。
1. 损失函数与目标
1.1 什么是损失函数?
损失函数 L ( θ ) L(\theta) L(θ) 是模型参数 θ \theta θ 的函数,用于量化模型预测值 y ^ \hat{y} y^ 和真实值 y y y 的差距。以下是两种常见的损失函数:
- 均方误差(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)^2 L(θ)=n1i=1∑n(yi−y^i)2 这里, y i y_i yi 是真实值, y ^ i \hat{y}_i y^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(θ)=−n1i=1∑n[yilogy^i+(1−yi)log(1−y^i)]
这个损失函数常用于分类任务,特别是二分类问题。
1.2 目标
在机器学习的训练过程中,我们希望找到一组最优参数
θ
\theta
θ,让损失函数
L
(
θ
)
L(\theta)
L(θ) 达到最小值:
min
θ
L
(
θ
)
\min_\theta L(\theta)
θminL(θ)
直观上,这意味着我们希望模型的预测尽可能接近真实值。
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)^2
L(θ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 t t 步的参数值;
- α \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 α 倍的梯度。