Transformers documentation
Decision Transformer
نُشر هذا النموذج في أوراق 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
< 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 )
المعاملات
- 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.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
فئة transformers.DecisionTransformerModel
< source >( config: DecisionTransformerConfig )
المعاملات
- config (DecisionTransformerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Decision Transformer
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
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)
المعاملات
- 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,
... )