PyTorch随机梯度下降SGD优化器原理
编辑日期: 2024-07-16 文章阅读: 次
optim.SGD
是 PyTorch 中实现的随机梯度下降(Stochastic Gradient Descent, SGD)优化器。随机梯度下降是一种优化算法,用于训练机器学习模型(尤其是神经网络)。下面是 SGD 的原理以及其实现细节。
随机梯度下降的基本原理
梯度下降是一种用于最小化损失函数的优化算法。它通过迭代更新模型参数,使损失函数值逐步减小。其基本原理如下:
- 计算梯度:
-
计算损失函数 \(L(\theta)\) 对模型参数 \(\theta\) 的梯度,即 \(\nabla L(\theta)\)。
-
更新参数:
-
使用梯度信息更新模型参数。更新规则为:
$$ \theta := \theta - \eta \nabla L(\theta) $$
其中,\(\eta\) 是学习率(learning rate),控制每次更新的步长。
在随机梯度下降(SGD)中,每次更新参数时使用一个或几个训练样本的梯度,而不是整个训练集的梯度。这样可以加速计算并且能够跳出局部最优解。
PyTorch 中的 optim.SGD
在 PyTorch 中,optim.SGD
是一个实现了随机梯度下降的优化器。以下是其基本用法和原理。
用法示例
import torch
import torch.nn as nn
import torch.optim as optim
model = nn.Linear(10, 1)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
inputs = torch.randn(32, 10) # 假设有 32 个样本,每个样本有 10 个特征
targets = torch.randn(32, 1) # 假设对应的 32 个目标值
outputs = model(inputs)
loss = criterion(outputs, targets)
optimizer.zero_grad() # 清空梯度
loss.backward() # 计算梯度
optimizer.step() # 更新参数
关键参数
params
:模型参数,可以是模型的参数列表或模型参数的迭代器。lr
:学习率,控制每次参数更新的步长。momentum
(可选):动量因子,默认为 0。weight_decay
(可选):权重衰减(L2 正则化),默认为 0。dampening
(可选):动量的抑制因子,默认为 0。nesterov
(可选):布尔值,指示是否使用 Nesterov 动量,默认为 False。
动量
动量(Momentum)是 SGD 的一种扩展,用于加速收敛并减小震荡。其更新规则为:
\[ v_t = \mu v_{t-1} + \eta \nabla L(\theta_{t-1}) \]
\[ \theta_t = \theta_{t-1} - v_t \]
其中,\(v_t\) 是动量项,\(\mu\) 是动量因子。
总结
随机梯度下降(SGD)是一种广泛使用的优化算法,通过迭代更新模型参数以最小化损失函数。PyTorch 中的 optim.SGD
提供了 SGD 及其扩展(如动量)的实现,使得在训练神经网络时可以方便地使用这一优化算法。