تقنية

الشبكة المتكررة: هل حالة الزمن وزن جديد؟

ثلاث خطوات متتابعة تحمل الحالة مع بيان استعمال المعامل نفسه في كل خطوة، لا إنشاء وزن جديد لكل زمن
مخطط من إعداد بحر العلوم؛ حالة محسوبة من مدخلات مفترضة دون تشغيل شبكة.

الحالة المخفية في RNN تتغير مع المدخل الحالي والحالة السابقة، بينما يعاد استعمال معاملات الطبقة في خطوات التسلسل. تعرض شفرة PyTorch هذه العلاقة مع تنشيط Tanh أو ReLU. [1]

الخلاصة السريعة

ميز القيمة التي تنتقل بين الخطوات من الأوزان التي تعرّف القاعدة؛ تغير الحالة أثناء المرور لا يعني أن الشبكة تعلمت وزنًا جديدًا في كل زمن.

  • توثق RNN مدخل الخطوة والحالة السابقة ومعاملات الطبقة نفسها؛ اختيار ReLU متاح بدل Tanh، وليس هو الافتراضي. [1]
  • في قاعدتنا h الجديد = ReLU للمدخل مضافًا إليه نصف الحالة السابقة، مع بداية صفر؛ التسلسل 1 ثم صفر ثم 2 يعطي الحالات 1 و 0.5 و 2.25 دون تحديث وزن.
  • إعادة ترتيب القيم إلى 2 ثم صفر ثم 1 تعطي حالة أخيرة 1.5؛ وبداية 4 مع الترتيب الأول تعطي 2.75، مع ثبات القاعدة في المقارنتين.
  • الحالة الأخيرة ليست قائمة المدخلات نفسها: تسلسلان في تمريننا قد يعطيان القيمة نفسها؛ لا نستنتج حفظ كل الماضي أو صحة تنبؤ أو نتيجة تدريب لم ننفذه.

أي شيء ينتقل وأي شيء يعاد استعماله؟

تجمع الصيغة الموثقة مساهمة مدخل الزمن الحالي ومساهمة الحالة السابقة والإزاحات، ثم تطبق التنشيط؛ تعرض الحلقة المعاملات المسماة نفسها لكل زمن. [1]

نختار وحدة تفسيرية ذات مدخل وحالة كل منهما عدد واحد، ومعامل مدخل 1 ومعامل حالة 0.5 وإزاحتين صفريتين، وتنشيط ReLU. أي إننا نأخذ الأكبر بين صفر وبين المدخل زائد نصف الحالة السابقة. هذه قيم اخترناها، وليست معاملات تعلمناها من بيانات.

نثبتها طوال التمرين. الحالة h قيمة محسوبة تنتقل، أما 1 و 0.5 فيحددان القاعدة. نسخ رسم الخلية ثلاث مرات لعرض الأزمنة لا ينشئ ثلاثة معاملات حالة مستقلة في هذا المثال.

تابع ثلاث خطوات قبل الحديث عن تعلم

نبدأ بالحالة صفر، ونقدم المدخلات 1 وصفر و 2 بالترتيب. في الخطوة الأولى نحسب 1 + 0.5 × صفر، فتكون الحالة 1. ثم صفر + 0.5 × 1 يعطي 0.5. أخيرًا 2 + 0.5 × 0.5 يعطي 2.25.

جميع القيم قبل ReLU هنا موجبة، فلا يتغير شيء بعدها. هذا لا يلغي التنشيط من تعريفنا؛ لو صار مجموع خطوة سالبًا لطبقنا فرع الصفر. الجدول يخص المدخلات التي أعلناها فقط.

لم نحسب خسارة أو تدرجًا أو تحديثًا. لذلك لا نسمي انتقال الحالة من 1 إلى 0.5 تعلمًا جديدًا للأوزان، ولا نقول إن المرور وحده حسّن قاعدة التنبؤ.

الخطوةالمدخلالحالة الجديدة
111
200.5
322.25

الترتيب والبداية جزء من السؤال

مع المدخلات 2 ثم صفر ثم 1، والبداية نفسها، تصبح الحالات 2 ثم 1 ثم 1.5. مجموع المدخلات لم يتغير، لكن ترتيب مساهماتها في الحالة الأخيرة تغير. لا تكفي مقارنة المجموع لتوقع مخرج القاعدة المتكررة.

ونعود إلى الترتيب الأول، مع بداية مفترضة 4 بدل صفر. تصبح الحالات 3 ثم 1.5 ثم 2.75. لم نغير وزنًا؛ غيرنا القيمة التي دخلت قبل أول خطوة.

هذه البداية مدخل مفترض اخترناه. قد تعرف بنية أخرى طريقة خاصة لتوليدها أو تعلمها، لكننا لا نعمم وضع مثالنا عليها. وعند فصل تسلسلين نعلن هل نبدأ حالة جديدة أم نحمل حالة سابقة؛ لا نخفي الاختيار داخل اسم RNN.

هل الحالة الأخيرة نسخة كاملة من الماضي؟

في التمرين نفسه، التسلسل صفر ثم صفر ثم 1.5 يعطي حالة أخيرة 1.5 أيضًا. يختلف عن 2 ثم صفر ثم 1، ومع ذلك تطابق العدد النهائي. لدينا مثال مضاد لاستعادة المدخلات الثلاثة كاملة من هذا العدد وحده.

قد نختار مخرجًا من كل خطوة أو نعالج الحالة بطريقة أخرى، لكن ذلك يحتاج تحديدًا إضافيًا. كذلك لا يجعل اسم «الزمن» العلاقة السببية في العالم مثبتة؛ نحن عرفنا ترتيب خطوات الحساب فقط.

احفظ القاعدة والمدخلات والبداية وترتيبها قبل تفسير النتيجة. لم نشغل RNN أو نختبر ذاكرة نموذج؛ المثال يشرح قيمة متغيرة تحت معاملات مشتركة، وحدود ما يمكن استنتاجه منها.

المصادر ومتابعة القراءة

  1. PyTorch 2.8.0: RNN formula and equivalent recurrent loop (يفتح في نافذة جديدة)raw.githubusercontent.com

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.