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.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 2021-06-02 وسُهم به في Hugging Face Transformers في 2022-03-23.

Decision Transformer

نظرة عامة

قُدِّم نموذج Decision Transformer في Decision Transformer: Reinforcement Learning via Sequence Modeling
بواسطة Lili Chen وKevin Lu وAravind Rajeswaran وKimin Lee وAditya Grover وMichael Laskin وPieter Abbeel وAravind Srinivas وIgor Mordatch.

المستخلص من الورقة البحثية هو كالتالي:

نقدّم إطار عمل يُجسّد تعلّم التعزيز (RL) كمشكلة نمذجة تسلسل. هذا يتيح لنا الاستفادة من بساطة معمارية Transformer وقابليتها للتوسع، بالإضافة إلى التطورات المرتبطة بها في نمذجة اللغة مثل GPT-x وBERT. على وجه التحديد، نقدم Decision Transformer، وهي معمارية تُعيد صياغة مشكلة RL كنمذجة تسلسل شرطية. على عكس الأساليب السابقة في RL التي تُلائم دوال القيمة أو تُحسب تدرجات السياسة، فإن Decision Transformer تُخرج ببساطة الإجراءات المثلى بالاستفادة من Transformer مقنّع سببيًا. من خلال جعل نموذج ذاتي التراجع مشروطًا على العائد (المكافأة) المطلوب، والحالات السابقة، والإجراءات، يمكن لنموذج Decision Transformer لدينا توليد إجراءات مستقبلية تحقق العائد المطلوب. على الرغم من بساطته، يُطابق Decision Transformer أداء خطوط الأساس النموذجية الحرة من النموذج (model-free) في RL دون خطي (offline) أو يتفوق عليها في مهام Atari وOpenAI Gym وKey-to-Door.

هذا الإصدار من النموذج مخصص للمهام التي يكون فيها الحالة متجهًا.

تمت مساهمة هذا النموذج من قِبل edbeeching. يمكن العثور على الكود الأصلي هنا.

DecisionTransformerConfig

فئة 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 )

المعاملات

  • state_dim (int، اختياري، القيمة الافتراضية 17) — حجم الحالة لبيئة التعلم المعزز
  • act_dim (int، اختياري، القيمة الافتراضية 4) — حجم مساحة الإخراج الخاصة بالإجراء
  • hidden_size (int، اختياري، القيمة الافتراضية 128) — أبعاد التمثيلات المخفية.
  • max_ep_len (int، اختياري، القيمة الافتراضية 4096) — الحد الأقصى لطول حلقة واحدة في البيئة
  • action_tanh (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم استخدام تفعيل tanh على التنبؤ بالإجراء
  • vocab_size (int، اختياري، القيمة الافتراضية 1) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطة input_ids.
  • n_positions (int، اختياري، القيمة الافتراضية 1024) — أقصى طول تسلسل قد يُستخدم مع هذا النموذج.
  • n_layer (int، اختياري، القيمة الافتراضية 3) — عدد الطبقات المخفية في مُفكِّك Transformer.
  • n_head (int، اختياري، القيمة الافتراضية 1) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer.
  • n_inner (int، اختياري) — بعد تمثيلات MLP.
  • activation_function (str، اختياري، القيمة الافتراضية relu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • resid_pdrop (Union[float, int]، اختياري، القيمة الافتراضية 0.1) — احتمالية الإسقاط (dropout) لجميع الطبقات المتصلة بالكامل في التضمينات (embeddings) والمشفّر (encoder) والمجمّع (pooler).
  • embd_pdrop (Union[float, int]، اختياري، القيمة الافتراضية 0.1) — نسبة الإسقاط (dropout) الخاصة بالتضمينات.
  • attn_pdrop (Union[float, int]، اختياري، القيمة الافتراضية 0.1) — نسبة الإسقاط (dropout) لاحتمالات الانتباه.
  • layer_norm_epsilon (float، اختياري، القيمة الافتراضية 1e-05) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • scale_attn_weights (bool، اختياري، القيمة الافتراضية True) — تُقيَّم أوزان الانتباه عن طريق القسمة على sqrt(hidden_size).
  • use_cache (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان config.is_decoder=True أو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.
  • bos_token_id (int، اختياري، القيمة الافتراضية 50256) — معرّف الرمز المستخدم لبدء البث في المفردات.
  • eos_token_id (Union[int, list[int]]، اختياري، القيمة الافتراضية 50256) — معرّف الرمز المستخدم لنهاية البث في المفردات.
  • scale_attn_by_inverse_layer_idx (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم توسيع أوزان الانتباه أيضًا بمعامل 1 / layer_idx + 1.
  • reorder_and_upcast_attn (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب توسيع المفاتيح (K) قبل حساب الانتباه (الجداء النقطي) وترقية جداء الانتباه النقطي/الليفتماكس إلى float() عند التدريب بدقة مختلطة.
  • add_cross_attention (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب إضافة طبقات الانتباه المتقاطع إلى النموذج.

هذه فئة الإعدادات المخزنة لإعدادات نموذج DecisionTransformerModel. تُستخدم لاستحداث نموذج Decision Transformer وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ

ترث كائنات التهيئة من 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

فئة 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

فئة transformers.DecisionTransformerModel

< >

( config: DecisionTransformerConfig )

المعاملات

  • config (DecisionTransformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Decision Transformer

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

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)

المعاملات

  • states (torch.Tensor من الشكل (batch_size, episode_length, state_dim)) — حالات كل خطوة في المسار
  • actions (torch.Tensor من الشكل (batch_size, episode_length, act_dim)) — الإجراءات التي يتخذها سياسة “الخبير” للحالة الحالية، وتُخفى هذه الإجراءات للتنبؤ التلقائي التتابعي
  • rewards (torch.Tensor من الشكل (batch_size, episode_length, 1)) — المكافآت لكل حالة وإجراء
  • returns_to_go (torch.Tensor من الشكل (batch_size, episode_length, 1)) — العوائد لكل حالة في المسار
  • timesteps (torch.LongTensor من الشكل (batch_size, episode_length)) — خطوة الزمن لكل خطوة في المسار
  • attention_mask (torch.Tensor بشكل (batch_size, sequence_length), اختياري) — قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. القيم المختارة للقناع هي [0, 1]:
    • 1 للرموز التي لم تُقنَّع،
    • 0 للرموز التي تم إخفاؤها.

    ما هي أقنعة الانتباه؟

  • output_hidden_states (bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجع hidden_states ضمن الموترات المُرجعة للحصول على مزيد من التفاصيل.
  • output_attentions (bool، اختياري) — ما إذا كان يجب إرجاع تensors الانتباه لجميع طبقات الانتباه أم لا. راجع attentions ضمن tensors المُرجعة لمزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

DecisionTransformerOutput أو tuple(torch.Tensor)

DecisionTransformerOutput أو مجموعة (tuple) من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على التهيئة (DecisionTransformerConfig) والمدخلات.

تتجاوز طريقة DecisionTransformerModel الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • state_preds (torch.Tensor من الشكل (batch_size, sequence_length, state_dim)) — تنبؤات حالة البيئة

  • action_preds (torch.Tensor من الشكل (batch_size, sequence_length, action_dim)) — تنبؤات النموذج بالإجراءات

  • return_preds (torch.Tensor من الشكل (batch_size, sequence_length, 1)) — العوائد المتوقعة لكل حالة

  • hidden_states (torch.Tensor، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (torch.Tensor، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).

    أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

  • last_hidden_state (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — تسلسل حالات مخفية عند مخرجات الطبقة الأخيرة من النموذج.

أمثلة:

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