شرح الانتشار العكسي خطوة بخطوة
حساب التدرّج يدويًا بالكامل على شبكة من عصبونين، بالأرقام، ثم التحقق منه باستخدام autograd وبالفروق المنتهية.
شرح الانتشار العكسي خطوة بخطوة
perte.backward(). استدعاء واحد دون أي وسيط، وتظهر مشتقات ملايين المعاملات. إنه أكثر سطر مفيد في PyTorch، وهو أيضًا السطر الذي يكتبه أكبر عدد من الناس دون أن يعرفوا ما الذي يفعله. وما دام كل شيء يعمل، يبقى الجهل مريحًا.
لكنه يكفّ عن كونه مريحًا عند أول مشكلة جدية. لماذا يكون تدرّج الطبقة الأولى أصغر بمليون مرة من تدرّج الطبقة الأخيرة؟ ولماذا تظهر القيمة nan عند التكرار الثالث وليس الأول؟ ولماذا يُطلق نموذج يتشارك فيه مُشفِّر واحد بين رأسين الخطأ «Trying to backward through the graph a second time»؟ لا يُحَلّ أي من هذه الأسئلة بالتجربة والخطأ. بل يُحَلّ بمعرفة أي كمية تنتقل، وفي أي اتجاه، وما الذي يضربها في كل مرحلة.
لذلك تفعل هذه الدرس شيئًا غير معتاد: فهي تحسب تدرّجًا يدويًا بالكامل، بأعداد عشرية، على شبكة صغيرة بما يكفي كي لا تبقى أي خطوة مخفية — مُدخل واحد، وعصبون مخفي واحد، وعصبون خرج واحد، وأربعة معاملات. بعد ذلك تطلب من autograd أن يعيد الحساب نفسه، وتقارن الأرقام. ثم تتحقق مرة ثالثة بالفروق المنتهية، وهي تقنية فحص يستخدمها الممارسون فعلًا للتحقق من طبقة كُتبت يدويًا.
هذا الالتفاف الذي يستغرق صفحتين هو أفضل ساعة ستقضيها في هذه الدورة. فبعده لن يعود اختفاء التدرّج ظاهرة غامضة: إنه حاصل ضرب عوامل أصغر من واحد، ونحن نعرف أيّ عوامل هي.