跳转至

🔥AI副业赚钱星球

点击下面图片查看

郭震AI

PyTorch随机梯度下降SGD优化器原理

编辑日期: 2024-07-16 文章阅读:

optim.SGD 是 PyTorch 中实现的随机梯度下降(Stochastic Gradient Descent, SGD)优化器。随机梯度下降是一种优化算法,用于训练机器学习模型(尤其是神经网络)。下面是 SGD 的原理以及其实现细节。

随机梯度下降的基本原理

梯度下降是一种用于最小化损失函数的优化算法。它通过迭代更新模型参数,使损失函数值逐步减小。其基本原理如下:

  1. 计算梯度
  2. 计算损失函数 \(L(\theta)\) 对模型参数 \(\theta\) 的梯度,即 \(\nabla L(\theta)\)

  3. 更新参数

  4. 使用梯度信息更新模型参数。更新规则为:

    $$ \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()

# 使用 SGD 优化器
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 及其扩展(如动量)的实现,使得在训练神经网络时可以方便地使用这一优化算法。

大家在看

京ICP备20031037号-1 | AI之家 | AI资讯 | Python200 | 数据分析