Spec-Zone.ru › PyTorch 2

RAdam

class torch.optim.RAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, *, foreach=None, differentiable=False) [source]

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

input:γ (lr),β1,β2 (betas),θ0 (params),f(θ) (objective),λ (weightdecay),ϵ (epsilon)initialize:m0←0 ( first moment),v0←0 ( second moment),ρ∞←2/(1−β2)−1fort=1to…dogt←∇θft(θt−1)ifλ≠0gt←gt+λθt−1mt←β1mt−1+(1−β1)gtvt←β2vt−1+(1−β2)gt2mt^←mt/(1−β1t)ρt←ρ∞−2tβ2t/(1−β2t)ifρt>5lt←(1−β2t)vt+ϵrt←(ρt−4)(ρt−2)ρ∞(ρ∞−4)(ρ∞−2)ρtθt←θt−1−γmt^rtltelseθt←θt−1−γmt^returnθt\begin{aligned} &\rule{110mm}{0.4pt} \\ &\textbf{input} : \gamma \text{ (lr)}, \: \beta_1, \beta_2 \text{ (betas)}, \: \theta_0 \text{ (params)}, \:f(\theta) \text{ (objective)}, \: \lambda \text{ (weightdecay)}, \\ &\hspace{13mm} \epsilon \text{ (epsilon)} \\ &\textbf{initialize} : m_0 \leftarrow 0 \text{ ( first moment)}, v_0 \leftarrow 0 \text{ ( second moment)}, \\ &\hspace{18mm} \rho_{\infty} \leftarrow 2/(1-\beta_2) -1 \\[-1.ex] &\rule{110mm}{0.4pt} \\ &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do} \\ &\hspace{6mm}g_t \leftarrow \nabla_{\theta} f_t (\theta_{t-1}) \\ &\hspace{5mm} \textbf{if} \: \lambda \neq 0 \\ &\hspace{10mm} g_t \leftarrow g_t + \lambda \theta_{t-1} \\ &\hspace{6mm}m_t \leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t \\ &\hspace{6mm}v_t \leftarrow \beta_2 v_{t-1} + (1-\beta_2) g^2_t \\ &\hspace{6mm}\widehat{m_t} \leftarrow m_t/\big(1-\beta_1^t \big) \\ &\hspace{6mm}\rho_t \leftarrow \rho_{\infty} - 2 t \beta^t_2 /\big(1-\beta_2^t \big) \\[0.1.ex] &\hspace{6mm}\textbf{if} \: \rho_t > 5 \\ &\hspace{12mm} l_t \leftarrow \frac{\sqrt{ (1-\beta^t_2) }}{ \sqrt{v_t} +\epsilon } \\ &\hspace{12mm} r_t \leftarrow \sqrt{\frac{(\rho_t-4)(\rho_t-2)\rho_{\infty}}{(\rho_{\infty}-4)(\rho_{\infty}-2) \rho_t}} \\ &\hspace{12mm}\theta_t \leftarrow \theta_{t-1} - \gamma \widehat{m_t} r_t l_t \\ &\hspace{6mm}\textbf{else} \\ &\hspace{12mm}\theta_t \leftarrow \theta_{t-1} - \gamma \widehat{m_t} \\ &\rule{110mm}{0.4pt} \\[-1.ex] &\bf{return} \: \theta_t \\[-1.ex] &\rule{110mm}{0.4pt} \\[-1.ex] \end{aligned}

Для получения дополнительной информации об алгоритме мы обращаем вас к On the variance of the adaptive learning rate and beyond.

Эта реализация использует ту же реализацию weight_decay, что и Adam (где weight_decay применяется к градиенту), а не ту, что используется в AdamW (где weight_decay применяется к обновлению). Это отличается от реализации автора.

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

Добавить группу параметров в Optimizerы param_groups.

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

Параметры

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

load_state_dict(state_dict)

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

Параметры

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

register_load_state_dict_post_hook(hook, prepend=False)

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

hook(optimizer) -> None

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

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

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

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

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

torch.utils.hooks.RemoveableHandle

register_load_state_dict_pre_hook(hook, prepend=False)

Регистрирует пре-хук 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, он будет использован для загрузки в оптимизатор.

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

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

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

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

torch.utils.hooks.RemoveableHandle

register_state_dict_post_hook(hook, prepend=False)

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

hook(optimizer, state_dict) -> state_dict or None

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

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

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

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

torch.utils.hooks.RemoveableHandle

register_state_dict_pre_hook(hook, prepend=False)

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

hook(optimizer) -> None

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

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

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

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

torch.utils.hooks.RemoveableHandle

register_step_post_hook(hook)

Зарегистрировать пост-хук шага оптимизатора, который будет вызываться после шага оптимизатора. Он должен иметь следующую сигнатуру:

hook(optimizer, args, kwargs) -> None

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

Параметры

hook (Callable) — пользовательский хук, который нужно зарегистрировать.

Возвращает

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

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

torch.utils.hooks.RemovableHandle

register_step_pre_hook(hook)

Зарегистрировать пре-хук шага оптимизатора, который будет вызываться перед шагом оптимизатора. Он должен иметь следующую сигнатуру:

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

Аргумент optimizer — это экземпляр оптимизатора, который используется. Если значения 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

    группа параметров — это словарь. Каждая группа параметров содержит метаданные, специфичные для оптимизатора, такие как скорость обучения и сглаживание весов, а также список идентификаторов параметров параметров в группе.

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

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

{
    '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]
        },
        {
            'lr': 0.001,
            'weight_decay': 0.5,
            ...
            'params': [1, 2, 3]
        }
    ]
}
Тип возвращаемого значения

Dict[str, Any]

step(closure=None) [source]

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

Параметры

closure (Callable, optional) — замыкание, которое переоценивает модель и возвращает потерю.

zero_grad(set_to_none=True)

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

Параметры

set_to_none (bool) — вместо установки в ноль, установить градиенты в None. Это, как правило, потребует меньшего объёма памяти и может незначительно улучшить производительность. Однако это изменяет некоторые поведения. Например: 1. Когда пользователь пытается получить доступ к градиенту и выполнить на нём ручные операции, атрибут None или тензор, заполненный нулями, будет вести себя по-разному. 2. Если пользователь запросит zero_grad(set_to_none=True), за которым следует обратный проход, .grad гарантированно будут None для параметров, которые не получили градиент. 3. torch.optim оптимизаторы ведут себя по-разному, если градиент равен 0 или None (в одном случае он выполняет шаг с градиентом 0, а в другом — пропускает шаг вообще).

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

Spec-Zone.ru

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