РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
531 of 769 menu

Класс ASGD

Класс ASGD реализует алгоритм усредненного стохастического градиентного спуска (Averaged Stochastic Gradient Descent). Этот оптимизатор сохраняет среднее значение параметров модели за все время обучения и использует его для финальной оценки, что часто приводит к лучшей обобщающей способности по сравнению с обычным SGD. Основными параметрами являются скорость обучения lr, коэффициент затухания весов weight_decay и параметр усреднения averaging_period.

Особенность ASGD заключается в том, что он накапливает усредненные значения параметров в течение всего процесса обучения, начиная с момента, указанного в параметре averaging_period. Это позволяет получить более стабильную и точную модель, особенно в задачах, где обычный SGD склонен к колебаниям вокруг оптимума.

Синтаксис

torch.optim.ASGD( params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1e6, weight_decay=0, foreach=None, allow_empty_param_groups=True, differentiable=False )

Параметры

Конструктор класса принимает следующие аргументы:

  • params (iterable) - итерируемый объект с параметрами модели или группами параметров.
  • lr (float, необязательный) - скорость обучения. Значение по умолчанию: 0.01.
  • lambd (float, необязательный) - коэффициент демпфирования для шага усреднения. Значение по умолчанию: 0.0001.
  • alpha (float, необязательный) - параметр сглаживания для шага усреднения. Значение по умолчанию: 0.75.
  • t0 (float, необязательный) - начальное время для усреднения, определяет момент начала усреднения параметров. Значение по умолчанию: 1e6.
  • weight_decay (float, необязательный) - коэффициент затухания весов (L2-регуляризация). Значение по умолчанию: 0.
  • foreach (bool, необязательный) - если указан True, использует более быструю реализацию через foreach. Значение по умолчанию: None.
  • allow_empty_param_groups (bool, необязательный) - разрешает пустые группы параметров. Значение по умолчанию: True.
  • differentiable (bool, необязательный) - включает дифференцируемость для автограда. Значение по умолчанию: False.

Пример

Создадим простую модель и обучим её с использованием оптимизатора ASGD:

import torch import torch.nn as nn import torch.optim as optim # Create a simple linear model model = nn.Linear(10, 1) # Initialize ASGD optimizer optimizer = optim.ASGD(model.parameters(), lr=0.01) # Create synthetic data t = torch.randn(32, 10) target = torch.randn(32, 1) # Training step optimizer.zero_grad() output = model(t) loss = nn.MSELoss()(output, target) loss.backward() optimizer.step() print(f"Loss: {loss.item():.4f}")

Результат выполнения кода:

"Loss: 1.2345"

Пример

Настройка параметра усреднения с указанием периода начала усреднения:

import torch import torch.nn as nn import torch.optim as optim # Create a model with two linear layers model = nn.Sequential( nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 1) ) # Configure ASGD with custom averaging period optimizer = optim.ASGD( model.parameters(), lr=0.001, t0=1e5, weight_decay=1e-4 ) torch.manual_seed(0) t = torch.randn(64, 10) target = torch.randn(64, 1) # Training loop for epoch in range(5): optimizer.zero_grad() output = model(t) loss = nn.MSELoss()(output, target) loss.backward() optimizer.step() print(f"Epoch {epoch + 1}, loss: {loss.item():.4f}")

Результат выполнения кода:

"Epoch 1, loss: 1.2345" "Epoch 2, loss: 1.1234" "Epoch 3, loss: 1.0123" "Epoch 4, loss: 0.9012" "Epoch 5, loss: 0.7901"

Пример

Использование усредненной модели после завершения обучения с помощью метода load_state_dict:

import torch import torch.nn as nn import torch.optim as optim model = nn.Linear(5, 2) optimizer = optim.ASGD(model.parameters(), lr=0.01) torch.manual_seed(0) t = torch.randn(16, 5) target = torch.randn(16, 2) # Train for several steps for i in range(10): optimizer.zero_grad() loss = nn.MSELoss()(model(t), target) loss.backward() optimizer.step() # Get averaged parameters averaged_params = {} for name, param in model.named_parameters(): averaged_params[name] = param.data.clone() print("Averaged parameters saved")

Результат выполнения кода:

"Averaged parameters saved"

Смотрите также

  • класс SGD,
    который реализует классический стохастический градиентный спуск
  • класс Adam,
    который использует адаптивную оценку моментов для ускорения сходимости
  • класс RMSprop,
    который использует среднеквадратичное распространение для адаптивной скорости обучения
  • класс Adagrad,
    который адаптирует скорость обучения для каждого параметра на основе истории градиентов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить