目录
1. Stochastic Gradient Descent (SGD)
2. Adam (Adaptive Moment Estimation)
梯度下降算法原理
梯度下降算法是机器学习和深度学习中最基本的优化算法之一,用于求解损失函数的最小值。它的核心思想是通过迭代的方式,沿着损失函数梯度(或者说损失函数在某一点的导数)的负方向,更新模型的参数,从而使损失函数的值逐渐减小,直至达到局部最小值或满足某种停止准则。
梯度下降算法寻找函数最小值的过程就类似于想象你站在一个未知地形的山顶上,你的目标是走到山底的最低点。在缺乏地图的情况下,最直观的做法是观察你周围地形的倾斜情况,然后朝着倾斜度最陡峭的反方向迈出一步。重复这个过程,每一步都朝着当前所在位置最陡峭方向的反方向移动,最终你会到达山谷的底部,即地形的最低点。
梯度下降算法的基本步骤:
-
初始化参数:选择一个初始点,即模型参数的初始值。
-
计算梯度:在当前参数值处计算损失函数的梯度,即损失函数在该点的导数。梯度是一个向量,指示了损失函数增长最快的方向。
-
更新参数:使用当前梯度和学习率(learning rate)来更新参数。更新公式为:
𝜃:=𝜃−𝛼⋅∇𝐽(𝜃)θ:=θ−α⋅∇J(θ)
其中,𝜃θ 是参数向量,𝛼α 是学习率,∇𝐽(𝜃)∇J(θ) 是损失函数在参数𝜃θ处的梯度。
-
重复步骤2和3:持续迭代,直到满足某个停止条件,如达到预定的迭代次数,或梯度的模长小于某个阈值,或损失函数的变化小于某个阈值。
面详细介绍 torch.optim.SGD
以及其他几种常见的优化算法。
1. Stochastic Gradient Descent (SGD)
torch.optim.SGD
实现了随机梯度下降算法。SGD 是一种迭代优化算法,用于寻找损失函数的局部最小值。相比于批量梯度下降(Batch Gradient Descent),SGD 在每次迭代中只使用一个样本或一小批样本(称为小批量,Mini-batch)来估计梯度,这使得训练过程更快,但可能引入更多的噪声。
torch.optim.SGD(params, lr=<object>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
参数说明:
params
: 可迭代的对象,包含模型的参数(例如model.parameters()
)。lr
: 学习率,控制参数更新的幅度。默认值为0.01
。momentum
: 动量项,用于加速 SGD 在相关方向上的运动,减少振荡。默认值为0
。weight_decay
: 权重衰减(L2惩罚)。默认值为0
。dampening
: 动量项的阻尼系数,减少动量累积。默认值为0
。nesterov
: 如果启用,使用 Nesterov 加速梯度。默认值为False
。
2. Adam (Adaptive Moment Estimation)
Adam 是一种自适应学习率优化算法,它结合了 Momentum 和 RMSProp 的优点,通过计算梯度的一阶矩估计和二阶矩估计来动态调整学习率。Adam 算法在多种问题上表现出了很好的效果,尤其在深度学习领域。
torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)
参数说明:
params
: 可迭代的对象,包含模型的参数。lr
: 学习率。默认值为0.001
。betas
: 一阶矩和二阶矩的衰减率,通常为(0.9, 0.999)
。eps
: 添加到分母以提高数值稳定性的小值。默认值为1e-8
。weight_decay
: 权重衰减。默认值为0
。
3. Adagrad
Adagrad 是另一种自适应学习率优化算法,它为每个参数维护一个累加的梯度平方和,然后使用这些信息来调整每个参数的学习率。
torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
参数说明:
params
: 可迭代的对象,包含模型的参数。lr
: 学习率。默认值为0.01
。lr_decay
: 学习率衰减率。默认值为0
。weight_decay
: 权重衰减。默认值为0
。eps
: 添加到分母以提高数值稳定性的小值。默认值为1e-10
。
4. RMSprop
RMSprop 算法通过使用滑动平均的梯度平方来动态调整学习率,这有助于在平坦区域加速收敛,并防止学习率在陡峭区域变得过大。
torch.optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0, foreach=None, maximize=False)
参数说明:
params
: 可迭代的对象,包含模型的参数。lr
: 学习率。默认值为0.01
。alpha
: 衰减率,用于计算梯度平方的滑动平均。默认值为0.99
。eps
: 添加到分母以提高数值稳定性的小值。默认值为1e-8
。centered
: 是否计算梯度的均值平方差。默认值为False
。
通用参数
- foreach (bool): 是否使用foreach API进行并行计算,默认为None(自动选择)。
- maximize (bool): 是否最大化目标函数,默认为False。
在使用优化器时,lr
和 weight_decay
是最常用的参数,而其他参数如 momentum
、betas
等则取决于具体的优化算法。