梯度下降算法分类
1 课程概览
本课讲解梯度下降算法的分类。首先回顾银行信贷案例中Xij的含义(i表示第几个样本,j表示第几列特征),说明姓名等字符串特征需要映射为相同数值(如1),然后介绍梯度下降算法的三种分类:批量梯度下降(BGD)、随机梯度下降(SGD)、小批量梯度下降(MBGD)。
2 核心概念与定义
- Xij:第i个样本的第j个特征
- i(上标):第几个样本(行)
- j(下标):第几列特征
- 特征映射:将字符串特征映射为数值
- BGD:批量梯度下降(Batch Gradient Descent)
- SGD:随机梯度下降(Stochastic Gradient Descent)
- MBGD:小批量梯度下降(Mini-Batch Gradient Descent)
3 算法与模型详解
3.1 Xij的含义
表示:$X_j^{(i)}$ 或 $X_{ij}$
说明:
- i(上标):第几个样本(行)
- j(下标):第几列特征(列)
示例:
- $X_0^{(1)}$:第1个样本的第0列特征(如姓名)
- $X_1^{(1)}$:第1个样本的第1列特征(如月薪)
- $X_2^{(1)}$:第1个样本的第2列特征(如存款余额)
3.2 字符串特征处理
问题:姓名(张一、张二)对贷款额度权重应该相同
解决:将字符串映射为相同数值
示例:
- 张一 → 1
- 张二 → 1
- 张三 → 1
说明:所有姓名映射为相同值,表示权重相同
3.3 梯度下降算法分类
| 类型 | 全称 | 特点 | 每次使用样本数 |
|---|---|---|---|
| BGD | 批量梯度下降 | 使用全部样本,稳定但慢 | 全部 |
| SGD | 随机梯度下降 | 使用1个样本,快但不稳定 | 1个 |
| MBGD | 小批量梯度下降 | 使用部分样本,平衡 | n个(如32) |
3.4 批量梯度下降(BGD)
特点:
- 每次使用全部样本计算梯度
- 收敛稳定
- 计算量大,速度慢
公式: $$\theta_j = \theta_j - \alpha \cdot \frac{1}{m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
优点:收敛稳定,精确 缺点:计算量大,速度慢
3.5 随机梯度下降(SGD)
特点:
- 每次使用1个样本计算梯度
- 速度快
- 收敛不稳定,可能震荡
公式: $$\theta_j = \theta_j - \alpha \cdot (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
优点:速度快,适合大数据量 缺点:收敛不稳定,可能震荡
3.6 小批量梯度下降(MBGD)
特点:
- 每次使用部分样本(如32个)计算梯度
- 平衡了BGD和SGD的优缺点
- 实际开发中最常用
公式: $$\theta_j = \theta_j - \alpha \cdot \frac{1}{n}\sum_{i=1}^{n} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
优点:速度和稳定性平衡 缺点:需要选择batch size
3.7 三种方法对比
| 对比维度 | BGD | SGD | MBGD |
|---|---|---|---|
| 样本数 | 全部 | 1个 | n个 |
| 速度 | 慢 | 快 | 中等 |
| 稳定性 | 稳定 | 不稳定 | 较稳定 |
| 精度 | 高 | 低 | 中等 |
| 适用场景 | 小数据量 | 大数据量 | 通用 |
4 数学原理与推导
4.1 BGD梯度
$$\frac{\partial J}{\partial \theta_j} = \frac{1}{m}\sum_{i=1}^{m} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
4.2 SGD梯度
$$\frac{\partial J}{\partial \theta_j} = (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
4.3 MBGD梯度
$$\frac{\partial J}{\partial \theta_j} = \frac{1}{n}\sum_{i=1}^{n} (h_\theta(X_i) - Y_i) \cdot X_{ij}$$
5 代码示例
import numpy as np
# 数据
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
Y = np.array([3, 5, 7, 9])
# 添加偏置列
X_b = np.c_[np.ones((4, 1)), X]
# 1. 批量梯度下降(BGD)
def bgd(X, y, alpha=0.01, iterations=100):
m = len(y)
theta = np.zeros(X.shape[1])
for i in range(iterations):
gradient = (1/m) * X.T.dot(X.dot(theta) - y)
theta = theta - alpha * gradient
return theta
# 2. 随机梯度下降(SGD)
def sgd(X, y, alpha=0.01, iterations=100):
m = len(y)
theta = np.zeros(X.shape[1])
for i in range(iterations):
for j in range(m):
gradient = X[j] * (X[j].dot(theta) - y[j])
theta = theta - alpha * gradient
return theta
# 3. 小批量梯度下降(MBGD)
def mbgd(X, y, alpha=0.01, iterations=100, batch_size=2):
m = len(y)
theta = np.zeros(X.shape[1])
for i in range(iterations):
# 随机选择batch
indices = np.random.choice(m, batch_size, replace=False)
X_batch = X[indices]
y_batch = y[indices]
gradient = (1/batch_size) * X_batch.T.dot(X_batch.dot(theta) - y_batch)
theta = theta - alpha * gradient
return theta
# 运行
print("BGD:", bgd(X_b, Y))
print("SGD:", sgd(X_b, Y))
print("MBGD:", mbgd(X_b, Y))
6 重难点与易错提醒
- ❗重点:Xij的含义(i=样本,j=特征)。
- ❗重点:字符串特征需要映射为数值。
- ❗重点:三种梯度下降的区别(BGD/SGD/MBGD)。
- ❗重点:MBGD是实际开发中最常用的。
- ⚠️易错:混淆Xij的i和j的含义。
- ⚠️易错:SGD学习率需要逐渐减小。
- 💡深入理解:MBGD平衡了速度和稳定性。
7 课堂问答精选
Q: Xij中的i和j分别表示什么?
A:
- i(上标):第几个样本(行)
- j(下标):第几列特征(列) 例如 $X_1^{(2)}$ 表示第2个样本的第1列特征。
Q: 三种梯度下降有什么区别?
A:
- BGD(批量):使用全部样本,稳定但慢,适合小数据量。
- SGD(随机):使用1个样本,快但不稳定,适合大数据量。
- MBGD(小批量):使用部分样本,平衡速度和稳定性,实际开发中最常用。
8 本课小结
- Xij:i=第几个样本,j=第几列特征。
- 字符串特征:映射为相同数值(权重相同)。
- BGD:全部样本,稳定但慢。
- SGD:1个样本,快但不稳定。
- MBGD:部分样本,平衡速度和稳定性,最常用。
9 延伸思考与实践
- 实践:用Python实现三种梯度下降。
- 预习:回归模型评估方法。
- 思考:如何选择batch size?