بسام أحمد
←العودة إلى المشاريع

مشروع شخصي

شبكة عصبية تلافيفية من الصفر باستخدام NumPy فقط

شبكة عصبية تلافيفية مبنية من المبادئ الأولى — التمرير الأمامي، والانتشار العكسي، وكل شيء — بدون أي إطار عمل للتعلم العميق.

تعلم عميقرياضيات
رسم توضيحي لبنية شبكة عصبية تلافيفية

الأدوات

PythonNumPy

المشكلة

من السهل استدعاء model.fit() في PyTorch دون أن تواجه فعليًا معنى الالتفاف (convolution) أو التمرير العكسي أو تحديث الأوزان. قبل الاعتماد على أطر العمل في أبحاثي، أردت التأكد من أنني أفهم الآلية بعمق كافٍ لتصحيحها عند حدوث خلل — لذلك بنيت شبكة تلافيفية باستخدام NumPy فقط: طبقات التفاف وتجميع، وانتشار عكسي عبرها، ونزول متدرج، كلها مكتوبة يدويًا.

المنهجية

  • تنفيذ طبقات الالتفاف (مع stride وpadding)، والتجميع الأقصى (max pooling)، و ReLU، وطبقة إخراج متصلة بالكامل، كل منها بتمرير أمامي وعكسي يدوي مستقل.
  • اشتقاق وتنفيذ الانتشار العكسي عبر عملية الالتفاف نفسها — وهو الجزء الذي تتجاهله معظم الشروحات — وتطلّب اشتقاق التدرج بالنسبة للمدخل والنواة معًا كعملية ارتباط (correlation).
  • تدريب الشبكة على [اذكر مجموعة البيانات، مثل MNIST] للتحقق من أن التنفيذ اليدوي يتعلم فعليًا، بمقارنة منحنيات التدريب بنموذج مكافئ في PyTorch كفحص سلامة.

النتائج

  • دقة الاختبار على [مجموعة البيانات]: [أضف النسبة]
  • زمن التدريب لكل حقبة (NumPy مقابل PyTorch): [أضف المقارنة]

ما الذي سأحسّنه لاحقًا

  • تسريع التمرير العكسي للالتفاف بشكل متجهي أكثر — النسخة الحالية صحيحة لكنها ليست سريعة.
  • إضافة batch normalization لملاحظة أثرها على استقرار التدريب في تنفيذ مبني من الصفر.