优化算法

//todo

局部最小 vs 全局最小

使用迭代算法来求解,一般只能保证找到局部最小值

凸函数优化

函数两个点连的线都在该函数上面

凸优化问题,局部最小一定是全局最小

  • 线性回归
  • softmax回归

非凸

  • MLP,CNN,RNN,attention

动量法

使用平滑过的梯度对权重更新

Adam

对梯度做平滑,且对梯度各个维度值做重新调整

优化器

1
2
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

优化器(optimizer):通过优化策略(梯度下降)来更新可学习参数(权值W和偏置bias),使得损失函数Loss值逐步降低,输出的模型更接近真实标签。
影响因素:(1)梯度方向(2)学习率

常用优化器:

  • 经典的梯度下降法。
  • 梯度下降优化算法:SGD、SGDM、NAG。缺点:缓解了参数空间的方向问题,但需要新增参数,且对学习率的控制也不太理想。
  • 自适应优化算法:AdaGrad(累积梯度平方)、RMSProp(累积梯度平方的滑动平均)、Adam(带动量项的RMSProp), 自适应优化算法,学习率不再是一个固定不贬值,它会根据实际情况自动调整以适应环境。

学习率

1
2
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

学习率(learning rate,lr):用于控制权重参数的学习速度。一般情况下,学习率随着epoch的增大而逐渐减小,可以达到更好的训练效果。

动态调整学习率

1
2
3
4
5
6
torch.optim.lr_scheduler.LambdaLR()				:通过自定义 Lambda 函数来设置每个参数组的学习率。
torch.optim.lr_scheduler.MultiplicativeLR() :通过指定乘法因子来调整每个参数组的学习率。
torch.optim.lr_scheduler.StepLR() :在每个给定的步骤上降低学习率,步骤由用户定义。
torch.optim.lr_scheduler.MultiStepLR() :在每个给定的步骤上降低学习率,步骤由用户定义。
torch.optim.lr_scheduler.ExponentialLR() :每个周期按指数衰减学习率。
torch.optim.lr_scheduler.CosineAnnealingLR() :每个周期按余弦函数衰减。

优化算法
http://example.com/2024/07/28/optimization/
作者
Mercury
发布于
2024年7月28日
许可协议