Transformers documentation

Decision Transformer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Mô hình này được công bố trên HF papers vào ngày 02-06-2021 và được đóng góp cho Hugging Face Transformers vào ngày 23-03-2022.

Decision Transformer

Tổng quan

Mô hình Decision Transformer được đề xuất trong Decision Transformer: Reinforcement Learning via Sequence Modeling
bởi Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch.

Tóm tắt từ bài báo như sau:

Chúng tôi giới thiệu một khung làm việc (framework) trừu tượng hóa Học tăng cường (Reinforcement Learning - RL) như một bài toán mô hình hóa chuỗi (sequence modeling). Điều này cho phép chúng ta khai thác sự đơn giản và khả năng mở rộng của kiến trúc Transformer, cùng với các tiến bộ liên quan trong mô hình hóa ngôn ngữ như GPT-x và BERT. Cụ thể, chúng tôi trình bày Decision Transformer, một kiến trúc coi bài toán RL như một bài toán mô hình hóa chuỗi có điều kiện (conditional sequence modeling). Khác với các phương pháp tiếp cận RL trước đây dựa vào việc khớp các hàm giá trị (value functions) hoặc tính toán gradient của chính sách (policy gradients), Decision Transformer đơn giản là đưa ra các hành động tối ưu bằng cách sử dụng một Transformer có mặt nạ nhân quả (causally masked). Bằng cách đặt điều kiện cho một mô hình tự hồi quy (autoregressive model) dựa trên lợi nhuận (return) mong muốn (thưởng), các trạng thái trong quá khứ và các hành động, mô hình Decision Transformer của chúng tôi có thể tạo ra các hành động trong tương lai đạt được lợi nhuận mong muốn. Mặc dù đơn giản, Decision Transformer đạt hoặc vượt hiệu suất của các đường cơ sở (baselines) RL ngoại tuyến (offline) không dựa trên mô hình (model-free) tiên tiến nhất trên các tác vụ Atari, OpenAI Gym và Key-to-Door.

Phiên bản này của mô hình dành cho các tác vụ mà trạng thái là một vector.

Mô hình này được đóng góp bởi edbeeching. Mã gốc có thể được tìm thấy tại đây.

DecisionTransformerConfig

lớp transformers.DecisionTransformerConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonestate_dim: int = 17act_dim: int = 4hidden_size: int = 128max_ep_len: int = 4096action_tanh: bool = Truevocab_size: int = 1n_positions: int = 1024n_layer: int = 3n_head: int = 1n_inner: int | None = Noneactivation_function: str = 'relu'resid_pdrop: float | int = 0.1embd_pdrop: float | int = 0.1attn_pdrop: float | int = 0.1layer_norm_epsilon: float = 1e-05initializer_range: float = 0.02scale_attn_weights: bool = Trueuse_cache: bool = Truebos_token_id: int | None = 50256eos_token_id: int | list[int] | None = 50256scale_attn_by_inverse_layer_idx: bool = Falsereorder_and_upcast_attn: bool = Falseadd_cross_attention: bool = False )

