批量梯度下降(Batch Gradient Descent)
批量梯度下降是一种优化算法,用于最小化损失函数,通过迭代地调整模型参数来逼近最优解。它在每次更新参数时使用整个训练数据集来计算梯度,因此也称为标准梯度下降(Standard Gradient Descent)。
批量梯度下降的原理
- 初始化参数:随机初始化模型参数。
- 计算梯度:使用整个训练数据集计算损失函数对模型参数的梯度。
- 更新参数:按照梯度的负方向更新参数。
- 迭代:重复计算梯度和更新参数,直到损失函数收敛或达到预设的迭代次数。
批量梯度下降的更新公式为:
θ
=
θ
−
α
∇
θ
J
(
θ
)
\theta = \theta - \alpha \nabla_{\theta} J(\theta)
θ=θ−α∇θJ(θ)
其中:
-
θ
\theta
θ是模型参数。
-
α
\alpha
α是学习率,控制每次更新的步长。
-
∇
θ
J
(
θ
)
\nabla_{\theta} J(\theta)
∇θJ(θ)是损失函数
J
(
θ
)
J(\theta)
J(θ)对参数
θ
\theta
θ的梯度。
批量梯度下降的具体步骤
假设我们有一个简单的二次函数 J ( θ ) = 1 2 θ 2 J(\theta) = \frac{1}{2} \theta^2 J(θ)=21θ2,需要通过批量梯度下降找到函数的最小值。
步骤1:初始化参数
假设我们随机初始化参数 θ = 10 \theta = 10 θ=10。
步骤2:计算梯度
函数 J ( θ ) = 1 2 θ 2 J(\theta) = \frac{1}{2} \theta^2 J(θ)=21θ2的梯度为 ∇ θ J ( θ ) = θ \nabla_{\theta} J(\theta) = \theta ∇θJ(θ)=θ。当前 θ = 10 \theta = 10 θ=10,所以梯度 ∇ θ J ( 10 ) = 10 \nabla_{\theta} J(10) = 10 ∇θJ(10)=10。
步骤3:更新参数
设定学习率
α
=
0.1
\alpha = 0.1
α=0.1,按照梯度下降的公式更新参数:
θ
=
θ
−
α
∇
θ
J
(
θ
)
\theta = \theta - \alpha \nabla_{\theta} J(\theta)
θ=θ−α∇θJ(θ)
θ
=
10
−
0.1
×
10
=
10
−
1
=
9
\theta = 10 - 0.1 \times 10 = 10 - 1 = 9
θ=10−0.1×10=10−1=9
步骤4:迭代
重复上述步骤,继续迭代:
-
第2次迭代:
θ = 9 \theta = 9 θ=9
∇ θ J ( 9 ) = 9 \nabla_{\theta} J(9) = 9 ∇θJ(9)=9
θ = 9 − 0.1 × 9 = 9 − 0.9 = 8.1 \theta = 9 - 0.1 \times 9 = 9 - 0.9 = 8.1 θ=9−0.1×9=9−0.9=8.1 -
第3次迭代:
θ = 8.1 \theta = 8.1 θ=8.1
∇ θ J ( 8.1 ) = 8.1 \nabla_{\theta} J(8.1) = 8.1 ∇θJ(8.1)=8.1
θ = 8.1 − 0.1 × 8.1 = 8.1 − 0.81 = 7.29 \theta = 8.1 - 0.1 \times 8.1 = 8.1 - 0.81 = 7.29 θ=8.1−0.1×8.1=8.1−0.81=7.29 -
第4次迭代:
θ = 7.29 \theta = 7.29 θ=7.29
∇ θ J ( 7.29 ) = 7.29 \nabla_{\theta} J(7.29) = 7.29 ∇θJ(7.29)=7.29
θ = 7.29 − 0.1 × 7.29 = 7.29 − 0.729 = 6.561 \theta = 7.29 - 0.1 \times 7.29 = 7.29 - 0.729 = 6.561 θ=7.29−0.1×7.29=7.29−0.729=6.561
通过多次迭代, θ \theta θ值逐步减小,最终会收敛到函数的最小值 θ = 0 \theta = 0 θ=0。
具体数据示例
假设我们有一个线性回归问题,用批量梯度下降来优化模型参数。给定训练数据集 ( x i , y i ) (x_i, y_i) (xi,yi)如下:
x | y |
---|---|
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
我们要拟合的线性模型为 h ( θ ) = θ 0 + θ 1 x h(\theta) = \theta_0 + \theta_1 x h(θ)=θ0+θ1x。
初始化参数
假设 θ 0 = 0 \theta_0 = 0 θ0=0, θ 1 = 0 \theta_1 = 0 θ1=0,学习率 α = 0.01 \alpha = 0.01 α=0.01。
计算梯度
损失函数
J
(
θ
)
J(\theta)
J(θ)为均方误差:
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是训练样本的数量,梯度为:
∇
θ
0
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
(
θ
)
−
y
i
)
\nabla_{\theta_0} J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (h(\theta) - y_i)
∇θ0J(θ)=m1∑i=1m(h(θ)−yi)
∇
θ
1
J
(
θ
)
=
1
m
∑
i
=
1
m
(
h
(
θ
)
−
y
i
)
x
i
\nabla_{\theta_1} J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (h(\theta) - y_i) x_i
∇θ1J(θ)=m1∑i=1m(h(θ)−yi)xi
对初始参数 θ 0 = 0 \theta_0 = 0 θ0=0, θ 1 = 0 \theta_1 = 0 θ1=0,计算梯度:
-
h
(
θ
)
=
0
h(\theta) = 0
h(θ)=0
-
∇
θ
0
J
(
θ
)
=
1
4
∑
i
=
1
4
(
0
−
y
i
)
=
−
1
4
(
2
+
3
+
4
+
5
)
=
−
3.5
\nabla_{\theta_0} J(\theta) = \frac{1}{4} \sum_{i=1}^{4} (0 - y_i) = -\frac{1}{4} (2 + 3 + 4 + 5) = -3.5
∇θ0J(θ)=41∑i=14(0−yi)=−41(2+3+4+5)=−3.5
-
∇
θ
1
J
(
θ
)
=
1
4
∑
i
=
1
4
(
0
−
y
i
)
x
i
=
−
1
4
(
2
×
1
+
3
×
2
+
4
×
3
+
5
×
4
)
=
−
7.5
\nabla_{\theta_1} J(\theta) = \frac{1}{4} \sum_{i=1}^{4} (0 - y_i) x_i = -\frac{1}{4} (2 \times 1 + 3 \times 2 + 4 \times 3 + 5 \times 4) = -7.5
∇θ1J(θ)=41∑i=14(0−yi)xi=−41(2×1+3×2+4×3+5×4)=−7.5
更新参数
按照梯度下降公式更新参数:
θ
0
=
θ
0
−
α
∇
θ
0
J
(
θ
)
=
0
−
0.01
×
(
−
3.5
)
=
0.035
\theta_0 = \theta_0 - \alpha \nabla_{\theta_0} J(\theta) = 0 - 0.01 \times (-3.5) = 0.035
θ0=θ0−α∇θ0J(θ)=0−0.01×(−3.5)=0.035
θ
1
=
θ
1
−
α
∇
θ
1
J
(
θ
)
=
0
−
0.01
×
(
−
7.5
)
=
0.075
\theta_1 = \theta_1 - \alpha \nabla_{\theta_1} J(\theta) = 0 - 0.01 \times (-7.5) = 0.075
θ1=θ1−α∇θ1J(θ)=0−0.01×(−7.5)=0.075
多次迭代
继续计算新的梯度并更新参数,直至收敛。
总结
批量梯度下降在每次参数更新时使用整个训练数据集来计算梯度,保证了梯度估计的准确性和参数更新的稳定性。通过具体数据的举例说明,可以清楚地看到梯度下降优化如何逐步逼近最优解。在实际应用中,选择合适的学习率和迭代次数,可以有效地优化模型参数,使模型达到最佳性能。