Transformers documentation
Decision Transformer
Este modelo foi publicado no HF papers em 2021-06-02 e contribuído para o Hugging Face Transformers em 2022-03-23.
Decision Transformer
Visão geral
O modelo Decision Transformer foi proposto em Decision Transformer: Reinforcement Learning via Sequence Modeling
por Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch.
O resumo do artigo é o seguinte:
Apresentamos um framework que abstrai o Aprendizado por Reforço (RL) como um problema de modelagem de sequências. Isso nos permite aproveitar a simplicidade e a escalabilidade da arquitetura Transformer, bem como os avanços associados na modelagem de linguagem, como GPT-x e BERT. Em particular, apresentamos o Decision Transformer, uma arquitetura que formula o problema de RL como modelagem de sequência condicional. Diferentemente de abordagens anteriores de RL que ajustam funções de valor ou calculam gradientes de política, o Decision Transformer simplesmente produz as ações ótimas aproveitando um Transformer com máscara causal. Ao condicionar um modelo autoregressivo no retorno desejado (recompensa), nos estados e ações passados, nosso modelo Decision Transformer pode gerar ações futuras que alcancam o retorno desejado. Apesar da sua simplicidade, o Decision Transformer iguala ou supera o desempenho de baselines offline de RL model-free state-of-the-art em tarefas de Atari, OpenAI Gym e Key-to-Door.
Esta versão do modelo é para tarefas em que o estado é um vetor.
Este modelo foi contribuído por edbeeching. O código original pode ser encontrado aqui.
DecisionTransformerConfig
classe 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 )
Parâmetros
- state_dim (
int, opcional, padrão 17) — O tamanho do estado para o ambiente de RL - act_dim (
int, opcional, padrão 4) — O tamanho do espaço de ações de saída - hidden_size (
int, opcional, padrão128) — Dimensão das representações ocultas. - max_ep_len (
int, opcional, padrão 4096) — O comprimento máximo de um episódio no ambiente - action_tanh (
bool, opcional, padrão True) — Se deve usar uma ativação tanh na previsão da ação - vocab_size (
int, opcional, padrão1) — Tamanho do vocabulário do modelo. Define o número de tokens diferentes que podem ser representados pelosinput_ids. - n_positions (
int, opcional, padrão1024) — O comprimento máximo de sequência com o qual este modelo pode ser utilizado. - n_layer (
int, opcional, padrão3) — Número de camadas ocultas no decodificador do Transformer. - n_head (
int, opcional, padrão1) — Número de cabeças de atenção para cada camada de atenção no decodificador do Transformer. - n_inner (
int, opcional) — Dimensão das representações do MLP. - activation_function (
str, opcional, padrãorelu) — A função de ativação não linear (função ou string) no decodificador. Por exemplo,"gelu","relu","silu", etc. - resid_pdrop (
Union[float, int], opcional, padrão0.1) — A probabilidade de dropout para todas as camadas totalmente conectadas nos embeddings, no encoder e no pooler. - embd_pdrop (
Union[float, int], opcional, padrão0.1) — A taxa de dropout para os embeddings. - attn_pdrop (
Union[float, int], opcional, padrão0.1) — A taxa de dropout para as probabilidades de atenção. - layer_norm_epsilon (
float, opcional, padrão1e-05) — O epsilon usado pelas camadas de normalização de camada. - initializer_range (
float, opcional, padrão0.02) — O desvio padrão do truncated_normal_initializer para inicializar todas as matrizes de pesos. - scale_attn_weights (
bool, opcional, padrãoTrue) — Escala os pesos de atenção dividindo por sqrt(hidden_size). - use_cache (
bool, opcional, padrãoTrue) — Se o modelo deve ou não retornar as últimas chaves/valores de atenção (não usado por todos os modelos). Relevante apenas seconfig.is_decoder=Trueou quando o modelo for um modelo generativo somente decodificador. - bos_token_id (
int, opcional, padrão50256) — ID do token usado para o início do fluxo no vocabulário. - eos_token_id (
Union[int, list[int]], opcional, padrão50256) — ID do token usado para o fim do fluxo no vocabulário. - scale_attn_by_inverse_layer_idx (
bool, opcional, padrãoFalse) — Se as pesos de atenção devem ser escalados adicionalmente por1 / layer_idx + 1. - reorder_and_upcast_attn (
bool, opcional, padrãoFalse) — Se deve escalar as chaves (K) antes de calcular a atenção (produto escalar) e fazer o upcast do produto escalar/softmax da atenção para float() durante o treinamento com precisão mista. - add_cross_attention (
bool, opcional, padrãoFalse) — Se camadas de atenção cruzada devem ser adicionadas ao modelo.
Esta é a classe de configuração para armazenar a configuração de um DecisionTransformerModel. Ela é usada para instanciar um modelo Decision Transformer de acordo com os argumentos especificados, definindo a arquitetura do modelo. Instanciar uma configuração com os padrões resultará em uma configuração semelhante à do
Os objetos de configuração herdam de PreTrainedConfig e podem ser usados para controlar as saídas do modelo. Consulte a documentação de PreTrainedConfig para mais informações.
Exemplo:
>>> 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
classe transformers.DecisionTransformerModel
< source >( config: DecisionTransformerConfig )
Parâmetros
- config (DecisionTransformerConfig) — Classe de configuração do modelo com todos os parâmetros do modelo. A inicialização com um arquivo de configuração não carrega os pesos associados ao modelo, apenas a configuração. Consulte o método from_pretrained() para carregar os pesos do modelo.
O Modelo Decision Transformer
Este modelo herda de PreTrainedModel. Consulte a documentação da classe pai para os métodos genéricos que a biblioteca implementa para todos os seus modelos (como download ou salvamento, redimensionamento dos embeddings de entrada, poda de cabeças, etc.)
Este modelo também é uma subclasse de torch.nn.Module do PyTorch. Use-o como um Módulo PyTorch regular e consulte a documentação do PyTorch para todos os assuntos relacionados ao uso geral e ao comportamento.
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)
Parâmetros
- states (
torch.Tensorde forma(batch_size, episode_length, state_dim)) — Os estados para cada passo na trajetória - actions (
torch.Tensorde forma(batch_size, episode_length, act_dim)) — As ações tomadas pela política “especialista” para o estado atual, que são mascaradas para a previsão auto regressiva - rewards (
torch.Tensorde forma(batch_size, episode_length, 1)) — As recompensas para cada estado, ação - returns_to_go (
torch.Tensorde forma(batch_size, episode_length, 1)) — Os retornos para cada estado na trajetória - timesteps (
torch.LongTensorde forma(batch_size, episode_length)) — O timestep para cada passo na trajetória - attention_mask (
torch.Tensorde forma(batch_size, sequence_length), opcional) — Máscara para evitar a execução de atenção nos índices de tokens de preenchimento. Valores de máscara selecionados em[0, 1]:- 1 para tokens que não estão mascarados,
- 0 para tokens que estão mascarados.
- output_hidden_states (
bool, opcional) — Indica se as hidden states de todas as camadas devem ser retornadas. Consultehidden_statesem tensors retornados para mais detalhes. - output_attentions (
bool, opcional) — Indica se os tensores de atenção de todas as camadas de atenção devem ser retornados. Consulteattentionsnos tensores retornados para mais detalhes. - return_dict (
bool, opcional) — Indica se deve retornar um ModelOutput em vez de uma tupla simples.
Retorna
DecisionTransformerOutput ou tuple(torch.Tensor)
Um DecisionTransformerOutput ou uma tupla de
torch.Tensor (se return_dict=False for passado ou quando config.return_dict=False) contendo vários
elementos dependendo da configuração (DecisionTransformerConfig) e das entradas.
O método forward do DecisionTransformerModel substitui o método especial __call__.
Embora a receita para a passagem direta precise ser definida dentro desta função, deve-se chamar a instância de
Moduleem seguida, em vez desta, pois a primeira cuida da execução das etapas de pré e pós-processamento, enquanto a segunda as ignora silenciosamente.
state_preds (
torch.Tensorde forma(batch_size, sequence_length, state_dim)) — Previsões do estado do ambienteaction_preds (
torch.Tensorde forma(batch_size, sequence_length, action_dim)) — Previsões de ação do modeloreturn_preds (
torch.Tensorde forma(batch_size, sequence_length, 1)) — Retornos previstos para cada estadohidden_states (
torch.Tensor, opcional, retornado quandooutput_hidden_states=Trueé passado ou quandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(um para a saída dos embeddings, se o modelo tiver uma camada de embedding, + um para a saída de cada camada) de forma(batch_size, sequence_length, hidden_size).Estados ocultos do modelo na saída de cada camada, além das saídas opcionais do embedding inicial.
attentions (
torch.Tensor, opcional, retornado quandooutput_attentions=Trueé passado ou quandoconfig.output_attentions=True) — Tupla detorch.Tensor(um para cada camada) com forma(batch_size, num_heads, sequence_length, sequence_length).Pesos de atenção após o softmax de atenção, usados para calcular a média ponderada nos cabeçalhos de autoatenção.
last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Sequência de estados ocultos na saída da última camada do modelo.
Exemplos:
>>> 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,
... )