Spec-Zone.ru › PyTorch 2.14

Adadelta

class torch.optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0, foreach=None, *, capturable=False, maximize=False, differentiable=False) [исходный код]

Реализует алгоритм Adadelta.

входные данные:γ (lr),θ0 (params),f(θ) (целевой функционал),ρ (затухание),λ (затухание весов)инициализация:v0←0 (среднее квадратов),u0←0 (накапливаемые переменные)дляt=1до…выполнятьgt←∇θft(θt−1)ifλ≠0gt←gt+λθt−1vt←vt−1ρ+gt2(1−ρ)Δxt←ut−1+ϵvt+ϵgtut←ut−1ρ+Δxt2(1−ρ)θt←θt−1−γΔxtвернутьθt\begin{aligned} &\rule{110mm}{0.4pt} \\ &\textbf{input} : \gamma \text{ (lr)}, \: \theta_0 \text{ (params)}, \: f(\theta) \text{ (objective)}, \: \rho \text{ (decay)}, \: \lambda \text{ (weight decay)} \\ &\textbf{initialize} : v_0 \leftarrow 0 \: \text{ (square avg)}, \: u_0 \leftarrow 0 \: \text{ (accumulate variables)} \\[-1.ex] &\rule{110mm}{0.4pt} \\ &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do} \\ &\hspace{5mm}g_t \leftarrow \nabla_{\theta} f_t (\theta_{t-1}) \\ &\hspace{5mm}if \: \lambda \neq 0 \\ &\hspace{10mm} g_t \leftarrow g_t + \lambda \theta_{t-1} \\ &\hspace{5mm} v_t \leftarrow v_{t-1} \rho + g^2_t (1 - \rho) \\ &\hspace{5mm}\Delta x_t \leftarrow \frac{\sqrt{u_{t-1} + \epsilon }}{ \sqrt{v_t + \epsilon} }g_t \hspace{21mm} \\ &\hspace{5mm} u_t \leftarrow u_{t-1} \rho + \Delta x^2_t (1 - \rho) \\ &\hspace{5mm}\theta_t \leftarrow \theta_{t-1} - \gamma \Delta x_t \\ &\rule{110mm}{0.4pt} \\[-1.ex] &\bf{return} \: \theta_t \\[-1.ex] &\rule{110mm}{0.4pt} \\[-1.ex] \end{aligned}

Дополнительные сведения об алгоритме см. в статье ADADELTA: метод адаптивной скорости обучения.

Параметры:
  • params (iterable) – итерируемый объект параметров или именованных параметров для оптимизации либо итерируемый объект словарей, задающих группы параметров. При использовании именованных параметров все параметры во всех группах должны иметь имена
  • lr (float, Tensor, необязательно) – коэффициент, масштабируемый по delta перед применением к параметрам (по умолчанию: 1.0)
  • rho (float, необязательно) – коэффициент, используемый для вычисления скользящего среднего квадратов градиентов (по умолчанию: 0.9). Более высокое значение rho приведет к более медленному усреднению, что может помочь предотвратить колебания в процессе обучения.
  • eps (float, необязательно) – слагаемое, добавляемое к знаменателю для повышения численной устойчивости (по умолчанию: 1e-6).
  • weight_decay (float, необязательно) – затухание весов (штраф L2) (по умолчанию: 0)
  • foreach (bool, необязательно) – использовать ли реализацию оптимизатора foreach. Если пользователь не указал значение (то есть foreach равен None), мы попытаемся использовать foreach вместо реализации с циклом for на CUDA, поскольку обычно она значительно производительнее. Обратите внимание: из-за промежуточных результатов в виде списка тензоров, а не одного тензора, реализация foreach использует примерно на sizeof(params) больше пиковой памяти, чем версия с циклом for. Если памяти недостаточно, обрабатывайте за один раз меньше параметров в оптимизаторе или установите для этого флага значение False (по умолчанию: None)
  • capturable (bool, необязательно) – безопасно ли захватывать этот экземпляр в граф, будь то графы CUDA или поддержка torch.compile. Тензоры можно захватывать только на поддерживаемых ускорителях. Передача True может ухудшить производительность без захвата графа, поэтому, если вы не собираетесь захватывать граф для этого экземпляра, оставьте значение False (по умолчанию: False)
  • maximize (bool, необязательно) – максимизировать целевой функционал относительно params вместо минимизации (по умолчанию: False)
  • differentiable (bool, необязательно) – следует ли выполнять autograd через шаг оптимизатора во время обучения. В противном случае функция step() выполняется в контексте torch.no_grad(). Установка значения True может снизить производительность, поэтому оставьте False, если не собираетесь выполнять autograd через этот экземпляр (по умолчанию: False)
add_param_group(param_group) [исходный код]

Добавляет группу параметров в Optimizer s param_groups.

