Transformers documentation

Decision Transformer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 02.06.2021 и добавлена в Hugging Face Transformers 23.03.2022.

Decision Transformer

Обзор

Модель Decision Transformer была предложена в статье Decision Transformer: Reinforcement Learning via Sequence Modeling
авторами Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch.

Аннотация из статьи следующая:

Мы представляем фреймворк, который абстрагирует обучение с подкреплением (RL) как задачу моделирования последовательностей. Это позволяет нам использовать простоту и масштабируемость архитектуры Transformer, а также связанные с ней достижения в области моделирования языка, такие как GPT-x и BERT. В частности, мы представляем Decision Transformer — архитектуру, которая рассматривает задачу RL как условное моделирование последовательностей. В отличие от предыдущих подходов к RL, которые подгоняют функции ценности или вычисляют градиенты политики, Decision Transformer просто выводит оптимальные действия, используя Transformer с каузальной маской. Условливая авторегрессионную модель на желаемый возврат (награду), прошлые состояния и действия, наша модель Decision Transformer может генерировать будущие действия, достигающие желаемого возврата. Несмотря на свою простоту, Decision Transformer соответствует или превосходит по производительности передовые базовые методы model-free offline RL на задачах Atari, OpenAI Gym и Key-to-Door.

Эта версия модели предназначена для задач, в которых состояние представляет собой вектор.

Эта модель была предоставлена пользователем edbeeching. Исходный код можно найти здесь.

DecisionTransformerConfig

класс transformers.DecisionTransformerConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonestate_dim: int = 17act_dim: int = 4hidden_size: int = 128max_ep_len: int = 4096action_tanh: bool = Truevocab_size: int = 1n_positions: int = 1024n_layer: int = 3n_head: int = 1n_inner: int | None = Noneactivation_function: str = 'relu'resid_pdrop: float | int = 0.1embd_pdrop: float | int = 0.1attn_pdrop: float | int = 0.1layer_norm_epsilon: float = 1e-05initializer_range: float = 0.02scale_attn_weights: bool = Trueuse_cache: bool = Truebos_token_id: int | None = 50256eos_token_id: int | list[int] | None = 50256scale_attn_by_inverse_layer_idx: bool = Falsereorder_and_upcast_attn: bool = Falseadd_cross_attention: bool = False )

