Transformers documentation
Decision Transformer
Model ini dipublikasikan di HF papers pada 2021-06-02 dan disumbangkan ke Hugging Face Transformers pada 2022-03-23.
Decision Transformer
Ikhtisar
Model Decision Transformer diusulkan dalam Decision Transformer: Reinforcement Learning via Sequence Modeling
oleh Lili Chen, Kevin Lu, Aravind Rajeswaran, Kimin Lee, Aditya Grover, Michael Laskin, Pieter Abbeel, Aravind Srinivas, Igor Mordatch.
Abstrak dari makalah tersebut adalah sebagai berikut:
Kami memperkenalkan sebuah kerangka kerja yang mengabstraksi Reinforcement Learning (RL) sebagai masalah pemodelan sekuens. Hal ini memungkinkan kami untuk memanfaatkan kesederhanaan dan skalabilitas arsitektur Transformer, serta kemajuan terkait dalam pemodelan bahasa seperti GPT-x dan BERT. Secara khusus, kami menyajikan Decision Transformer, sebuah arsitektur yang memandang masalah RL sebagai pemodelan sekuens bersyarat. Berbeda dengan pendekatan RL sebelumnya yang menyesuaikan fungsi nilai atau menghitung gradien kebijakan, Decision Transformer secara sederhana mengeluarkan aksi optimal dengan memanfaatkan Transformer yang diberi masker kausal. Dengan mengondisikan model autoregresif pada return (reward) yang diinginkan, keadaan masa lalu, dan aksi, model Decision Transformer kami dapat menghasilkan aksi masa depan yang mencapai return yang diinginkan. Meskipun sederhana, Decision Transformer menyamai atau melampaui kinerja baseline offline RL model-free terkini pada tugas-tugas Atari, OpenAI Gym, dan Key-to-Door.
Versi model ini ditujukan untuk tugas di mana state berupa vektor.
Model ini disumbangkan oleh edbeeching. Kode aslinya dapat ditemukan di sini.
DecisionTransformerConfig
kelas 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 )
Parameter
- state_dim (
int, opsional, default 17) — Ukuran state untuk lingkungan RL - act_dim (
int, opsional, defaultnya 4) — Ukuran ruang aksi output - hidden_size (
int, opsional, default128) — Dimensi dari representasi tersembunyi. - max_ep_len (
int, opsional, default 4096) — Panjang maksimum episode di lingkungan - action_tanh (
bool, opsional, default True) — Apakah akan menggunakan aktivasi tanh pada prediksi aksi - vocab_size (
int, opsional, default1) — Ukuran kosakata model. Menentukan jumlah token berbeda yang dapat direpresentasikan olehinput_ids. - n_positions (
int, opsional, default1024) — Panjang maksimum urutan yang mungkin digunakan dengan model ini. - n_layer (
int, opsional, default3) — Jumlah lapisan tersembunyi dalam decoder Transformer. - n_head (
int, opsional, default1) — Jumlah kepala perhatian untuk setiap lapisan perhatian dalam decoder Transformer. - n_inner (
int, opsional) — Dimensi dari representasi MLP. - activation_function (
str, opsional, defaultnyarelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - resid_pdrop (
Union[float, int], opsional, default0.1) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler. - embd_pdrop (
Union[float, int], opsional, default0.1) — Rasio dropout untuk embedding. - attn_pdrop (
Union[float, int], opsional, default0.1) — Rasio dropout untuk probabilitas perhatian. - layer_norm_epsilon (
float, opsional, defaultnya1e-05) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - scale_attn_weights (
bool, opsional, defaultTrue) — Skalakan bobot perhatian dengan membaginya dengan sqrt(hidden_size). - use_cache (
bool, opsional, defaultnyaTrue) — Apakah model harus mengembalikan perhatian kunci/nilai terakhir (tidak digunakan oleh semua model). Hanya relevan jikaconfig.is_decoder=Trueatau ketika model adalah model generatif yang hanya decoder. - bos_token_id (
int, opsional, default50256) — ID token yang digunakan untuk penanda awal aliran (beginning-of-stream) dalam kosakata. - eos_token_id (
Union[int, list[int]], opsional, default50256) — ID token yang digunakan untuk end-of-stream dalam kosakata. - scale_attn_by_inverse_layer_idx (
bool, opsional, defaultFalse) — Apakah bobot perhatian akan diskalakan tambahan dengan1 / layer_idx + 1. - reorder_and_upcast_attn (
bool, opsional, defaultFalse) — Apakah akan menskalakan kunci (K) sebelum menghitung perhatian (dot-product) dan menaikkan tipe data dot-product/softmax perhatian ke float() saat melatih dengan presisi campuran. - add_cross_attention (
bool, opsional, defaultFalse) — Apakah lapisan cross-attention harus ditambahkan ke model.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari DecisionTransformerModel. Kelas ini digunakan untuk membuat model Decision Transformer sesuai dengan argumen yang ditentukan, yang mendefinisikan arsitektur model. Membuat konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> 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
kelas transformers.DecisionTransformerModel
< source >( config: DecisionTransformerConfig )
Parameter
- config (DecisionTransformerConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model Decision Transformer
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
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)
Parameter
- states (
torch.Tensordengan bentuk(batch_size, episode_length, state_dim)) — State untuk setiap langkah dalam trajektori - actions (
torch.Tensordengan bentuk(batch_size, episode_length, act_dim)) — Aksi yang diambil oleh kebijakan “expert” untuk keadaan saat ini, yang dimasker untuk prediksi auto regressive - rewards (
torch.Tensordengan bentuk(batch_size, episode_length, 1)) — Hadiah untuk setiap keadaan dan aksi - returns_to_go (
torch.Tensordengan bentuk(batch_size, episode_length, 1)) — Return untuk setiap state dalam trajektori - timesteps (
torch.LongTensordengan bentuk(batch_size, episode_length)) — Timestep untuk setiap langkah dalam trajektori - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
- output_hidden_states (
bool, opsional) — Apakah akan mengembalikan hidden states dari semua lapisan. Lihathidden_statesdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - output_attentions (
bool, opsional) — Apakah akan mengembalikan tensor attentions dari semua lapisan attention. Lihatattentionsdi bawah tensor yang dikembalikan untuk detail lebih lanjut. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
DecisionTransformerOutput atau tuple(torch.Tensor)
DecisionTransformerOutput atau tuple dari
torch.Tensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (DecisionTransformerConfig) dan input.
Metode forward dari DecisionTransformerModel menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
state_preds (
torch.Tensordengan bentuk(batch_size, sequence_length, state_dim)) — Prediksi state lingkunganaction_preds (
torch.Tensordengan bentuk(batch_size, sequence_length, action_dim)) — Prediksi aksi modelreturn_preds (
torch.Tensordengan bentuk(batch_size, sequence_length, 1)) — Return yang diprediksi untuk setiap statehidden_states (
torch.Tensor, opsional, dikembalikan ketikaoutput_hidden_states=Truedilewatkan atau ketikaconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
torch.Tensor, opsional, dikembalikan ketikaoutput_attentions=Truedilewatkan atau ketikaconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size), opsional) — Urutan hidden-states pada keluaran lapisan terakhir model.
Contoh:
>>> 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,
... )