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