Transformers 文档
决策 Transformer
并获得增强的文档体验
开始使用
决策 Transformer
概述
决策 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
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.DecisionTransformerOutput
或 tuple(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.DecisionTransformerOutput
或 tuple(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=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
-
attentions (
torch.FloatTensor
,可选,在传递output_attentions=True
或config.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,
... )