单变量梯度下降法
1 课程概览
本课讲解梯度下降算法的原理和公式。通过下山类比介绍梯度下降的思想(沿负导数方向逐步逼近最小值),讲解单变量函数中梯度的概念(切线斜率/导数),推导梯度下降公式 $\theta_{i+1} = \theta_i - \alpha \cdot \text{导数}$,并说明学习率α的作用和影响。
2 核心概念与定义
- 梯度下降:沿着梯度下降的方向求解极小值。
- 梯度(Gradient):
- 单变量:某点切线的斜率(导数)
- 多变量:某点的偏导数组成的向量
- 学习率(α):每步走的距离(步长)。
- θ:参数(当前点/下一点)。
- 负导数方向:下降最快的方向。
3 算法与模型详解
3.1 梯度下降思想
类比:下山场景
- 山 = 损失函数
- 山底 = 最小值
- 下山 = 寻找最小值
下山最快方向:
- 上升最快:导数方向
- 下降最快:负导数方向
3.2 梯度下降步骤
步骤:
- 初始化位置S(任意位置)
- 环顾四周,寻找坡度最陡的方向(负导数方向)
- 沿该方向走一步(步长为α)
- 到达新位置,重复步骤2-3
- 如果四周都比S高,返回S(已到最小值)
3.3 正规方程 vs 梯度下降
| 对比 | 正规方程 | 梯度下降 |
|---|---|---|
| 求解方式 | 一步到底 | 逐步逼近 |
| 特点 | 直接套公式 | 每步走一段 |
| 适用场景 | 小数据量 | 大数据量 |
| 问题 | 可能算不出 | 可能梯度震荡/爆炸 |
3.4 梯度的概念
单变量函数:
- 梯度 = 某点切线的斜率 = 导数
- 有方向:函数增长最快的方向
多变量函数:
- 梯度 = 某点的偏导数组成的向量
- 方向:函数增长最快的方向
3.5 梯度下降公式
$$\theta_{i+1} = \theta_i - \alpha \cdot \frac{\partial L}{\partial \theta}$$
说明:
- $\theta_{i+1}$:下一点(更新后的参数)
- $\theta_i$:当前点(当前参数)
- $\alpha$:学习率(步长)
- $\frac{\partial L}{\partial \theta}$:损失函数对参数的偏导数(梯度)
3.6 学习率α的作用
作用:控制每步走的距离
影响:
- α太大:可能跳过最小值,梯度震荡或爆炸
- α太小:收敛速度慢,需要更多迭代
选择:
- 通常取 0.01, 0.001, 0.0001 等
- 需要根据实际问题调整
3.7 梯度下降过程
示例:寻找 $Y = X^2$ 的最小值
初始:$\theta_0 = 5$
梯度:$\frac{dY}{dX} = 2X$
学习率:$\alpha = 0.1$
迭代:
- $\theta_1 = 5 - 0.1 \times 2 \times 5 = 5 - 1 = 4$
- $\theta_2 = 4 - 0.1 \times 2 \times 4 = 4 - 0.8 = 3.2$
- $\theta_3 = 3.2 - 0.1 \times 2 \times 3.2 = 3.2 - 0.64 = 2.56$
- ...
- 最终收敛到 $\theta = 0$(最小值)
4 数学原理与推导
4.1 梯度下降公式
$$\theta_{i+1} = \theta_i - \alpha \cdot \nabla L(\theta)$$
4.2 单变量梯度
$$\nabla L(\theta) = \frac{dL}{d\theta}$$
4.3 损失函数梯度(线性回归)
$$L(\theta) = \frac{1}{2m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i)^2$$
$$\frac{\partial L}{\partial \theta} = \frac{1}{m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i) \cdot X_i$$
5 代码示例
import numpy as np
# 梯度下降求 Y = X^2 的最小值
def gradient_descent():
# 初始化
theta = 5 # 初始点
alpha = 0.1 # 学习率
iterations = 100 # 迭代次数
for i in range(iterations):
# 计算梯度(导数)
gradient = 2 * theta # Y = X^2 的导数是 2X
# 更新参数
theta = theta - alpha * gradient
# 打印每10次的结果
if i % 10 == 0:
print(f"迭代 {i}: theta = {theta:.6f}, Y = {theta**2:.6f}")
return theta
# 运行
result = gradient_descent()
print(f"\n最终结果: theta = {result:.6f}, Y = {result**2:.6f}")
输出示例:
迭代 0: theta = 4.000000, Y = 16.000000
迭代 10: theta = 0.536871, Y = 0.288230
迭代 20: theta = 0.057646, Y = 0.003323
...
最终结果: theta = 0.000000, Y = 0.000000
6 重难点与易错提醒
- ❗重点:梯度下降沿负导数方向逐步逼近最小值。
- ❗重点:梯度下降公式:$\theta_{i+1} = \theta_i - \alpha \cdot \text{梯度}$
- ❗重点:学习率α控制步长,太大震荡,太小收敛慢。
- ❗重点:单变量梯度是导数,多变量梯度是偏导向量。
- ⚠️易错:忘记负号(应该是减去梯度)。
- ⚠️易错:学习率设置不当导致不收敛。
- 💡深入理解:梯度下降是迭代优化算法,适合大数据量。
7 课堂问答精选
Q: 梯度下降和正规方程有什么区别?
A:
- 正规方程:一步到位直接求解,精确解,适合小数据量。
- 梯度下降:逐步逼近最优解,近似解,适合大数据量。 类比:正规方程是一次性下山,梯度下降是每步走一段。
Q: 学习率α如何选择?
A:
- α太大:可能跳过最小值,导致梯度震荡或爆炸。
- α太小:收敛速度慢,需要更多迭代。
- 常用值:0.01, 0.001, 0.0001 等。
- 需要根据实际问题调整,可以通过交叉验证选择最优值。
8 本课小结
- 梯度下降:沿负导数方向逐步逼近最小值。
- 下山类比:寻找坡度最陡的方向往下走。
- 公式:$\theta_{i+1} = \theta_i - \alpha \cdot \text{梯度}$
- 学习率α:控制步长,影响收敛。
- 单变量梯度:导数(切线斜率)。
- 多变量梯度:偏导数组成的向量。
9 延伸思考与实践
- 实践:用Python实现梯度下降求 $Y = X^2$ 的最小值。
- 预习:多元梯度下降。
- 思考:为什么梯度下降适合大数据量?