Transformers 文档

决策 Transformer

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

决策 Transformer

PyTorch

概述

决策 Transformer 模型在论文 决策 Transformer:通过序列建模进行强化学习 中被提出。
作者是 Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch。

论文摘要如下:

我们引入了一个将强化学习(RL)抽象为序列建模问题的框架。这使我们能够利用 Transformer 架构的简单性和可扩展性,以及 GPT-x 和 BERT 等语言建模的相关进展。具体来说,我们提出了决策 Transformer,这是一种将 RL 问题转化为条件序列建模的架构。与以往拟合价值函数或计算策略梯度的 RL 方法不同,决策 Transformer 仅通过利用一个因果掩码的 Transformer 来输出最优动作。通过将自回归模型以期望的回报(奖励)、过去的状态和动作为条件,我们的决策 Transformer 模型可以生成能够实现期望回报的未来动作。尽管其简单,决策 Transformer 在 Atari、OpenAI Gym 和 Key-to-Door 任务上达到或超过了最先进的无模型离线 RL 基线的性能。

此版本的模型适用于状态为向量的任务。

该模型由 edbeeching 贡献。原始代码可以在这里找到。

DecisionTransformerConfig

class transformers.DecisionTransformerConfig

< >

( state_dim = 17 act_dim = 4 hidden_size = 128 max_ep_len = 4096 action_tanh = True vocab_size = 1 n_positions = 1024 n_layer = 3 n_head = 1 n_inner = None activation_function = 'relu' resid_pdrop = 0.1 embd_pdrop = 0.1 attn_pdrop = 0.1 layer_norm_epsilon = 1e-05 initializer_range = 0.02 scale_attn_weights = True use_cache = True bos_token_id = 50256 eos_token_id = 50256 scale_attn_by_inverse_layer_idx = False reorder_and_upcast_attn = False **kwargs )

参数

  • state_dim (int可选,默认为 17) — RL 环境的状态大小。
  • act_dim (int可选,默认为 4) — 输出动作空间的大小。
  • hidden_size (int可选,默认为 128) — 隐藏层的大小。
  • max_ep_len (int可选,默认为 4096) — 环境中一个 episode 的最大长度。
  • action_tanh (bool可选,默认为 True) — 是否在动作预测上使用 tanh 激活函数。
  • vocab_size (int可选,默认为 50257) — GPT-2 模型的词汇表大小。定义了调用 DecisionTransformerModel 时传入的 inputs_ids 可以表示的不同词元的数量。
  • n_positions (int可选,默认为 1024) — 此模型可能使用的最大序列长度。通常将其设置为较大的值以备不时之需(例如,512、1024 或 2048)。
  • n_layer (int可选,默认为 3) — Transformer 编码器中的隐藏层数。
  • n_head (int可选,默认为 1) — Transformer 编码器中每个注意力层的注意力头数。
  • n_inner (int可选) — 内部前馈层的维度。如果未设置,将默认为 4 倍的 n_embd
  • activation_function (str可选,默认为 "gelu") — 激活函数,可选列表为 ["relu", "silu", "gelu", "tanh", "gelu_new"]
  • resid_pdrop (float可选,默认为 0.1) — 嵌入层、编码器和池化层中所有全连接层的丢弃概率。
  • embd_pdrop (int可选,默认为 0.1) — 嵌入层的丢弃率。
  • attn_pdrop (float可选,默认为 0.1) — 注意力层的丢弃率。
  • layer_norm_epsilon (float可选,默认为 1e-5) — 层归一化层中使用的 epsilon 值。
  • initializer_range (float可选,默认为 0.02) — 用于初始化所有权重矩阵的截断正态分布初始化器的标准差。
  • scale_attn_weights (bool可选,默认为 True) — 是否通过除以 sqrt(hidden_size) 来缩放注意力权重。
  • use_cache (bool可选,默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。
  • scale_attn_by_inverse_layer_idx (bool可选,默认为 False) — 是否通过 1 / layer_idx + 1 额外缩放注意力权重。
  • reorder_and_upcast_attn (bool可选,默认为 False) — 在计算注意力(点积)之前是否缩放键(K),并在使用混合精度训练时将注意力点积/softmax 上转型为 float()。

这是用于存储 DecisionTransformerModel 配置的配置类。它用于根据指定的参数实例化一个决策 Transformer 模型,定义模型架构。使用默认值实例化配置将产生与标准 DecisionTransformer 架构相似的配置。许多配置选项用于实例化作为架构一部分的 GPT2 模型。

配置对象继承自 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

class transformers.DecisionTransformerGPT2Model

< >

( config )

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None cache_position: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None token_type_ids: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_attention_mask: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None )

