تقنية

مشاركة المعامل: هل اسمان يعنيان وزنين مستقلين؟

رسم يقارن اسمين يشيران إلى كائن واحد ذي قيمتين بمثال آخر لكائنين مستقلين ذوي قيمتين لكل منهما
رسم تحريري لمثال معلن؛ لم ننفذ تدريبًا أو استدعاء خدمة.

مشاركة المعاملات في PyTorch تتعلق بكائن المعامل الذي تشير إليه الأسماء، لا بتشابه أرقامه وحده. تعرض named_parameters الاسم والمعامل، ويضبط remove_duplicate إزالة المعاملات المكررة. [1] نراجع هوية كائنات معلنة لنرى لماذا لا يكفي جمع أحجام الأسماء لحساب عدد الأوزان الفريدة.

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

لا؛ قد يشير اسمان إلى المعامل نفسه، وقد يشيران إلى معاملين مستقلين لهما القيم نفسها. حدد الهوية وطريقة تعدادها قبل العد.

  • تعيد named_parameters أزواج اسم ومعامل، وتحذف المكرر افتراضيًا مع remove_duplicate=True؛ recurse يحدد تضمين الوحدات الفرعية. [1]
  • نعلن اسمين في الوحدة نفسها يشيران إلى الكائن ك ذي قيمتين؛ لدينا مساران اسميان ومعامل واحد يحوي قيمتين، لا أربع قيم معاملات مستقلة.
  • في مثال مستقل، لكل اسم كائن خاص يبدأ بالقيمتين نفسيهما؛ توجد أربعة مواضع معاملات، وتعديل كائن لا يغير الآخر وفق استقلالنا المعلن.
  • سجل خيار التعداد وهوية الكائنات والوحدات المشمولة؛ عدد الاستعمالات ليس عدد الأوزان، ولم ننشئ وحدة أو نحسب ذاكرة تدريب أو مشتقات.

ما الذي تعده قائمة الأسماء؟

تصف الوثيقة named_parameters كأزواج الاسم والمعامل، مع remove_duplicate=True افتراضيًا، وخيار recurse للوحدات الفرعية. [1]

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

قبل تقرير العدد، نحدد هل نعد أسماء أم كائنات معاملات أم العناصر العددية في تلك الكائنات. كائن واحد قد يحمل أكثر من قيمة؛ إذا كتب التقرير «معامل واحد»، نسأل عن الوحدة المقصودة كي لا نخلط الكائن بعدد أوزانه.

كيف يجتمع اسمان في كائن واحد؟

نؤلف وحدة لها اسمان، «يسار» و«يمين»، ونعلن صراحة أنهما يشيران إلى كائن المعامل ك نفسه. ك يحتوي قيمتين هما 2 و 5. ليسا نسختين متساويتين استنتجنا وحدتهما بالنظر؛ المشاركة جزء من عقد المثال.

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

إذا عدلنا الموضع الثاني في ك من 5 إلى 8، نقرأ عبر الاسمين 2 و 8، لأننا أعلنا المرجع نفسه. لا نقول إن تحديثًا ثانيًا وقع في اليمين؛ تغير الكائن مرة وقرأناه بطريقين. لم ننفذ إسنادًا في مكتبة.

متى تكون القيم المتساوية أربعة أوزان؟

نبدأ مثالًا منفصلًا من القيم الأصلية 2 و 5. اسم يسار يشير إلى كائن ل، ويمين إلى كائن ر، ونعلن استقلالهما. كل منهما يحوي موضعين، فتكون الكائنات الفريدة اثنين ومواضع المعاملات أربعة، رغم تساوي البداية.

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

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

كيف تقرأ تقرير تعداد فعلي؟

نقترح حفظ خيار إزالة التكرار وهل شمل التعداد الوحدات الفرعية، ثم مقارنة الأسماء بهويات المعاملات وأشكالها. عند الحاجة لعدد القيم الفريدة، نجمع أحجام الكائنات الفريدة التي حددناها، لا أحجام كل طريق اسمي بلا مراجعة.

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

هذه مراجعة لهوية المعاملات وتعدادها، وليست تقديرًا لذاكرة الجهاز أو لحجم ملف أو درسًا في جمع المشتقات عبر المسارات. لم ننشئ Module أو نشغل named_parameters؛ الأسماء والهوية والتعديل في مثالنا علاقات معلنة تساعد على قراءة تقرير مناسب لاحقًا.

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

  1. PyTorch main: Module.named_parameters (يفتح في نافذة جديدة)docs.pytorch.org

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