Параметры

  • state_dim (int, необязательный, по умолчанию 17) — Размер состояния для среды RL
  • act_dim (int, необязательный, по умолчанию 4) — Размер пространства выходных действий
  • hidden_size (int, необязательный, по умолчанию 128) — Размерность скрытых представлений.
  • max_ep_len (int, необязательный, по умолчанию 4096) — Максимальная длина эпизода в среде
  • action_tanh (bool, необязательный, по умолчанию True) — Использовать ли активацию tanh для предсказания действия
  • vocab_size (int, необязательный, по умолчанию 1) — Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в input_ids.
  • n_positions (int, необязательный, по умолчанию 1024) — Максимальная длина последовательности, с которой может использоваться эта модель.
  • n_layer (int, необязательный, по умолчанию 3) — Количество скрытых слоев в декодере Transformer.
  • n_head (int, необязательный, по умолчанию 1) — Количество головок внимания в каждом слое внимания декодера Transformer.
  • n_inner (int, необязательный) — Размерность представлений MLP.
  • activation_function (str, необязательный, по умолчанию relu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • resid_pdrop (Union[float, int], необязательный, по умолчанию 0.1) — Вероятность dropout для всех полносвязных слоёв в блоках эмбеддингов, энкодера и пуллера.
  • embd_pdrop (Union[float, int], необязательный, по умолчанию 0.1) — Коэффициент dropout для эмбеддингов.
  • attn_pdrop (Union[float, int], необязательный, по умолчанию 0.1) — Коэффициент dropout для вероятностей внимания.
  • layer_norm_epsilon (float, необязательный, по умолчанию 1e-05) — Значение epsilon, используемое слоями нормализации.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • scale_attn_weights (bool, необязательный, по умолчанию True) — Масштабирует веса внимания, деля их на sqrt(hidden_size).
  • use_cache (bool, необязательный, по умолчанию True) — Указывает, должен ли модель возвращать последние ключи/значения внимания (не используется во всех моделях). Актуально только если config.is_decoder=True или если модель является генеративной моделью только с декодером.
  • bos_token_id (int, необязательный, по умолчанию 50256) — Идентификатор токена, используемого для обозначения начала потока в словаре.
  • eos_token_id (Union[int, list[int]], необязательный, по умолчанию 50256) — Идентификатор токена, используемого для обозначения конца потока в словаре.
  • scale_attn_by_inverse_layer_idx (bool, необязательный, по умолчанию False) — Указывает, следует ли дополнительно масштабировать веса внимания на 1 / layer_idx + 1.
  • reorder_and_upcast_attn (bool, необязательный, по умолчанию False) — Указывает, следует ли масштабировать ключи (K) перед вычислением внимания (скалярного произведения) и повышать точность скалярного произведения/softmax внимания до float() при обучении с смешанной точностью.
  • add_cross_attention (bool, необязательный, по умолчанию False) — Указывает, следует ли добавлять слои кросс-внимания в модель.

Это класс конфигурации для хранения конфигурации модели DecisionTransformerModel. Он используется для создания модели Decision Transformer в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import DecisionTransformerConfig, DecisionTransformerModel

>>> # Initializing a DecisionTransformer configuration
>>> configuration = DecisionTransformerConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = DecisionTransformerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

DecisionTransformerGPT2Model

класс transformers.DecisionTransformerGPT2Model

< >

( config: DecisionTransformerConfig )

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

DecisionTransformerModel

класс transformers.DecisionTransformerModel

< >

( config: DecisionTransformerConfig )

Параметры

  • config (DecisionTransformerConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Decision Transformer

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( states: typing.Optional[torch.Tensor] = Noneactions: typing.Optional[torch.Tensor] = Nonerewards: typing.Optional[torch.Tensor] = Nonereturns_to_go: typing.Optional[torch.Tensor] = Nonetimesteps: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DecisionTransformerOutput or tuple(torch.Tensor)

Параметры

  • states (torch.Tensor формы (batch_size, episode_length, state_dim)) — Состояния для каждого шага в траектории
  • actions (torch.Tensor формы (batch_size, episode_length, act_dim)) — Действия, выполняемые «экспертной» политикой для текущего состояния; они маскируются для авторегрессионного предсказания
  • rewards (torch.Tensor формы (batch_size, episode_length, 1)) — Награды для каждого состояния и действия
  • returns_to_go (torch.Tensor формы (batch_size, episode_length, 1)) — Возвраты для каждого состояния в траектории
  • timesteps (torch.LongTensor формы (batch_size, episode_length)) — Шаг времени для каждого шага в траектории
  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • output_attentions (bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описании attentions в разделе возвращаемых тензоров.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

DecisionTransformerOutput или tuple(torch.Tensor)

DecisionTransformerOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (DecisionTransformerConfig) и входных данных.

Метод forward модели DecisionTransformerModel переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • state_preds (torch.Tensor формы (batch_size, sequence_length, state_dim)) — Предсказания состояния среды

  • action_preds (torch.Tensor формы (batch_size, sequence_length, action_dim)) — Предсказания действий модели

  • return_preds (torch.Tensor формы (batch_size, sequence_length, 1)) — Предсказанные доходности для каждого состояния

  • hidden_states (torch.Tensor, необязательный, возвращается при передаче output_hidden_states=True или при config.output_hidden_states=True) — кортеж из torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

  • attentions (torch.Tensor, необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя модели.

Примеры:

>>> from transformers import DecisionTransformerModel
>>> import torch

>>> model = DecisionTransformerModel.from_pretrained("edbeeching/decision-transformer-gym-hopper-medium")
>>> # evaluation
>>> model = model.to(device)
>>> model.eval()

>>> env = gym.make("Hopper-v3")
>>> state_dim = env.observation_space.shape[0]
>>> act_dim = env.action_space.shape[0]

>>> state = env.reset()
>>> states = torch.from_numpy(state).reshape(1, 1, state_dim).to(device=device, dtype=torch.float32)
>>> actions = torch.zeros((1, 1, act_dim), device=device, dtype=torch.float32)
>>> rewards = torch.zeros(1, 1, device=device, dtype=torch.float32)
>>> target_return = torch.tensor(TARGET_RETURN, dtype=torch.float32).reshape(1, 1)
>>> timesteps = torch.tensor(0, device=device, dtype=torch.long).reshape(1, 1)
>>> attention_mask = torch.zeros(1, 1, device=device, dtype=torch.float32)

>>> # forward pass
>>> with torch.no_grad():
...     state_preds, action_preds, return_preds = model(
...         states=states,
...         actions=actions,
...         rewards=rewards,
...         returns_to_go=target_return,
...         timesteps=timesteps,
...         attention_mask=attention_mask,
...         return_dict=False,
...     )
Update on GitHub