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,
... )