Это может быть полезно при дообучении предварительно обученной сети: замороженные слои можно сделать обучаемыми и добавлять в Optimizer по мере обучения.

Параметры:

param_group (dict) – задает, какие тензоры следует оптимизировать, а также параметры оптимизации для этой группы.

load_state_dict(state_dict) [исходный код]

Загружает состояние оптимизатора.

Параметры:

state_dict (dict) – состояние оптимизатора. Должно быть объектом, возвращенным вызовом state_dict().

Предупреждение

Убедитесь, что этот метод вызывается после инициализации torch.optim.lr_scheduler.LRScheduler, поскольку вызов до этого перезапишет загруженные скорости обучения.

Примечание

Имена параметров (если они указаны под ключом “param_names” каждой группы параметров в state_dict()) не влияют на процесс загрузки. Чтобы использовать имена параметров в особых случаях (например, когда параметры в загруженном словаре состояния отличаются от инициализированных в оптимизаторе), следует реализовать пользовательский register_load_state_dict_pre_hook для соответствующей адаптации загруженного словаря. Если в загруженном словаре состояния имеются param_names param_groups, они будут сохранены и переопределят текущие имена, если они заданы, в состоянии оптимизатора. Если их нет в загруженном словаре состояния, param_names оптимизатора останется без изменений.

Пример

>>> optimizer = ...  # initialized optimizer matching the saved state
>>> scheduler1 = torch.optim.lr_scheduler.LinearLR(
...     optimizer,
...     start_factor=0.1,
...     end_factor=1,
...     total_iters=20,
... )
>>> scheduler2 = torch.optim.lr_scheduler.CosineAnnealingLR(
...     optimizer,
...     T_max=80,
...     eta_min=3e-5,
... )
>>> lr = torch.optim.lr_scheduler.SequentialLR(
...     optimizer,
...     schedulers=[scheduler1, scheduler2],
...     milestones=[20],
... )
>>> lr.load_state_dict(torch.load("./save_seq.pt"))
>>> # now load the optimizer checkpoint after loading the LRScheduler
>>> optimizer.load_state_dict(torch.load("./save_optim.pt"))
register_load_state_dict_post_hook(hook, prepend=False) [исходный код]

Регистрирует post-hook для load_state_dict, который будет вызван после вызова load_state_dict(). Он должен иметь следующую сигнатуру:

hook(optimizer) -> None

Аргумент optimizer — используемый экземпляр оптимизатора.

После вызова load_state_dict для self хук будет вызван с аргументом self. Зарегистрированный хук можно использовать для постобработки после того, как load_state_dict загрузил state_dict.

Параметры:
  • hook (Callable) – пользовательский хук для регистрации.
  • prepend (bool) – если True, предоставленный post-hook будет вызван до всех уже зарегистрированных post-hook в load_state_dict. В противном случае предоставленный hook будет вызван после всех уже зарегистрированных post-hook. (по умолчанию: False)
Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

register_load_state_dict_pre_hook(hook, prepend=False) [исходный код]

Регистрирует pre-hook для load_state_dict, который будет вызван перед вызовом load_state_dict(). Он должен иметь следующую сигнатуру:

hook(optimizer, state_dict) -> state_dict or None

Аргумент optimizer — используемый экземпляр оптимизатора, а аргумент state_dict — поверхностная копия state_dict, переданного пользователем в load_state_dict. Хук может изменить state_dict на месте или, при необходимости, вернуть новый. Если возвращен state_dict, он будет загружен в оптимизатор.

Перед вызовом load_state_dict для self хук будет вызван с аргументами self и state_dict. Зарегистрированный хук можно использовать для предварительной обработки перед вызовом load_state_dict.

Параметры:
  • hook (Callable) – пользовательский хук для регистрации.
  • prepend (bool) – если True, предоставленный pre-hook будет вызван до всех уже зарегистрированных pre-hook в load_state_dict. В противном случае предоставленный hook будет вызван после всех уже зарегистрированных pre-hook. (по умолчанию: False)
Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

register_state_dict_post_hook(hook, prepend=False) [исходный код]

Регистрирует post-hook для словаря состояния, который будет вызван после вызова state_dict().

Он должен иметь следующую сигнатуру:

hook(optimizer, state_dict) -> state_dict or None

После создания state_dict для self хук будет вызван с аргументами self и state_dict. Хук может изменить state_dict на месте или, при необходимости, вернуть новый. Зарегистрированный хук можно использовать для постобработки state_dict перед его возвратом.

Параметры:
  • hook (Callable) – пользовательский хук для регистрации.
  • prepend (bool) – если True, предоставленный post-hook будет вызван до всех уже зарегистрированных post-hook в state_dict. В противном случае предоставленный hook будет вызван после всех уже зарегистрированных post-hook. (по умолчанию: False)
Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

register_state_dict_pre_hook(hook, prepend=False) [исходный код]

