文章目录
0. 前言
本文介绍常见用于训练机器学习模型特别是深度学习模型的优化算法,它们的目标是通过最小化损失函数来更新模型参数。
1. Batch Gradient Descent (BGD)
批量梯度下降是一种迭代优化算法,用于寻找损失函数的最小值。给定损失函数 J ( θ ) J(\theta) J(θ),其中 θ \theta θ 是模型参数,批量梯度下降在每次迭代中计算整个训练集上损失函数关于参数 θ \theta θ 的梯度,然后沿负梯度方向更新参数以减小损失。更新规则如下:
θ t + 1 = θ t − η ⋅ ∇ θ J ( θ t ) \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta_t) θt+1=θt−η⋅∇θJ(θt)
其中,
- θ t \theta_t θt 表示在第 t 次迭代时的模型参数,
- η \eta η 是学习率(step size),
- ∇ θ J ( θ t ) \nabla_\theta J(\theta_t) ∇θJ(θt) 是在当前参数值下,整个训练集上的损失函数梯度。
2. Stochastic Gradient Descent (SGD)
随机梯度下降同样是用于优化模型参数的方法,但与批量梯度下降不同的是,它在每次迭代时仅随机抽取一个训练样本(或一个批次中的单个样本),并以此计算损失函数关于参数的梯度,然后更新参数:
θ
t
+
1
=
θ
t
−
η
⋅
∇
θ
J
(
θ
t
;
x
i
,
y
i
)
\theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta_t; x_i, y_i)
θt+1=θt−η⋅∇θJ(θt;xi,yi)
其中,
- x i x_i xi 和 y i y_i yi 分别表示单个训练样本的特征和标签,
更新基于单个样本的损失函数梯度而不是整个训练集的梯度。
3. Mini-batch Gradient Descent (MBGD)
小批量梯度下降是批量梯度下降和随机梯度下降之间的折衷方案。它每次迭代使用一个小批量的数据样本计算平均梯度:
θ
t
+
1
=
θ
t
−
η
∣
B
t
∣
∑
i
∈
B
t
∇
θ
J
(
θ
t
;
x
i
,
y
i
)
\theta_{t+1} = \theta_t - \frac{\eta}{|B_t|} \sum_{i \in B_t} \nabla_\theta J(\theta_t; x_i, y_i)
θt+1=θt−∣Bt∣ηi∈Bt∑∇θJ(θt;xi,yi)
其中,
- B t B_t Bt 表示在第 t 次迭代使用的批量数据集合,
- ∣ B t ∣ |B_t| ∣Bt∣ 表示批量大小,即小批量中样本的数量。
4. Adam (Adaptive Moment Estimation)
Adam 是一种更为先进的优化算法,它结合了动量(Momentum)和自适应学习率调整的概念。除了像 MBGD 那样使用小批量数据计算梯度外,Adam 还引入了一阶矩(first moment)和二阶矩(second moment)的指数衰减移动平均,以便更好地控制学习率。以下是Adam的更新规则:
首先计算一阶矩(动量项)和二阶矩:
m
t
=
β
1
m
t
−
1
+
(
1
−
β
1
)
∇
θ
J
(
θ
t
)
m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla_\theta J(\theta_t)
mt=β1mt−1+(1−β1)∇θJ(θt)
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
(
∇
θ
J
(
θ
t
)
)
2
v_t = \beta_2 v_{t-1} + (1 - \beta_2) (\nabla_\theta J(\theta_t))^2
vt=β2vt−1+(1−β2)(∇θJ(θt))2
接下来是对这两个矩进行偏差修正:
m
^
t
=
m
t
1
−
β
1
t
\hat{m}_t = \frac{m_t}{1 - \beta_1^t}
m^t=1−β1tmt
v
^
t
=
v
t
1
−
β
2
t
\hat{v}_t = \frac{v_t}{1 - \beta_2^t}
v^t=1−β2tvt
最后,用修正后的矩计算并更新参数:
θ
t
+
1
=
θ
t
−
η
v
^
t
+
ϵ
m
^
t
\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
θt+1=θt−v^t+ϵηm^t
其中,
- β 1 \beta_1 β1 和 β 2 \beta_2 β2 是超参数,分别对应一阶矩和二阶矩的衰减率,
- ϵ \epsilon ϵ 是一个小常数,用于防止分母为零(一般取 1 0 − 8 10^{-8} 10−8 或类似的小数值)。
总的来说,Adam 通过考虑历史梯度信息以及自适应地调整学习率,能够更稳健、快速地收敛,并在很多深度学习任务中表现出良好的性能。
5. 总结
(1) Batch Gradient Descent (BGD)
优点:
- 准确性高 - 因为它是在整个训练集上计算梯度,所以得到的梯度方向更准确,接近全局最优解的方向。
- 稳定性 - 由于每次更新都是基于全局数据,因此更新更加稳定,不容易受个别样本影响。
缺点:
- 计算成本大 - 需要在每轮迭代中计算所有样本的梯度,当数据集非常大时,计算资源消耗显著增加,迭代速度慢。
- 内存需求高 - 如果数据集不能完全加载到内存,这种方法将无法直接应用。
- 收敛速度慢 - 特别是对于 saddle points 和局部最小值附近的震荡问题,BGD 反应可能不够灵敏。
(2) Stochastic Gradient Descent (SGD)
优点:
- 高效 - 只需处理单个或少量样本即可完成一次更新,非常适合大型数据集,可以实时更新模型。
- 收敛快 - 对于非凸优化问题,由于其随机性,有可能跳过局部极小值,快速接近全局解。
缺点:
- 波动性较大 - 由于随机性,梯度估计噪声大,可能导致训练过程不稳定。
- 收敛精度受限 - 单纯的 SGD 容易陷入鞍点或者收敛到次优解,且需要仔细调整学习率。
(3)Mini-batch Gradient Descent (MBGD)
优点:
- 平衡性能 - 结合了 BGD 和 SGD 的优点,既可以减少噪声又可以利用硬件并行计算的优势。
- 实用性 - 通过选择合适的批量大小,能够在计算资源和收敛速度之间取得较好的平衡。
缺点:
- 超参数选择 - 需要确定合适的批量大小,过大可能导致近似效果不佳,过小则可能丧失并行计算的优势。
- 噪声依然存在 - 相比 BGD,MBGD 依然受到噪声的影响,只是相比 SGD 而言较小。
(4)Adam (Adaptive Moment Estimation)
优点:
- 自适应学习率 - 使用一阶和二阶动量自适应调整学习率,无需人工精细调整。
- 快速收敛 - 结合了动量法避免振荡,并且能够快速收敛到局部极小值附近。
- 鲁棒性 - 对于稀疏梯度和不均匀的特征分布有更好的适应性。
缺点:
- 初始化依赖 - 参数初始化和超参数(如 β1, β2)的选择仍对性能有所影响。
- 可能欠拟合 - 在某些任务上,尤其是靠近最优解时,Adam 的学习率调整机制可能导致欠拟合。
- 不适合所有任务 - 尽管在许多情况下表现优异,但在某些特定任务中,其他优化器如 SGD 配合适当正则化策略可能表现更好。