本教程将通过一个完整的、逐步手算的例子,带你彻底理解小批量梯度下降(Mini-Batch Gradient Descent, MBGD)算法的工作原理。我们将使用一个简化的房价预测模型,并展示模型参数是如何在一轮训练中被更新的。
一、问题定义与场景设定
我们的目标是训练一个线性回归模型来预测房价。
1. 模型公式
我们假设房价(yyy)由三个特征线性决定:房龄(x1x_1x1)、面积(x2x_2x2)和房间数(x3x_3x3)。模型公式如下:
y^=w1x1+w2x2+w3x3+b \hat{y} = w_1 x_1 + w_2 x_2 + w_3 x_3 + by^=w1x1+w2x2+w3x3+b
其中,y^\hat{y}y^是模型的预测房价,我们的目标是学习到最佳的参数w1,w2,w3w_1, w_2, w_3w1,w2,w3和bbb。
2. 待学习参数
模型共有4 个需要学习的参数:
- w1w_1w1: 房龄的权重
- w2w_2w2: 面积的权重
- w3w_3w3: 房间数的权重
- bbb: 偏置项(可以理解为基准房价)
3. 训练数据
我们有一个包含6个样本的微型数据集:
| 样本 | 房龄 (x1x_1x1) | 面积 (x2x_2x2) | 房间数 (x3x_3x3) | 真实房价 (yyy) |
|---|---|---|---|---|
| 1 | 5 | 90 | 2 | 200 |
| 2 | 3 | 100 | 3 | 280 |
| 3 | 10 | 70 | 2 | 150 |
| 4 | 1 | 120 | 3 | 350 |
| 5 | 8 | 80 | 2 | 180 |
| 6 | 2 | 110 | 3 | 320 |
4. 超参数设置
在开始训练前,我们需要设定几个关键的超参数:
- 小批量大小 (Batch Size):
2。这意味着我们每次会使用2个样本进行计算和参数更新。 - 学习率 (Learning Rate,η\etaη):
0.0001。它控制了我们每次更新参数的步长大小。 - 初始参数:为了简化计算,我们将所有参数的初始值设为0:w1=0,w2=0,w3=0,b=0w_1=0, w_2=0, w_3=0, b=0w1=0,w2=0,w3=0,b=0。
二、核心计算原理
MBGD的核心思想是:每次从数据集中取出一个小批量(Mini-Batch)的样本,计算这个小批量上所有样本的平均梯度,然后用这个平均梯度来更新模型参数。
1. 损失函数 (Loss Function)
我们使用均方误差(MSE)的变体作为损失函数,来衡量单个样本的预测误差。对于单个样本,其损失为:
loss=12(y^−y)2 loss = \frac{1}{2} (\hat{y} - y)^2loss=21(y^−y)2
(公式中的12\frac{1}{2}21是为了在求导时简化计算)
2. 梯度计算 (Gradient Calculation)
梯度指明了损失函数增长最快的方向,我们需要沿着梯度的反方向更新参数以降低损失。对于单个样本,其损失函数对每个参数的偏导数(即梯度)如下:
- 令误差e=y^−ye = \hat{y} - ye=y^−y
- ∂loss∂w1=e⋅x1\frac{\partial loss}{\partial w_1} = e \cdot x_1∂w1∂loss=e⋅x1
- ∂loss∂w2=e⋅x2\frac{\partial loss}{\partial w_2} = e \cdot x_2∂w2∂loss=e⋅x2
- ∂loss∂w3=e⋅x3\frac{\partial loss}{\partial w_3} = e \cdot x_3∂w3∂loss=e⋅x3
- ∂loss∂b=e\frac{\partial loss}{\partial b} = e∂b∂loss=e
提问:为什么等于e⋅x1e \cdot x_1e⋅x1,这是通过链式法则求出来的。
∂loss∂w1=∂loss∂e⋅∂e∂y^⋅∂y^∂w1\frac{\partial loss}{\partial w_1} = \frac{\partial loss}{\partial e} \cdot \frac{\partial e}{\partial \hat{y}} \cdot \frac{\partial \hat{y}}{\partial w_1}∂