Класс Adadelta
Класс Adadelta реализует адаптивный метод оптимизации,
предложенный в 2012 году. В отличие от многих других оптимизаторов,
Adadelta не требует задания начальной скорости обучения,
так как динамически адаптирует её в процессе обучения.
Первый параметр конструктора принимает список оптимизируемых параметров
модели. Вторым параметром можно передать начальную скорость обучения
(по умолчанию 1.0), третьим - коэффициент затухания
(по умолчанию 0.9).
Синтаксис
torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06)
Параметры
Конструктор класса Adadelta принимает следующие параметры:
- params (iterable) - итерируемый список оптимизируемых параметров модели;
- lr (float, опционально) - начальная скорость обучения (по умолчанию 1.0);
- rho (float, опционально) - коэффициент затухания для скользящего среднего квадратов градиентов (по умолчанию 0.9);
- eps (float, опционально) - небольшое число для улучшения численной стабильности (по умолчанию 1e-06).
Пример базового использования
Давайте создадим простую модель и обучим её с помощью оптимизатора Adadelta:
import torch
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(0)
model = nn.Linear(10, 1)
optimizer = optim.Adadelta(model.parameters())
print(optimizer)
Результат выполнения кода:
Adadelta (
Parameter Group 0
eps: 1e-06
lr: 1.0
rho: 0.9
weight_decay: 0
)
Пример с настройкой параметров
Давайте создадим оптимизатор с пользовательскими значениями параметров:
import torch
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(0)
model = nn.Linear(10, 1)
optimizer = optim.Adadelta(
model.parameters(),
lr=0.5,
rho=0.95,
eps=1e-08
)
print(optimizer)
Результат выполнения кода:
Adadelta (
Parameter Group 0
eps: 1e-08
lr: 0.5
rho: 0.95
weight_decay: 0
)
Пример обучения модели
Давайте покажем полный цикл обучения с оптимизатором Adadelta:
import torch
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(0)
model = nn.Linear(5, 1)
optimizer = optim.Adadelta(model.parameters())
criterion = nn.MSELoss()
x = torch.randn(10, 5)
y = torch.randn(10, 1)
for epoch in range(50):
optimizer.zero_grad()
pred = model(x)
loss = criterion(pred, y)
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
Результат выполнения кода:
Epoch 0, Loss: 0.5679
Epoch 10, Loss: 0.4895
Epoch 20, Loss: 0.4394
Epoch 30, Loss: 0.4095
Epoch 40, Loss: 0.3939
Пример с регуляризацией
Давайте добавим регуляризацию с помощью параметра weight_decay:
import torch
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(0)
model = nn.Linear(10, 5)
optimizer = optim.Adadelta(
model.parameters(),
weight_decay=0.01
)
print(f"Number of parameter groups: {len(optimizer.param_groups)}")
Результат выполнения кода:
Number of parameter groups: 1
Смотрите также
-
класс
SGD,
который реализует классический стохастический градиентный спуск -
класс
Adam,
который комбинирует преимущества нескольких адаптивных методов -
класс
RMSprop,
который нормализует градиенты с помощью скользящего среднего -
класс
Adagrad,
который адаптирует скорость обучения для каждого параметра индивидуально