Transformers documentation
Decision Transformer
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
< source >( 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ởiinput_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ếuconfig.is_decoder=Truehoặ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ới1 / layer_idx + 1hay 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.configDecisionTransformerGPT2Model
forward
< source >( 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
< source >( 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
< source >( 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.Tensorcó 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.Tensorcó 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.Tensorcó 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.Tensorcó 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.LongTensorcó hình dạng(batch_size, episode_length)) — Bước thời gian cho mỗi bước trong quỹ đạo - attention_mask (
torch.Tensorcó 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.
- 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. Xemhidden_statestrong 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. Xemattentionstrong 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
Modulesau đó thay vì gọi hàm này, vì instanceModulesẽ đả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.Tensorcó hình dạng(batch_size, sequence_length, state_dim)) — Dự đoán trạng thái môi trườngaction_preds (
torch.Tensorcó hình dạng(batch_size, sequence_length, action_dim)) — Dự đoán hành động của mô hìnhreturn_preds (
torch.Tensorcó hình dạng(batch_size, sequence_length, 1)) — Lợi nhuận dự đoán cho mỗi trạng tháihidden_states (
torch.Tensor, tuỳ chọn, được trả về khioutput_hidden_states=Trueđược truyền vào hoặc khiconfig.output_hidden_states=True) — Tuple củatorch.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ề khioutput_attentions=Trueđược truyền vào hoặc khiconfig.output_attentions=True) — Tuple củatorch.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.Tensorcó 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,
... )