تقنية

تجميد معامل في النموذج: هل يمنع مرور التدرج إلى معامل آخر؟

معامل ثابت بثلاثة ومعامل قابل للتحديث باثنين ينتجان ستة ومنها تدرج المعامل الثاني ثمانية عشر وقيمته التالية واحد فاصلة اثنان وثمانون
تثبيت عامل لا يمنع اشتقاق الناتج بالنسبة إلى العامل الآخر.

تجميد معامل في النموذج يحدد أي متغير نطلب تدرجه ونحدثه. في PyTorch، قد تسجل العملية للتفاضل إذا احتاج أحد مدخلاتها إلى تدرج، ولو كان مدخل آخر ثابتًا. [1]

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

جعل requires_grad لمعامل ورقي مساويًا لـFalse يستبعد تراكم تدرجه الجديد؛ لا يعني أن كل مسار حسابي يمر عبر قيمته يتوقف عن تفاضل مدخل آخر. [1]

  • نحدد المعامل الورقي الذي لا نطلب تدرجه، ونفصل ذلك عن مدخل آخر ما زال requires_grad له مفعّلًا. [1]
  • نفترض a = 3 ثابتًا وb = 2 قابلًا للتحديث، والناتج z = a × b = 6؛ اختيار تثبيت a لا يلغي أثر قيمته في الناتج.
  • مع L = نصف z²، يكون تدرج b مساويًا 18؛ تحديثه بمعدل 0.01 يعطي 1.82، مع استبعاد a من التحديث المفترض وعدم وجود تدرج قديم له.
  • وضع eval لا يعطل حساب التدرجات بذاته؛ نراجع إعداد التدرج وقائمة التحديث والحالة القديمة بدل الاكتفاء باسم وضع التشغيل. [1]

حدد المتغير المطلوب تفاضله

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

لذلك لا نفسر وجود معامل ثابت داخل حاصل ضرب على أنه منع لتفاضل حاصل الضرب كله. السؤال المحدد هو: بالنسبة إلى أي متغير نطلب الاشتقاق؟ قد تبقى قيمة أحد العاملين حاضرة في مشتقة العامل الآخر.

اعبر بالمتغير القابل للتحديث قيمة ثابتة

اخترنا معاملين a وb. نثبت a عند 3، ونبدأ b من 2. نعامل b وحده بوصفه قابلًا للتحديث في المثال، ونتعامل مع حساب جديد لا يحمل تدرجًا قديمًا لـa. نحسب z = a × b، فتكون القيمة 6.

قيمة a تحدد كيف يتغير z حين يتغير b. إذا زاد b من 2 إلى 2.1 مع ثبات a، يصبح الناتج 6.3. النتيجة تحركت رغم ثبات العامل الأول. تثبيت معامل لا يحول العملية إلى قيمة لا تعتمد على أي شيء.

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

احسب التدرج ثم التحديث الذي اخترناه

نختار L = نصف z². مشتقة L بالنسبة إلى z تساوي z، ومشتقة z بالنسبة إلى b تساوي a. في نقطتنا يكون تدرج b هو 6 × 3 = 18. الثابت 3 ساهم في المشتقة ولم يقطع الطريق إليها.

نفترض تحديثًا لـb وحده: b الجديد = 2 − 0.01 × 18 = 1.82. لا نحدث a، فيظل 3. نحن استبعدناه من خطوة التحديث المفترضة، ولم نضع له تدرجًا قديمًا يمكن أن يستخدمه إجراء آخر.

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

لا تستبدل إعداد التفاضل بوضع eval

يوضح مرجع PyTorch أن eval مستقل عن تعطيل حساب التدرجات؛ فهو يغير سلوك الوحدات التي يتأثر عملها بوضع التدريب والتقييم. [1]

لا يكفي ظهور كلمة eval لاستنتاج أن a مجمد أو أن b لن يتلقى تدرجًا. اكتب ما الذي تريد تثبيته، وما الذي تريد تفاضله، وما الذي سيمر إلى التحديث. هذه قرارات مترابطة لكنها ليست مفتاحًا واحدًا.

لم نشغل PyTorch أو نغير نموذجًا، ولم نختبر ذاكرته أو زمنه. المثال يبين أن مرور التدرج إلى معامل آخر ينسجم مع إبقاء a ثابتًا، وفق الشروط المعلنة، ولا يمنح حكمًا عامًا على كل إعداد تدريب.

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

  1. PyTorch v2.9.0: Autograd mechanics, actual pinned source (يفتح في نافذة جديدة)raw.githubusercontent.com

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