Transformers 文档

轨迹 Transformer

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

轨迹 Transformer

PyTorch

此模型仅处于维护模式,因此我们不接受任何更改其代码的新 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

< >

( 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, 可选, 默认为 100) — 轨迹 Transformer 模型的词汇量大小。定义了调用 TrajectoryTransformerModel 时传递的 trajectories 可以表示的不同标记的数量
  • action_weight (int, 可选, 默认为 5) — 损失函数中动作的权重
  • reward_weight (int, 可选, 默认为 1) — 损失函数中奖励的权重
  • value_weight (int, 可选, 默认为 1) — 损失函数中值的权重
  • block_size (int, 可选, 默认为 249) — 轨迹 Transformer 中块的大小。
  • action_dim (int, 可选, 默认为 6) — 动作空间的维度。
  • observation_dim (int, 可选, 默认为 17) — 观察空间的维度。
  • transition_dim (int, 可选, 默认为 25) — 转换空间的维度。
  • n_layer (int, 可选, 默认为 4) — Transformer 编码器中隐藏层的数量。
  • n_head (int, 可选, 默认为 4) — Transformer 编码器中每个注意力层的注意力头数。
  • n_embd (int, 可选, 默认为 128) — 嵌入和隐藏状态的维度。
  • resid_pdrop (float, 可选, 默认为 0.1) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。
  • embd_pdrop (int, 可选, 默认为 0.1) — 嵌入层的 dropout 比率。
  • attn_pdrop (float, 可选, 默认为 0.1) — 注意力层的 dropout 比率。
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持 "gelu""relu""selu""gelu_new"
  • max_position_embeddings (int, 可选, 默认为 512) — 此模型可能使用的最大序列长度。通常设置为较大的值以防万一(例如,512 或 1024 或 2048)。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • layer_norm_eps (float, 可选, 默认为 1e-12) — 层归一化层使用的 epsilon 值。
  • kaiming_initializer_range (`float`, 可选, 默认为 1) — 用于 EinLinear 层的 kaiming 初始化器整流器的负斜率的系数缩放。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的键/值注意力 (并非所有模型都使用)。 仅当 config.is_decoder=True 时相关。
  • Example — 例子

这是用于存储 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

< >

( config )

参数

  • config (TrajectoryTransformerConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,而仅加载配置。 查看 from_pretrained() 方法以加载模型权重。

裸 TrajectoryTransformer 模型 transformer 输出原始隐藏状态,顶部没有任何特定的 head。 此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解与常规用法和行为相关的所有事项。

完整的 GPT 语言模型,上下文大小为 block_size

forward

< >

( trajectories: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[typing.Tuple[typing.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.TrajectoryTransformerOutputtuple(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), 可选) — 用于避免在 padding 标记索引上执行注意力的掩码。 在 [0, 1] 中选择的掩码值:

    • 1 表示未被掩码的标记,
    • 0 表示已被掩码的标记。

    什么是注意力掩码?

  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,并且可以用于加速解码 (请参阅 past_key_values)。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

Returns

transformers.models.deprecated.trajectory_transformer.modeling_trajectory_transformer.TrajectoryTransformerOutputtuple(torch.FloatTensor)

一个 transformers.models.deprecated.trajectory_transformer.modeling_trajectory_transformer.TrajectoryTransformerOutputtorch.FloatTensor 元组(如果传递 return_dict=Falseconfig.return_dict=False 时),包含取决于配置 (TrajectoryTransformerConfig) 和输入的各种元素。

  • loss (torch.FloatTensor, 形状为 (1,), 可选, 当提供 labels 时返回) — 语言建模损失。
  • logits (torch.FloatTensor, 形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模 head 的预测分数 (SoftMax 之前每个词汇标记的分数)。
  • past_key_values (Tuple[Tuple[torch.Tensor]], 可选, 当传递 use_cache=Trueconfig.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=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组(embeddings 输出的输出一个,每层输出一个),形状为 (batch_size, sequence_length, hidden_size)。 模型在每一层输出端的隐藏状态,加上初始 embedding 输出。
  • attentions (tuple(torch.FloatTensor), 可选, 当传递 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。 注意力 softmax 之后的 GPT2Attentions 权重,用于计算自注意力头中的加权平均值。

TrajectoryTransformerModel forward 方法,覆盖了 __call__ 特殊方法。

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

Examples

>>> 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,
... )
< > Update on GitHub