14 模型训练之选择优化器

在上一篇文章中,我们讨论了如何定义损失函数。这是模型训练中的重要一步,因为损失函数为我们提供了一个评估模型性能的标准。在进行模型训练时,除了损失函数,选择合适的优化器同样至关重要。优化器是调整模型参数的关键,它直接影响到模型的收敛速度和最终效果。今天,我们将一起探讨如何在PyTorch中选择合适的优化器,并了解一些常见的优化器及其适用场景。

1. 理解优化器

在机器学习中,训练模型的核心任务是通过最小化损失函数来优化模型的参数。这一过程通常涉及到梯度下降方法。优化器的作用便是根据计算出的梯度来更新模型参数,以减小损失。

常见的优化器分为两类:标准的梯度下降优化器自适应学习率优化器

1.1 标准的梯度下降优化器

  • SGD(随机梯度下降)
    SGD 是最基础的优化器,其更新公式为:

    $$
    \theta_{new} = \theta_{old} - \eta \nabla J(\theta)
    $$

    其中,$\theta$ 是参数,$\eta$ 是学习率,$\nabla J(\theta)$ 是损失函数关于参数的梯度。

  • Momentum(动量法)
    为了加速SGD的收敛,Momentum 为梯度更新引入了一个“惯性”:

    $$
    v_t = \beta v_{t-1} + (1 - \beta) \nabla J(\theta)
    $$

    $$
    \theta_{new} = \theta_{old} - \eta v_t
    $$

    这里,$v$ 是动量,$\beta$ 通常取值在0.9到0.99之间。

1.2 自适应学习率优化器

  • Adam(自适应动量估计)
    Adam 结合了Momentum和RMSProp的优点,其参数更新公式较为复杂,但在实际中表现良好:

    $$
    m_t = \beta_1 m_{t-1} + (1 - \beta_1) \nabla J(\theta)
    $$

    $$
    v_t = \beta_2 v_{t-1} + (1 - \beta_2)(\nabla J(\theta))^2
    $$

    $$
    \theta_{new} = \theta_{old} - \frac{\eta}{\sqrt{v_t} + \epsilon} m_t
    $$

    其中,$m_t$ 是梯度的一阶矩估计,$v_t$ 是梯度的二阶矩估计,$\epsilon$ 是为了防止除零的一个小常数。

2. PyTorch中的优化器选择

在PyTorch中,我们可以通过 torch.optim 模块来快速选择和使用优化器。以下是一个使用SGD和Adam优化器的基本示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import torch
import torch.nn as nn
import torch.optim as optim

# 创建一个简单的线性模型
model = nn.Linear(10, 1)

# 选择损失函数
criterion = nn.MSELoss()

# 使用SGD优化器
optimizer_sgd = optim.SGD(model.parameters(), lr=0.01)

# 或者使用Adam优化器
optimizer_adam = optim.Adam(model.parameters(), lr=0.001)

# 假设有一些输入数据和目标标签
inputs = torch.randn(5, 10)
targets = torch.randn(5, 1)

# 进行一次训练迭代
optimizer_sgd.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer_sgd.step()

# 如果使用Adam优化器
optimizer_adam.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer_adam.step()

print("训练完成")

在这里,我们定义了一个线性模型,并选择SGD和Adam作为优化器。通过调用优化器的 zero_grad 方法来清除之前的梯度,计算损失后使用 backward 方法反向传播梯度,最后用 step 方法来更新模型参数。

3. 如何选择优化器

选择合适的优化器通常依赖于以下几个因素:

  1. 任务复杂性:对于复杂性较高的任务,建议使用自适应学习率的优化器(如Adam),因为它能自适应调整学习率,有助于加快收敛。

  2. 计算资源限制:如果面临计算资源的限制,SGD伴随动量法通常更为高效。

  3. 经验法则:有时候,通过实验了解不同优化器在特定任务上的表现会更为直观。

4. 总结

在本篇中,我们详细探讨了PyTorch中优化器的选择,包括了标准的SGD和自适应的Adam两个重要优化器。选择适当的优化器是提高模型训练效率与效果的关键一步。在下一篇中,我们将深入讨论模型训练中的“训练循环的实现”,具体看看如何将计算、更新和评估整合在一起,为我们实现完整的训练过程打下良好的基础。

14 模型训练之选择优化器

https://zglg.work/pytorch-zero/14/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论