Spec-Zone.ru › PyTorch 2

RMSprop

class torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False, foreach=None, maximize=False, differentiable=False) [source]

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

входные данные:α (альфа),γ (lr),θ0 (параметры),f(θ) (целевая функция)λ (сброс весов),μ (импульс),centeredинициализация:v0←0 (среднее квадратичное значение),b0←0 (буфер),g0ave←0дляt=1по…сделатьgt←∇θft(θt−1)esli λ≠0gt←gt+λθt−1vt←αvt−1+(1−α)gt2vt~←vtesli centeredgtave←gt−1aveα+(1−α)gtvt~←vt~−(gtave)2esli μ>0bt←μbt−1+gt/(vt~+ϵ)θt←θt−1−γbtиначеθt←θt−1−γgt/(vt~+ϵ)возвратитьθt\begin{aligned} &\rule{110mm}{0.4pt} \\ &\textbf{входные данные} : \alpha \text{ (альфа)},\: \gamma \text{ (lr)}, \: \theta_0 \text{ (параметры)}, \: f(\theta) \text{ (целевая функция)} \\ &\hspace{13mm} \lambda \text{ (сброс весов)},\: \mu \text{ (импульс)},\: centered\\ &\textbf{инициализация} : v_0 \leftarrow 0 \text{ (среднее квадратичное значение)}, \: \textbf{b}_0 \leftarrow 0 \text{ (буфер)}, \: g^{ave}_0 \leftarrow 0 \\[-1.ex] &\rule{110mm}{0.4pt} \\ &\textbf{для} \: t=1 \: \textbf{по} \: \ldots \: \textbf{сделать} \\ &\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 \alpha v_{t-1} + (1 - \alpha) g^2_t \hspace{8mm} \\ &\hspace{5mm} \tilde{v_t} \leftarrow v_t \\ &\hspace{5mm}if \: centered \\ &\hspace{10mm} g^{ave}_t \leftarrow g^{ave}_{t-1} \alpha + (1-\alpha) g_t \\ &\hspace{10mm} \tilde{v_t} \leftarrow \tilde{v_t} - \big(g^{ave}_{t} \big)^2 \\ &\hspace{5mm}if \: \mu > 0 \\ &\hspace{10mm} \textbf{b}_t\leftarrow \mu \textbf{b}_{t-1} + g_t/ \big(\sqrt{\tilde{v_t}} + \epsilon \big) \\ &\hspace{10mm} \theta_t \leftarrow \theta_{t-1} - \gamma \textbf{b}_t \\ &\hspace{5mm} else \\ &\hspace{10mm}\theta_t \leftarrow \theta_{t-1} - \gamma g_t/ \big(\sqrt{\tilde{v_t}} + \epsilon \big) \hspace{3mm} \\ &\rule{110mm}{0.4pt} \\[-1.ex] &\bf{возвратить} \: \theta_t \\[-1.ex] &\rule{110mm}{0.4pt} \\[-1.ex] \end{aligned}

Для получения дополнительной информации об алгоритме см. лекции Дж. Хинтона. и централизованную версию Генерация последовательностей с рекуррентными нейронными сетями. В данном случае реализация извлекает квадратный корень из среднего градиента перед добавлением ε (обратите внимание, что TensorFlow меняет эти две операции). Таким образом, эффективная скорость обучения составляет γ/(v+ϵ)\gamma/(\sqrt{v} + \epsilon), где γ\gamma — запланированная скорость обучения, а vv — взвешенное скользящее среднее квадрата градиента.

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

Добавить группу параметров к Optimizer s 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)

Регистрирует обработчик post-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)

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

hook(optimizer, state_dict) -> state_dict or None

Аргумент optimizer — это экземпляр оптимизатора, используемый, а аргумент state_dict — это поверхностная копия state_dict , переданная пользователем в load_state_dict. Обработчик может изменять state_dict inplace или, по желанию, возвращать новый. Если возвращается 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)

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

hook(optimizer, state_dict) -> state_dict or None

Обработчик вызывается с аргументами self и state_dict после генерации state_dict на self. Обработчик может изменять state_dict inplace или, по желанию, возвращать новый. Зарегистрированный обработчик может использоваться для выполнения пост-обработки на 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(). Он должен иметь следующую сигнатуру:

hook(optimizer) -> None

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

Параметры
  • hook (Callable) – Определяемый пользователем обработчик, подлежащий регистрации.
  • prepend (bool) – Если True, предоставленный предварительный hook будет срабатывать до всех уже зарегистрированных предварительных обработчиков для state_dict. В противном случае, предоставленный hook будет срабатывать после всех уже зарегистрированных предварительных обработчиков. (по умолчанию: 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': {
        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) за которым следует обратный проход, градиенты гарантированно будут 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.RMSprop.html

Spec-Zone.ru

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