Transformers 文档
轨迹Transformer
并获得增强的文档体验
开始使用
轨迹Transformer
该模型仅处于维护模式,因此我们不会接受任何更改其代码的新 PR。
如果在运行此模型时遇到任何问题,请重新安装支持此模型的最后一个版本:v4.30.0。您可以通过运行以下命令进行安装:`pip install -U transformers==4.30.0`。
概述
轨迹Transformer模型由Michael Janner、Qiyang Li、Sergey Levine在离线强化学习作为一个大的序列建模问题中提出。
论文摘要如下:
强化学习(RL)通常关注估计平稳策略或单步模型,利用马尔可夫属性在时间上分解问题。然而,我们也可以将RL视为一个通用的序列建模问题,目标是生成一个导致高奖励序列的动作序列。从这个角度来看,我们不禁思考,在其他领域(例如自然语言处理)中表现良好的高容量序列预测模型是否也能为RL问题提供有效的解决方案。为此,我们探索如何利用序列建模工具解决RL问题,使用Transformer架构对轨迹分布进行建模,并将波束搜索重新用作规划算法。将RL构建为序列建模问题简化了一系列设计决策,使我们能够省去离线RL算法中常见的许多组件。我们展示了这种方法在长时程动力学预测、模仿学习、目标条件RL和离线RL方面的灵活性。此外,我们还表明,这种方法可以与现有无模型算法相结合,在稀疏奖励、长时程任务中产生最先进的规划器。
该模型由CarlCochet贡献。原始代码可在此处找到。
用法提示
此Transformer用于深度强化学习。要使用它,您需要从所有先前的时间步的动作、状态和奖励中创建序列。此模型将所有这些元素一起视为一个大序列(轨迹)。
TrajectoryTransformerConfig
class transformers.TrajectoryTransformerConfig
< source >( vocab_size = 100 action_weight = 5 reward_weight = 1 value_weight = 1 block_size = 249 action_dim = 6 observation_dim = 17 transition_dim = 25 n_layer = 4 n_head = 4 n_embd = 128 embd_pdrop = 0.1 attn_pdrop = 0.1 resid_pdrop = 0.1 learning_rate = 0.0006 max_position_embeddings = 512 initializer_range = 0.02 layer_norm_eps = 1e-12 kaiming_initializer_range = 1 use_cache = True pad_token_id = 1 bos_token_id = 50256 eos_token_id = 50256 **kwargs )
参数
- vocab_size (
int
, optional, 默认为100) — TrajectoryTransformer模型的词汇量大小。定义了调用TrajectoryTransformerModel时传递的trajectories
可以表示的不同token的数量。 - action_weight (
int
, optional, 默认为5) — 损失函数中动作的权重 - reward_weight (
int
, optional, 默认为1) — 损失函数中奖励的权重 - value_weight (
int
, optional, 默认为1) — 损失函数中值的权重 - block_size (
int
, optional, 默认为249) — 轨迹Transformer中块的大小。 - action_dim (
int
, optional, 默认为6) — 动作空间的维度。 - observation_dim (
int
, optional, 默认为17) — 观测空间的维度。 - transition_dim (
int
, optional, 默认为25) — 转换空间的维度。 - n_layer (
int
, optional, 默认为4) — Transformer编码器中的隐藏层数量。 - n_head (
int
, optional, 默认为4) — Transformer编码器中每个注意力层的注意力头数量。 - n_embd (
int
, optional, 默认为128) — 嵌入和隐藏状态的维度。 - resid_pdrop (
float
, optional, 默认为0.1) — 嵌入、编码器和池化器中所有全连接层的Dropout概率。 - embd_pdrop (
int
, optional, 默认为0.1) — 嵌入的Dropout比率。 - attn_pdrop (
float
, optional, 默认为0.1) — 注意力层的Dropout比率。 - hidden_act (
str
或function
, optional, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,支持"gelu"
,"relu"
,"selu"
和"gelu_new"
。 - max_position_embeddings (
int
, optional, 默认为512) — 此模型可能使用的最大序列长度。通常为了以防万一设置为较大的值(例如512、1024或2048)。 - initializer_range (
float
, optional, 默认为0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, optional, 默认为1e-12) — 层归一化层使用的epsilon。 - kaiming_initializer_range (
float
, optional, 默认为1) — 用于EinLinear层中kaiming初始化器整流器负斜率的缩放系数。 - use_cache (
bool
, optional, 默认为True
) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True
时相关。 - 示例 —
这是一个配置类,用于存储TrajectoryTransformerModel的配置。它用于根据指定的参数实例化TrajectoryTransformer模型,定义模型架构。使用默认值实例化配置将生成与TrajectoryTransformer CarlCochet/trajectory-transformer-halfcheetah-medium-v2架构类似的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。有关更多信息,请参阅PretrainedConfig的文档。
>>> from transformers import TrajectoryTransformerConfig, TrajectoryTransformerModel
>>> # Initializing a TrajectoryTransformer CarlCochet/trajectory-transformer-halfcheetah-medium-v2 style configuration
>>> configuration = TrajectoryTransformerConfig()
>>> # Initializing a model (with random weights) from the CarlCochet/trajectory-transformer-halfcheetah-medium-v2 style configuration
>>> model = TrajectoryTransformerModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
TrajectoryTransformerModel
class transformers.TrajectoryTransformerModel
< source >( config )
参数
- config (TrajectoryTransformerConfig) — 模型配置类,包含模型的所有参数。用配置文件初始化并不会加载与模型相关的权重,只加载配置。请查看from_pretrained()方法来加载模型权重。
裸露的TrajectoryTransformer模型,直接输出原始隐藏状态,没有添加任何特定的头部。这个模型是PyTorch torch.nn.Module的子类。将其作为常规的PyTorch模块使用,并参考PyTorch文档中所有与通用用法和行为相关的事项。
完整的GPT语言模型,上下文大小为`block_size`。
前向传播
< source >( trajectories: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None targets: typing.Optional[torch.FloatTensor] = None 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 ) → transformers.models.deprecated.trajectory_transformer.modeling_trajectory_transformer.TrajectoryTransformerOutput
or tuple(torch.FloatTensor)
参数
- trajectories (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — 一批轨迹,其中轨迹是状态、动作和奖励的序列。 - past_key_values (
tuple[tuple[torch.Tensor]]
,长度为config.n_layers
,可选) — 包含模型计算的预计算隐藏状态(注意力块中的键和值)(请参见下面的past_key_values
输出)。可用于加速顺序解码。已提供过去状态的input_ids
不应作为input_ids
传入,因为它们已被计算。 - targets (
torch.LongTensor
,形状为(batch_size, sequence_length)
,可选) — 用于计算损失的期望目标。 - attention_mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
,可选) — 遮罩,避免对填充token索引执行注意力操作。遮罩值选择在[0, 1]
之间:- 1表示未被遮罩的token,
- 0表示被遮罩的token。
- use_cache (
bool
, optional) — 如果设置为True
,将返回past_key_values
键值状态,可用于加速解码(请参见past_key_values
)。 - output_attentions (
bool
, optional) — 是否返回所有注意力层的注意力张量。更多详细信息请参见返回张量下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的隐藏状态。更多详细信息请参见返回张量下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回ModelOutput而不是普通元组。
返回
transformers.models.deprecated.trajectory_transformer.modeling_trajectory_transformer.TrajectoryTransformerOutput
或 tuple(torch.FloatTensor)
一个transformers.models.deprecated.trajectory_transformer.modeling_trajectory_transformer.TrajectoryTransformerOutput
或一个torch.FloatTensor
的元组(如果传入return_dict=False
或config.return_dict=False
),包含根据配置(TrajectoryTransformerConfig)和输入而定的各种元素。
- loss (
torch.FloatTensor
,形状为(1,)
,可选,当提供labels
时返回) — 语言建模损失。 - logits (形状为
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。 - past_key_values (
tuple[tuple[torch.Tensor]]
, optional, 当传入use_cache=True
或config.use_cache=True
时返回) — 长度为config.n_layers
的元组,包含形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量元组。包含预计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码(请参见past_key_values
输入)。 - hidden_states (
tuple(torch.FloatTensor)
, 可选, 当传入output_hidden_states=True
或config.output_hidden_states=True
时返回) —torch.FloatTensor
的元组(一个用于嵌入输出,一个用于每个层输出),形状为(batch_size, sequence_length, hidden_size)
。模型在每个层输出后的隐藏状态以及初始嵌入输出。 - attentions (
tuple(torch.FloatTensor)
, 可选, 当传入output_attentions=True
或config.output_attentions=True
时返回) —torch.FloatTensor
的元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。GPT2Attentions 在注意力softmax后的权重,用于计算自注意力头中的加权平均值。
TrajectoryTransformerModel的前向方法,覆盖了__call__
特殊方法。
尽管前向传递的实现需要在此函数中定义,但在此之后应调用`Module`实例,而不是此函数本身,因为前者负责运行预处理和后处理步骤,而后者会默默忽略它们。
示例
>>> from transformers import TrajectoryTransformerModel
>>> import torch
>>> model = TrajectoryTransformerModel.from_pretrained(
... "CarlCochet/trajectory-transformer-halfcheetah-medium-v2"
... )
>>> model.to(device)
>>> model.eval()
>>> observations_dim, action_dim, batch_size = 17, 6, 256
>>> seq_length = observations_dim + action_dim + 1
>>> trajectories = torch.LongTensor([np.random.permutation(self.seq_length) for _ in range(batch_size)]).to(
... device
... )
>>> targets = torch.LongTensor([np.random.permutation(self.seq_length) for _ in range(batch_size)]).to(device)
>>> outputs = model(
... trajectories,
... targets=targets,
... use_cache=True,
... output_attentions=True,
... output_hidden_states=True,
... return_dict=True,
... )