多变量梯度下降法
1 课程概览
本课讲解多变量梯度下降法。介绍梯度下降的终止条件(限定步数或限定阈值),通过示例 $J(\theta) = \theta_1^2 + \theta_2^2$ 演示多变量梯度下降的迭代过程,讲解偏导数的计算和参数更新。
2 核心概念与定义
- 多变量梯度下降:对多个参数同时进行梯度下降。
- 终止条件:
- 限定步数:固定迭代次数
- 限定阈值:当变化小于阈值时停止
- 偏导数:对某一变量求导,其他变量视为常数。
- 学习率(α):步长,实际开发中一般取0.001到0.01。
3 算法与模型详解
3.1 梯度下降终止条件
| 方法 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 限定步数 | 固定迭代次数(如100次) | 简单 | 可能未收敛或浪费 |
| 限定阈值 | 变化小于阈值时停止 | 自适应 | 需要设置阈值 |
3.2 多变量梯度下降公式
$$\theta_{j}^{(i+1)} = \theta_{j}^{(i)} - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta_j}$$
说明:
- 对每个参数 $\theta_j$ 分别更新
- $\alpha$:学习率
- $\frac{\partial J}{\partial \theta_j}$:对 $\theta_j$ 的偏导数
3.3 示例:$J(\theta) = \theta_1^2 + \theta_2^2$
损失函数: $$J(\theta) = \theta_1^2 + \theta_2^2$$
求偏导: $$\frac{\partial J}{\partial \theta_1} = 2\theta_1$$ $$\frac{\partial J}{\partial \theta_2} = 2\theta_2$$
参数更新: $$\theta_1^{(i+1)} = \theta_1^{(i)} - \alpha \cdot 2\theta_1^{(i)}$$ $$\theta_2^{(i+1)} = \theta_2^{(i)} - \alpha \cdot 2\theta_2^{(i)}$$
3.4 迭代过程示例
初始条件:
- 起始点:$(\theta_1, \theta_2) = (1, 3)$
- 学习率:$\alpha = 0.1$
- 损失函数:$J(\theta) = \theta_1^2 + \theta_2^2$
第1次迭代:
- $\theta_1 = 1 - 0.1 \times 2 \times 1 = 1 - 0.2 = 0.8$
- $\theta_2 = 3 - 0.1 \times 2 \times 3 = 3 - 0.6 = 2.4$
- $J = 0.8^2 + 2.4^2 = 0.64 + 5.76 = 6.4$
第2次迭代:
- $\theta_1 = 0.8 - 0.1 \times 2 \times 0.8 = 0.8 - 0.16 = 0.64$
- $\theta_2 = 2.4 - 0.1 \times 2 \times 2.4 = 2.4 - 0.48 = 1.92$
- $J = 0.64^2 + 1.92^2 = 0.4096 + 3.6864 = 4.096$
收敛:最终 $\theta_1 \to 0, \theta_2 \to 0$,$J \to 0$
3.5 学习率选择
实际开发:
- 一般取 0.001 到 0.01(1‰ 到 1%)
- 示例中 0.1 已经很大
影响:
- 太大:可能震荡或爆炸
- 太小:收敛慢
4 数学原理与推导
4.1 多变量梯度下降
$$\theta_j^{(i+1)} = \theta_j^{(i)} - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta_j}, \quad j = 1, 2, ..., n$$
4.2 偏导数计算
示例:$J(\theta) = \theta_1^2 + \theta_2^2$
$$\frac{\partial J}{\partial \theta_1} = 2\theta_1 \quad (\theta_2 \text{视为常数})$$ $$\frac{\partial J}{\partial \theta_2} = 2\theta_2 \quad (\theta_1 \text{视为常数})$$
4.3 矩阵形式
$$\theta^{(i+1)} = \theta^{(i)} - \alpha \cdot \nabla J(\theta)$$
其中梯度向量: $$\nabla J(\theta) = \begin{bmatrix} \frac{\partial J}{\partial \theta_1} \ \frac{\partial J}{\partial \theta_2} \ \vdots \ \frac{\partial J}{\partial \theta_n} \end{bmatrix}$$
5 代码示例
import numpy as np
# 多变量梯度下降求 J(theta) = theta1^2 + theta2^2 的最小值
def gradient_descent_multi():
# 初始化
theta = np.array([1.0, 3.0]) # 起始点 (1, 3)
alpha = 0.1 # 学习率
iterations = 50 # 迭代次数
# 损失函数
def cost_function(t):
return t[0]**2 + t[1]**2
# 梯度(偏导数)
def gradient(t):
return np.array([2*t[0], 2*t[1]])
print(f"初始: theta = {theta}, J = {cost_function(theta)}")
for i in range(iterations):
# 计算梯度
grad = gradient(theta)
# 更新参数
theta = theta - alpha * grad
# 打印每10次的结果
if i % 10 == 0 or i == iterations - 1:
print(f"迭代 {i+1}: theta = {theta}, J = {cost_function(theta):.6f}")
return theta
# 运行
result = gradient_descent_multi()
print(f"\n最终结果: theta = {result}, J = {result[0]**2 + result[1]**2:.6f}")
输出示例:
初始: theta = [1. 3.], J = 10.0
迭代 1: theta = [0.8 2.4], J = 6.400000
迭代 11: theta = [0.10737418 0.32212255], J = 0.115292
迭代 21: theta = [0.01152922 0.03458765], J = 0.001328
...
最终结果: theta = [0.00000001 0.00000003], J = 0.000000
6 重难点与易错提醒
- ❗重点:多变量梯度下降对每个参数分别更新。
- ❗重点:偏导数计算时其他变量视为常数。
- ❗重点:终止条件:限定步数或限定阈值。
- ❗重点:学习率一般取0.001到0.01。
- ⚠️易错:偏导数计算错误(忘记其他变量视为常数)。
- ⚠️易错:学习率设置过大导致不收敛。
- 💡深入理解:多变量梯度下降是单变量的推广。
7 课堂问答精选
Q: 梯度下降什么时候停止?
A: 两种终止条件:
- 限定步数:固定迭代次数(如100次),简单但可能未收敛或浪费。
- 限定阈值:当参数变化或损失变化小于阈值时停止,自适应但需要设置阈值。
Q: 多变量梯度下降和单变量有什么区别?
A:
- 单变量:只有一个参数,梯度是导数。
- 多变量:多个参数,梯度是偏导数组成的向量。 多变量梯度下降对每个参数分别更新,公式相同,只是梯度计算不同。
8 本课小结
- 终止条件:限定步数或限定阈值。
- 多变量梯度下降:对每个参数分别更新。
- 偏导数:对某一变量求导,其他视为常数。
- 公式:$\theta_j^{(i+1)} = \theta_j^{(i)} - \alpha \cdot \frac{\partial J}{\partial \theta_j}$
- 学习率:实际开发一般取0.001到0.01。
9 延伸思考与实践
- 实践:用Python实现多变量梯度下降。
- 预习:线性回归的梯度下降。
- 思考:如何选择合适的学习率和终止条件?