Регистрирует pre-hook для словаря состояния, который будет вызван перед вызовом state_dict().

Он должен иметь следующую сигнатуру:

hook(optimizer) -> None

Аргумент optimizer — используемый экземпляр оптимизатора. Перед вызовом state_dict для self хук будет вызван с аргументом self. Зарегистрированный хук можно использовать для предварительной обработки перед вызовом state_dict.

Параметры:
  • hook (Callable) – пользовательский хук для регистрации.
  • prepend (bool) – если True, предоставленный pre-hook будет вызван до всех уже зарегистрированных pre-hook в state_dict. В противном случае предоставленный hook будет вызван после всех уже зарегистрированных pre-hook. (по умолчанию: False)
Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

register_step_post_hook(hook) [исходный код]

Регистрирует post-hook шага оптимизатора, который будет вызван после шага оптимизатора.

Он должен иметь следующую сигнатуру:

hook(optimizer, args, kwargs) -> None

Аргумент optimizer — используемый экземпляр оптимизатора.

Параметры:

hook (Callable) – пользовательский хук для регистрации.

Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

register_step_pre_hook(hook) [исходный код]

Регистрирует pre-hook шага оптимизатора, который будет вызван перед шагом оптимизатора.

Он должен иметь следующую сигнатуру:

hook(optimizer, args, kwargs) -> None or modified args and kwargs

Аргумент optimizer — используемый экземпляр оптимизатора. Если pre-hook изменяет args и kwargs, преобразованные значения возвращаются в виде кортежа, содержащего new_args и new_kwargs.

Параметры:

hook (Callable) – пользовательский хук для регистрации.

Возвращает:

дескриптор, который можно использовать для удаления добавленного хука вызовом handle.remove()

Тип возвращаемого значения:

torch.utils.hooks.RemovableHandle

state_dict() [исходный код]

Возвращает состояние оптимизатора в виде dict.

Он содержит две записи:

  • state: a Dict holding current optimization state. Its content

    отличается у разных классов оптимизаторов, но есть общие характеристики. Например, состояние сохраняется отдельно для каждого параметра, а сам параметр НЕ сохраняется. state — это словарь, сопоставляющий идентификаторы параметров со словарем состояния каждого параметра.

  • param_groups: a List containing all parameter groups where each

    группа параметров представляет собой словарь. Каждая группа параметров содержит метаданные, относящиеся к оптимизатору, например скорость обучения и затухание весов, а также список идентификаторов параметров, входящих в группу. Если группа параметров была инициализирована с помощью named_parameters(), имена также будут сохранены в словаре состояния.

ПРИМЕЧАНИЕ: идентификаторы параметров могут выглядеть как индексы, но это всего лишь идентификаторы, связывающие состояние с param_group. При загрузке из state_dict оптимизатор объединяет param_group params (целочисленные идентификаторы) и оптимизатор param_groups (фактические nn.Parameter s), чтобы сопоставить состояния БЕЗ дополнительной проверки.

Возвращаемый словарь состояния может выглядеть примерно так:

{
    'state': {
        0: {'momentum_buffer': tensor(...), ...},
        1: {'momentum_buffer': tensor(...), ...},
        2: {'momentum_buffer': tensor(...), ...},
        3: {'momentum_buffer': tensor(...), ...}
    },
    'param_groups': [
        {
            'lr': 0.01,
            'weight_decay': 0,
            ...
            'params': [0]
            'param_names' ['param0']  (optional)
        },
        {
            'lr': 0.001,
            'weight_decay': 0.5,
            ...
            'params': [1, 2, 3]
            'param_names': ['param1', 'layer.weight', 'layer.bias'] (optional)
        }
    ]
}
Тип возвращаемого значения:

dict[str, Any]

step(closure=None) [исходный код]

Выполняет один шаг оптимизации.

Параметры:

closure (Callable, необязательно) – замыкание, повторно вычисляющее модель и возвращающее функцию потерь.

zero_grad(set_to_none=True) [исходный код]

Сбрасывает градиенты всех оптимизируемых torch.Tensor s.

Параметры:

set_to_none (bool, необязательно) –

Вместо установки нулевых значений задает для градиентов None. По умолчанию: True

Как правило, это уменьшает потребление памяти и может немного повысить производительность. Однако такое поведение меняет некоторые аспекты работы. Например:

  1. Если пользователь обращается к градиенту и выполняет над ним операции вручную, атрибут None и тензор, заполненный нулями, будут вести себя по-разному.
  2. Если пользователь запрашивает zero_grad(set_to_none=True) с последующим обратным проходом, для .grad гарантированно будет установлено значение None у параметров, не получивших градиент.
  3. torch.optim оптимизаторы ведут себя по-разному, если градиент равен 0 или None (в одном случае выполняется шаг с градиентом 0, а в другом шаг полностью пропускается).

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.optim.Adadelta.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API