DecisionTransformerModel

class transformers.DecisionTransformerModel

< >

( config )

参数

  • config (DecisionTransformerModel) — 模型配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。请查看 from_pretrained() 方法来加载模型权重。

决策 Transformer 模型

该模型继承自 PreTrainedModel。请查阅超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

该模型也是一个 PyTorch torch.nn.Module 子类。可以像常规 PyTorch 模块一样使用它,并参考 PyTorch 文档了解所有与常规用法和行为相关的事项。

forward

< >

( states: typing.Optional[torch.FloatTensor] = None actions: typing.Optional[torch.FloatTensor] = None rewards: typing.Optional[torch.FloatTensor] = None returns_to_go: typing.Optional[torch.FloatTensor] = None timesteps: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.decision_transformer.modeling_decision_transformer.DecisionTransformerOutputtuple(torch.FloatTensor)

参数

  • states (形状为 (batch_size, episode_length, state_dim)torch.FloatTensor) — 轨迹中每一步的状态。
  • actions (形状为 (batch_size, episode_length, act_dim)torch.FloatTensor) — “专家”策略为当前状态采取的动作,这些动作被掩蔽以进行自回归预测。
  • rewards (形状为 (batch_size, episode_length, 1)torch.FloatTensor) — 每个状态和动作的奖励。
  • returns_to_go (形状为 (batch_size, episode_length, 1)torch.FloatTensor) — 轨迹中每个状态的预期回报。
  • timesteps (形状为 (batch_size, episode_length)torch.LongTensor) — 轨迹中每一步的时间步。
  • attention_mask (形状为 (batch_size, sequence_length)torch.FloatTensor可选) — 用于避免在填充词元索引上执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示词元未被掩蔽
    • 0 表示词元被掩蔽

    什么是注意力掩码?

  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的 hidden_states
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的 attentions
  • return_dict (bool可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

transformers.models.decision_transformer.modeling_decision_transformer.DecisionTransformerOutputtuple(torch.FloatTensor)

一个 transformers.models.decision_transformer.modeling_decision_transformer.DecisionTransformerOutput 或一个 torch.FloatTensor 的元组(如果传递 return_dict=False 或当 config.return_dict=False 时),根据配置(DecisionTransformerConfig)和输入,包含各种元素。

  • state_preds (形状为 (batch_size, sequence_length, state_dim)torch.FloatTensor) — 环境状态预测

  • action_preds (形状为 (batch_size, sequence_length, action_dim)torch.FloatTensor) — 模型动作预测

  • return_preds (形状为 (batch_size, sequence_length, 1)torch.FloatTensor) — 每个状态的预测回报

  • hidden_states (torch.FloatTensor可选,在传递 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (torch.FloatTensor可选,在传递 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

  • last_hidden_state (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选,默认为 None) — 模型最后一层输出的隐藏状态序列。

DecisionTransformerModel 的 forward 方法,重写了 __call__ 特殊方法。

虽然前向传播的配方需要在此函数内定义,但之后应调用 Module 实例而不是此函数,因为前者会处理运行前处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> 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,
...     )
< > 在 GitHub 上更新