torch.optim.SGD 是 PyTorch 中用于实现随机梯度下降(Stochastic Gradient Descent,SGD)优化算法的类。SGD 是一种常用的优化算法,尤其在深度学习中被广泛应用。下面是 torch.optim.SGD 的主要参数及其说明:
torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
-
params
(必须参数): 这是一个包含了需要优化的参数(张量)的迭代器,例如模型的参数model.parameters()
。 -
lr
(必须参数): 学习率(learning rate)。它是一个正数,控制每次参数更新的步长。较小的学习率会导致收敛较慢,较大的学习率可能导致震荡或无法收敛。 -
momentum
(默认值为 0): 动量(momentum)是一个用于加速 SGD 收敛的参数。它引入了上一步梯度的指数加权平均。通常设置在 0 到 1 之间。当momentum
大于 0 时,算法在更新时会考虑之前的梯度,有助于加速收敛。 -
dampening
(默认值为 0): 阻尼项,用于减缓动量的速度。在某些情况下,为了防止动量项引起的震荡,可以设置一个小的dampening
值。 -
weight_decay
(默认值为 0): 权重衰减,也称为 L2 正则化项。它用于控制参数的幅度,以防止过拟合。通常设置为一个小的正数。 -
nesterov
(默认值为 False): Nesterov 动量。当设置为 True 时,采用 Nesterov 动量更新规则。Nesterov 动量在梯度更新之前先进行一次预测,然后在计算梯度更新时使用这个预测。
示例,演示如何在 PyTorch 中使用 torch.optim.SGD:
import torch
import torch.optim as optim
# 定义模型和损失函数
model = torch.nn.Linear(10, 1)
criterion = torch.nn.MSELoss()
# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=0.0001)
# 在训练循环中使用优化器
for epoch in range(epochs):
# Forward pass
output = model(input_data)
loss = criterion(output, target)
# Backward pass and optimization
optimizer.zero_grad()
loss.backward()
optimizer.step()
示例中,创建了一个线性模型,使用均方误差损失,并使用 torch.optim.SGD 作为优化器。在训练循环中,通过执行前向传播、反向传播和优化步骤来更新模型参数。