梯度下降算法的原理与实现
题目描述
梯度下降是机器学习中用于优化模型参数的核心算法。假设我们有一个线性回归模型,其损失函数为均方误差(MSE):
\(J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2\),
其中 \(h_\theta(x) = \theta_0 + \theta_1 x\) 是假设函数,\(\theta_0\) 和 \(\theta_1\) 是待优化的参数。请详细解释梯度下降如何通过迭代更新参数来最小化 \(J(\theta)\)。
解题过程
1. 理解梯度下降的核心思想
梯度下降的目的是找到损失函数 \(J(\theta)\) 的最小值。想象你站在一座山上,目标是走到山谷最低点。梯度下降的策略是:
- 计算梯度:梯度是损失函数对每个参数的偏导数,指向函数值上升最快的方向。
- 沿负梯度方向移动:通过向梯度反方向(下坡方向)更新参数,逐步逼近最小值。
2. 数学形式:参数更新规则
对于每个参数 \(\theta_j\),更新规则为:
\[\theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} \]
其中:
- \(\alpha\) 是学习率(步长),控制每次更新的幅度。
- \(\frac{\partial J(\theta)}{\partial \theta_j}\) 是损失函数对参数 \(\theta_j\) 的偏导数。
3. 推导线性回归的偏导数
以线性回归的 MSE 损失函数为例:
- 假设函数:\(h_\theta(x) = \theta_0 + \theta_1 x\)
- 损失函数:\(J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2\)
分别对 \(\theta_0\) 和 \(\theta_1\) 求偏导:
\[\frac{\partial J}{\partial \theta_0} = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \]
\[ \frac{\partial J}{\partial \theta_1} = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x^{(i)} \]
推导细节:
- 对 \(J(\theta)\) 求导时,链式法则会引入系数 2,与分母的 2 抵消,因此公式中保留 \(\frac{1}{m}\)。
4. 迭代更新参数的具体步骤
假设初始参数为 \(\theta_0 = 0, \theta_1 = 0\),学习率 \(\alpha = 0.01\),迭代次数为 1000。
步骤:
- 计算当前梯度:
用当前参数计算所有样本的预测值 \(h_\theta(x^{(i)})\),再计算偏导数。
\[ \frac{\partial J}{\partial \theta_0} = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \]
\[ \frac{\partial J}{\partial \theta_1} = \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x^{(i)} \]
- 同步更新参数:
\[ \theta_0 := \theta_0 - \alpha \cdot \frac{\partial J}{\partial \theta_0} \]
\[ \theta_1 := \theta_1 - \alpha \cdot \frac{\partial J}{\partial \theta_1} \]
注意:必须所有参数同时更新,避免使用已更新的值计算其他梯度。
3. 重复迭代:
用新参数重新计算梯度,直到损失函数收敛或达到最大迭代次数。
5. 关键问题与调参
- 学习率选择:
- \(\alpha\) 太小:收敛速度慢。
- \(\alpha\) 太大:可能越过最优解,甚至发散(损失函数震荡或爆炸)。
- 常用策略:尝试 \(\alpha = 0.01, 0.001, 0.0001\) 等,观察损失函数下降曲线。
- 收敛判断:
当损失函数的变化量小于阈值(如 \(10^{-6}\))或梯度接近 0 时,可停止迭代。
6. 扩展:批量梯度下降 vs 随机梯度下降
- 批量梯度下降(BGD):
每次迭代使用全部样本计算梯度(如上文方法),稳定性高但计算开销大。 - 随机梯度下降(SGD):
每次随机选择一个样本计算梯度,速度快但震荡明显。
折中方案:小批量梯度下降(Mini-batch GD),每次使用一小批样本(如 32 个)平衡效率与稳定性。
总结
梯度下降通过不断沿负梯度方向调整参数,逐步逼近损失函数的最小值。理解偏导数的计算、学习率的影响以及迭代细节,是掌握优化算法的基础。