小批量梯度下降(Mini-batch Gradient Descent)
小批量梯度下降是一种介于批量梯度下降和随机梯度下降之间的优化算法。每次更新参数时,小批量梯度下降使用一小部分(小批量)训练数据计算梯度,而不是使用整个训练数据集或单个样本。这种方法结合了批量梯度下降和随机梯度下降的优点,既能提高计算效率,又能保持梯度更新的稳定性。
小批量梯度下降的步骤
- 初始化参数:随机初始化模型参数。
- 将训练数据集分成若干小批量:每个小批量包含若干训练样本。
- 计算每个小批量的梯度:对每个小批量的数据,计算损失函数对模型参数的梯度。
- 更新参数:按照梯度的负方向更新参数。
- 迭代:对所有小批量重复步骤3和4,直到损失函数收敛或达到预设的迭代次数。
小批量梯度下降的公式
小批量梯度下降的更新公式为:
θ
=
θ
−
α
∇
θ
J
m
i
n
i
(
θ
)
\theta = \theta - \alpha \nabla_{\theta} J_{mini}(\theta)
θ=θ−α∇θJmini(θ)
其中:
-
θ
\theta
θ是模型参数。
-
α
\alpha
α是学习率,控制每次更新的步长。
-
∇
θ
J
m
i
n
i
(
θ
)
\nabla_{\theta} J_{mini}(\theta)
∇θJmini(θ)是小批量数据上的损失函数
J
(
θ
)
J(\theta)
J(θ)对参数
θ
\theta
θ的梯度。
具体数据示例
假设我们有一个简单的线性回归问题,训练数据集如下:
x | y |
---|---|
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
8 | 9 |
我们要拟合的线性模型为 h ( θ ) = θ 0 + θ 1 x h(\theta) = \theta_0 + \theta_1 x h(θ)=θ0+θ1x。
步骤1:初始化参数
假设 θ 0 = 0 \theta_0 = 0 θ0=0, θ 1 = 0 \theta_1 = 0 θ1=0,学习率 α = 0.01 \alpha = 0.01 α=0.01。
步骤2:将训练数据集分成若干小批量
假设我们将数据集分成每个批次包含4个样本的两个小批量:
- 小批量1: ( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 4 ) , ( 4 , 5 ) (1, 2), (2, 3), (3, 4), (4, 5) (1,2),(2,3),(3,4),(4,5)
- 小批量2: ( 5 , 6 ) , ( 6 , 7 ) , ( 7 , 8 ) , ( 8 , 9 ) (5, 6), (6, 7), (7, 8), (8, 9) (5,6),(6,7),(7,8),(8,9)
步骤3:计算每个小批量的梯度并更新参数
小批量1
计算损失函数和梯度:
损失函数
J
(
θ
)
J(\theta)
J(θ)为均方误差(MSE):
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
(
θ
)
−
y
i
)
2
J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h(\theta) - y_i)^2
J(θ)=2m1∑i=1m(h(θ)−yi)2
其中,
m
m
m是小批量样本的数量。
对第一个小批量:
h
(
θ
)
=
θ
0
+
θ
1
x
h(\theta) = \theta_0 + \theta_1 x
h(θ)=θ0+θ1x
计算梯度:
∂
J
∂
θ
0
=
1
4
∑
i
=
1
4
(
h
(
θ
)
−
y
i
)
\frac{\partial J}{\partial \theta_0} = \frac{1}{4} \sum_{i=1}^{4} (h(\theta) - y_i)
∂θ0∂J=41i=1∑4(h(θ)−yi)
∂
J
∂
θ
1
=
1
4
∑
i
=
1
4
(
h
(
θ
)
−
y
i
)
x
i
\frac{\partial J}{\partial \theta_1} = \frac{1}{4} \sum_{i=1}^{4} (h(\theta) - y_i) x_i
∂θ1∂J=41i=1∑4(h(θ)−yi)xi
初始参数 θ 0 = 0 \theta_0 = 0 θ0=0, θ 1 = 0 \theta_1 = 0 θ1=0:
- 对每个样本计算预测值 h ( θ ) h(\theta) h(θ)和误差:
h ( θ ) 1 = 0 + 0 × 1 = 0 误差 = 0 − 2 = − 2 h ( θ ) 2 = 0 + 0 × 2 = 0 误差 = 0 − 3 = − 3 h ( θ ) 3 = 0 + 0 × 3 = 0 误差 = 0 − 4 = − 4 h ( θ ) 4 = 0 + 0 × 4 = 0 误差 = 0 − 5 = − 5 \begin{align*} h(\theta)_{1} &= 0 + 0 \times 1 = 0 &\text{误差} &= 0 - 2 = -2 \\ h(\theta)_{2} &= 0 + 0 \times 2 = 0 &\text{误差} &= 0 - 3 = -3 \\ h(\theta)_{3} &= 0 + 0 \times 3 = 0 &\text{误差} &= 0 - 4 = -4 \\ h(\theta)_{4} &= 0 + 0 \times 4 = 0 &\text{误差} &= 0 - 5 = -5 \\ \end{align*} h(θ)1h(θ)2h(θ)3h(θ)4=0+0×1=0=0+0×2=0=0+0×3=0=0+0×4=0误差误差误差误差=0−2=−2=0−3=−3=0−4=−4=0−5=−5
- 计算梯度:
∂ J ∂ θ 0 = 1 4 ∑ i = 1 4 ( − 2 − 3 − 4 − 5 ) = 1 4 ( − 14 ) = − 3.5 \frac{\partial J}{\partial \theta_0} = \frac{1}{4} \sum_{i=1}^{4} (-2 - 3 - 4 - 5) = \frac{1}{4} (-14) = -3.5 ∂θ0∂J=41i=1∑4(−2−3−4−5)=41(−14)=−3.5
∂ J ∂ θ 1 = 1 4 ∑ i = 1 4 ( − 2 × 1 − 3 × 2 − 4 × 3 − 5 × 4 ) = 1 4 ( − 2 − 6 − 12 − 20 ) = 1 4 ( − 40 ) = − 10 \frac{\partial J}{\partial \theta_1} = \frac{1}{4} \sum_{i=1}^{4} (-2 \times 1 - 3 \times 2 - 4 \times 3 - 5 \times 4) = \frac{1}{4} (-2 - 6 - 12 - 20) = \frac{1}{4} (-40) = -10 ∂θ1∂J=41i=1∑4(−2×1−3×2−4×3−5×4)=41(−2−6−12−20)=41(−40)=−10
- 更新参数:
θ 0 = θ 0 − α ∂ J ∂ θ 0 = 0 − 0.01 × ( − 3.5 ) = 0.035 \theta_0 = \theta_0 - \alpha \frac{\partial J}{\partial \theta_0} = 0 - 0.01 \times (-3.5) = 0.035 θ0=θ0−α∂θ0∂J=0−0.01×(−3.5)=0.035
θ 1 = θ 1 − α ∂ J ∂ θ 1 = 0 − 0.01 × ( − 10 ) = 0.1 \theta_1 = \theta_1 - \alpha \frac{\partial J}{\partial \theta_1} = 0 - 0.01 \times (-10) = 0.1 θ1=θ1−α∂θ1∂J=0−0.01×(−10)=0.1
小批量2
使用更新后的参数计算第二个小批量的梯度并更新参数:
- 对每个样本计算预测值 h ( θ ) h(\theta) h(θ)和误差:
h ( θ ) 5 = 0.035 + 0.1 × 5 = 0.535 误差 = 0.535 − 6 = − 5.465 h ( θ ) 6 = 0.035 + 0.1 × 6 = 0.635 误差 = 0.635 − 7 = − 6.365 h ( θ ) 7 = 0.035 + 0.1 × 7 = 0.735 误差 = 0.735 − 8 = − 7.265 h ( θ ) 8 = 0.035 + 0.1 × 8 = 0.835 误差 = 0.835 − 9 = − 8.165 \begin{align*} h(\theta)_{5} &= 0.035 + 0.1 \times 5 = 0.535 &\text{误差} &= 0.535 - 6 = -5.465 \\ h(\theta)_{6} &= 0.035 + 0.1 \times 6 = 0.635 &\text{误差} &= 0.635 - 7 = -6.365 \\ h(\theta)_{7} &= 0.035 + 0.1 \times 7 = 0.735 &\text{误差} &= 0.735 - 8 = -7.265 \\ h(\theta)_{8} &= 0.035 + 0.1 \times 8 = 0.835 &\text{误差} &= 0.835 - 9 = -8.165 \\ \end{align*} h(θ)5h(θ)6h(θ)7h(θ)8=0.035+0.1×5=0.535=0.035+0.1×6=0.635=0.035+0.1×7=0.735=0.035+0.1×8=0.835误差误差误差误差=0.535−6=−5.465=0.635−7=−6.365=0.735−8=−7.265=0.835−9=−8.165
- 计算梯度:
∂ J ∂ θ 0 = 1 4 ∑ i = 1 4 ( − 5.465 − 6.365 − 7.265 − 8.165 ) = 1 4 ( − 27.26 ) = − 6.815 \frac{\partial J}{\partial \theta_0} = \frac{1}{4} \sum_{i=1}^{4} (-5.465 - 6.365 - 7.265 - 8.165) = \frac{1}{4} (-27.26) = -6.815 ∂θ0∂J=41i=1∑4(−5.465−6.365−7.265−8.165)=41(−27.26)=−6.815
∂ J ∂ θ 1 = 1 4 ∑ i = 1 4 ( − 5.465 × 5 − 6.365 × 6 − 7.265 × 7 − 8.165 × 8 ) \frac{\partial J}{\partial \theta_1} = \frac{1}{4} \sum_{i=1}^{4} (-5.465 \times 5 - 6.365 \times 6 - 7.265 \times 7 - 8.165 \times 8) ∂θ1∂J=41i=1∑4(−5.465×5−6.365×6−7.265×7−8.165×8)
= 1 4 ( − 27.325 − 38.19 − 50.855 − 65.32 ) = 1 4 ( − 181.69 ) = − 45.4225 = \frac{1}{4} (-27.325 - 38.19 - 50.855 - 65.32) = \frac{1}{4} (-181.69) = -45.4225 =41(−27.325−38.19−50.855−65.32)=41(−181.69)=−45.4225
- 更新参数:
θ 0 = θ 0 − α ∂ J ∂ θ 0 = 0.035 − 0.01 × ( − 6.815 ) = 0.035 + 0.06815 = 0.10315 \theta_0 = \theta_0 - \alpha \frac{\partial J}{\partial \theta_0} = 0.035 - 0.01 \times (-6.815) = 0.035 + 0.06815 = 0.10315 θ0=θ0−α∂θ0∂J=0.035−0.01×(−6.815)=0.035+0.06815=0.10315
θ 1 = θ 1 − α ∂ J ∂ θ 1 = 0.1 − 0.01 × ( − 45.4225 ) = 0.1 + 0.454225 = 0.554225 \theta_1 = \theta_1 - \alpha \frac{\partial J}{\partial \theta_1} = 0.1 - 0.01 \times (-45.4225) = 0.1 + 0.454225 = 0.554225 θ1=θ1−α∂θ1∂J=0.1−0.01×(−45.4225)=0.1+0.454225=0.554225
多次迭代
继续对所有小批量重复上述计算和更新步骤,直到模型参数收敛。
总结
小批量梯度下降通过每次使用一个小批量的训练数据计算梯度并更新参数,结合了批量梯度下降和随机梯度下降的优点,提高了计算效率并保持了梯度更新的稳定性。通过具体数据示例,可以清楚地看到小批量梯度下降如何在每次迭代中逐步更新