Spec-Zone.ru › PyTorch 2

SparseAdam

class torch.optim.SparseAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, maximize=False) [source]

SparseAdam реализует маскующий вариант алгоритма Adam, подходящий для разреженных градиентов. В настоящее время, из-за ограничений реализации (объясненных ниже), SparseAdam предназначен только для узкого подмножества случаев использования, конкретно для параметров плотной структуры с градиентами разреженной структуры. Это происходит в специальном случае, когда модуль обратного распространения уже генерирует градиенты в разреженной структуре. Одним примером такого NN-модуля является nn.Embedding(sparse=True).

SparseAdam аппроксимирует алгоритм Adam, игнорируя обновления параметров и моментов, соответствующие нулевым значениям в градиентах. В то время как алгоритм Adam обновляет первый момент, второй момент и параметры на основе всех значений градиентов, SparseAdam обновляет только моменты и параметры, соответствующие ненулевым значениям градиентов.

Упрощенное представление реализации intended таково:

  1. Создается маска ненулевых значений в разреженных градиентах. Например, если ваш градиент выглядит как [0, 5, 0, 0, 9], маска будет [0, 1, 0, 0, 1].
  2. Эта маска применяется к текущим моментам, и вычисления проводятся только с ненулевыми значениями.
  3. Эта маска применяется к параметрам, и обновление выполняется только для ненулевых значений.

На самом деле, мы используем разреженные тензоры для оптимизации этой аппроксимации, что означает, что чем больше градиентов маскируются (не материализуются), тем выше производительность оптимизации. Поскольку мы полагаемся на использование разреженных тензоров, мы делаем вывод, что любое материализованное значение в разреженной структуре является ненулевым, и мы НЕ проверяем, что все значения не равны нулю! Важно не путать семантически разреженный тензор (тензор, многие значения которого равны нулю) с тензором с разреженной структурой (тензор, для которого .is_sparse возвращает True). Аппроксимация SparseAdam предназначена для semantically разреженных тензоров, а разреженная структура является лишь деталью реализации. Более понятная реализация могла бы использовать MaskedTensors, но они экспериментальные.

Примечание

Если вы подозреваете, что ваши градиенты семантически разреженные (но не имеют разреженной структуры), этот вариант может быть не лучшим для вас. В идеале, вы хотите избегать материализации любых значений, которые, как предполагается, являются разреженными, так как преобразование всех градиентов из плотной структуры в разреженную может перевесить выигрыш в производительности. В таком случае Adam может быть лучшим вариантом, если вы не можете легко настроить свой модуль на вывод разреженных градиентов, аналогично nn.Embedding(sparse=True). Если вы настаиваете на преобразовании своих градиентов, вы можете сделать это вручную, перезаписав поля параметров .grad их разреженными эквивалентами перед вызовом .step().

Параметры
  • params (итерируемый объект) – итерируемый объект параметров для оптимизации или словари, определяющие группы параметров
  • lr (float, необязательный) – скорость обучения (по умолчанию: 1e-3)
  • betas (Кортеж[float, float], необязательный) – коэффициенты, используемые для вычисления скользящих средних градиента и его квадрата (по умолчанию: (0.9, 0.999))
  • eps (float, необязательный) – член, добавляемый к знаменателю для улучшения числовой устойчивости (по умолчанию: 1e-8)
  • maximize (bool, необязательный) – максимизировать параметры на основе целевой функции вместо минимизации (по умолчанию: False)
add_param_group(param_group)

Добавляет группу параметров в оптимизаторы Optimizer.

Это может быть полезно при донастройке предварительно обученной сети, так как замороженные слои можно сделать обучаемыми и добавить в 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 (Вызываемая функция) – Заданный пользователем обработчик.
  • prepend (bool) – Если True, указанный пост-обработчик будет вызван до всех уже зарегистрированных пост-обработчиков на load_state_dict. В противном случае, указанный пост-обработчик будет вызван после всех уже зарегистрированных пост-обработчиков. (по умолчанию: False)
Возвращает

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

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

torch.utils.hooks.RemoveableHandle

register_load_state_dict_pre_hook(hook, prepend=False)
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) за которым следует обратный проход, .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.SparseAdam.html

Spec-Zone.ru

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