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