Transformers 文件

決策 Transformer

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

決策 Transformer

PyTorch

概述

決策 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

class transformers.DecisionTransformerGPT2Model

< >

( config )

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.DecisionTransformerOutputtuple(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.DecisionTransformerOutputtuple(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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (torch.FloatTensor可選,在傳遞 output_attentions=Trueconfig.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,
...     )
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.