Transformers documentation
Decision Transformer
Эта модель была опубликована в 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
< source >( 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.configDecisionTransformerGPT2Model
forward
< source >( 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
< source >( config: DecisionTransformerConfig )
Параметры
- config (DecisionTransformerConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Decision Transformer
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( 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,
... )