Tham số

  • state_dim (int, tuỳ chọn, mặc định là 17) — Kích thước trạng thái cho môi trường RL
  • act_dim (int, tuỳ chọn, mặc định là 4) — Kích thước của không gian hành động đầu ra
  • hidden_size (int, tùy chọn, mặc định là 128) — Kích thước của các biểu diễn ẩn.
  • max_ep_len (int, tùy chọn, mặc định là 4096) — Chiều dài tối đa của một tập (episode) trong môi trường
  • action_tanh (bool, tùy chọn, mặc định là True) — Có sử dụng hàm kích hoạt tanh cho dự đoán hành động hay không
  • vocab_size (int, tuỳ chọn, mặc định là 1) — Kích thước từ vựng của mô hình. Xác định số lượng token khác nhau có thể được biểu diễn bởi input_ids.
  • n_positions (int, tùy chọn, mặc định là 1024) — Chiều dài chuỗi tối đa mà mô hình này có thể được sử dụng.
  • n_layer (int, tùy chọn, mặc định là 3) — Số lượng lớp ẩn trong bộ giải mã Transformer.
  • n_head (int, tùy chọn, mặc định là 1) — Số lượng đầu chú ý cho mỗi lớp chú ý trong bộ giải mã Transformer.
  • n_inner (int, tùy chọn) — Kích thước của các biểu diễn MLP.
  • activation_function (str, tùy chọn, mặc định là relu) — Hàm kích hoạt phi tuyến (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ, "gelu", "relu", "silu", v.v.
  • resid_pdrop (Union[float, int], tùy chọn, mặc định là 0.1) — Xác suất dropout cho tất cả các lớp fully connected trong embeddings, encoder và pooler.
  • embd_pdrop (Union[float, int], tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho các embedding.
  • attn_pdrop (Union[float, int], tùy chọn, mặc định là 0.1) — Tỷ lệ dropout cho các xác suất chú ý.
  • layer_norm_epsilon (float, tùy chọn, mặc định là 1e-05) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization).
  • initializer_range (float, tùy chọn, mặc định là 0.02) — Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.
  • scale_attn_weights (bool, tùy chọn, mặc định là True) — Thang đo trọng số chú ý bằng cách chia cho sqrt(hidden_size).
  • use_cache (bool, tùy chọn, mặc định là True) — Xác định xem mô hình có nên trả về các chú ý key/values cuối cùng hay không (không được sử dụng bởi tất cả các mô hình). Chỉ liên quan nếu config.is_decoder=True hoặc khi mô hình là mô hình sinh chỉ có decoder.
  • bos_token_id (int, tùy chọn, mặc định là 50256) — Token id được sử dụng cho beginning-of-stream trong bảng từ vựng.
  • eos_token_id (Union[int, list[int]], tùy chọn, mặc định là 50256) — Token id được sử dụng cho end-of-stream trong bảng từ vựng.
  • scale_attn_by_inverse_layer_idx (bool, tùy chọn, mặc định là False) — Có nhân thêm trọng số attention với 1 / layer_idx + 1 hay không.
  • reorder_and_upcast_attn (bool, tùy chọn, mặc định là False) — Có nên nhân các key (K) trước khi tính attention (tích vô hướng) và nâng cấp tích vô hướng/softmax của attention lên float() khi huấn luyện với độ chính xác hỗn hợp hay không.
  • add_cross_attention (bool, tùy chọn, mặc định là False) — Xác định xem có nên thêm các lớp cross-attention vào mô hình hay không.

Đây là lớp cấu hình để lưu trữ cấu hình của DecisionTransformerModel. Nó được sử dụng để khởi tạo một mô hình Decision Transformer theo các đối số được chỉ định, xác định kiến trúc của mô hình. Việc khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của

Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.

Ví dụ:

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

lớp transformers.DecisionTransformerGPT2Model

< >

( config: DecisionTransformerConfig )

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Nonetoken_type_ids: typing.Optional[torch.LongTensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneencoder_hidden_states: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> )

DecisionTransformerModel

lớp transformers.DecisionTransformerModel

< >

( config: DecisionTransformerConfig )

Tham số

  • config (DecisionTransformerConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.

Mô hình Decision Transformer

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

forward

< >

( states: typing.Optional[torch.Tensor] = Noneactions: typing.Optional[torch.Tensor] = Nonerewards: typing.Optional[torch.Tensor] = Nonereturns_to_go: typing.Optional[torch.Tensor] = Nonetimesteps: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Noneoutput_attentions: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DecisionTransformerOutput or tuple(torch.Tensor)

Tham số

  • states (torch.Tensor có hình dạng (batch_size, episode_length, state_dim)) — Các trạng thái cho từng bước trong quỹ đạo
  • actions (torch.Tensor có hình dạng (batch_size, episode_length, act_dim)) — Các hành động được thực hiện bởi chính sách “chuyên gia” cho trạng thái hiện tại, các hành động này được che (masked) cho dự đoán tự hồi quy
  • rewards (torch.Tensor có hình dạng (batch_size, episode_length, 1)) — Phần thưởng cho mỗi trạng thái, hành động
  • returns_to_go (torch.Tensor có hình dạng (batch_size, episode_length, 1)) — Các giá trị trả về cho mỗi trạng thái trong quỹ đạo
  • timesteps (torch.LongTensor có hình dạng (batch_size, episode_length)) — Bước thời gian cho mỗi bước trong quỹ đạo
  • attention_mask (torch.Tensor có hình dạng (batch_size, sequence_length), tùy chọn) — Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong [0, 1]:
    • 1 cho các token không bị che,
    • 0 cho các token bị che.

    Mặt nạ chú ý là gì?

  • output_hidden_states (bool, tùy chọn) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xem hidden_states trong phần tensor trả về để biết thêm chi tiết.
  • output_attentions (bool, tùy chọn) — Có trả về các tensor attentions của tất cả các lớp attention hay không. Xem attentions trong phần tensor được trả về để biết thêm chi tiết.
  • return_dict (bool, tùy chọn) — Có nên trả về một ModelOutput thay vì một tuple thông thường hay không.

Trả về

DecisionTransformerOutput hoặc tuple(torch.Tensor)

Một DecisionTransformerOutput hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (DecisionTransformerConfig) và đầu vào.

Phương thức forward của DecisionTransformerModel ghi đè lên phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • state_preds (torch.Tensor có hình dạng (batch_size, sequence_length, state_dim)) — Dự đoán trạng thái môi trường

  • action_preds (torch.Tensor có hình dạng (batch_size, sequence_length, action_dim)) — Dự đoán hành động của mô hình

  • return_preds (torch.Tensor có hình dạng (batch_size, sequence_length, 1)) — Lợi nhuận dự đoán cho mỗi trạng thái

  • hidden_states (torch.Tensor, tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (torch.Tensor, tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size), tùy chọn) — Chuỗi các trạng thái ẩn (hidden-states) tại đầu ra của lớp cuối cùng của mô hình.

Ví dụ:

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