مشكلة إسناد الفضل
لديك شبكة بملايين الأوزان. تُغذّيها بمدخل، تحسب التنبؤ، وتقيس الخطأ. ثم يأتي السؤال الصعب: أيّ الأوزان مسؤولة عن الخطأ، وبأي مقدار ينبغي أن يتغير كلٌّ منها؟ هذه هي مشكلة إسناد الفضل — التحدي الجوهري في تدريب الشبكات العميقة.
بالنسبة لطبقة الإخراج، الإجابة بسيطة نسبيًا: يعتمد الخطأ مباشرةً على أوزان الإخراج. لكن وزنًا في الطبقة المخفية الأولى يؤثر في الإخراج بصورة غير مباشرة فحسب، عبر كل طبقة لاحقة. إسناد اللوم عبر طبقات كثيرة، بدقة وكفاءة، هو ما يحقّقه الانتشار الخلفي.
الانتشار الخلفي ليس خوارزمية تعلم بحد ذاته — بل هو طريقة فعّالة لحساب التدرجات. مقترنًا بالنزول التدرجي (أو متغيراته)، يُخبر كل وزن بالضبط كيف يتغير لتخفيض الخسارة. كانت الخوارزمية معروفة في الستينيات والسبعينيات، لكنها اشتُهرت بعد أن عمّمها رومِلهارت وهينتون وويليامز على الشبكات العصبية عام 1986، وهي تظل المحرك وراء كل نظام تعلم عميق تقريبًا حتى اليوم.
قاعدة السلسلة: أساس الانتشار الخلفي
الانتشار الخلفي هو ببساطة قاعدة السلسلة في حساب التفاضل والتكامل مطبَّقة بصورة منهجية وفعّالة على تركيب متداخل من الدوال. الشبكة العصبية هي بالضبط مثل هذا التركيب: الخسارة دالة في الإخراج، والإخراج دالة في الطبقة الأخيرة، وهكذا حتى المدخل.
الفكرة الجوهرية هي أن التدرجات يمكن حسابها بتمرير المعلومات للخلف عبر نفس رسم بياني الشبكة المستخدم في التمرير الأمامي. تحتاج كل عقدة فقط إلى قطعتين من المعلومات: مشتقتها المحلية (المحسوبة خلال التمرير الأمامي والمخزَّنة)، والتدرج الوارد من الطبقة أعلاها. اضرب الاثنين معًا ومرّر النتيجة للخلف. هذا في آنٍ أنيق وغير مكلف حسابيًا.
تمريران: أمامي وخلفي
يتضمن تدريب شبكة عصبية بالانتشار الخلفي تمريرَين متتاليَّين عبر الشبكة لكل دُفعة بيانات.
التمرير الأمامي يحسب التنبؤ. انطلاقًا من المدخل، يطبّق تحويل كل طبقة بالترتيب، ويُنتج تفعيلات في كل طبقة. والأهم، يجب تخزين كل قيمة وسيطة — كل تفعيل مسبق z[l] وكل تفعيل a[l] — في الذاكرة. ستُستخدم هذه القيم المخزّنة خلال التمرير الخلفي لحساب المشتقات المحلية.
التمرير الخلفي يحسب التدرجات. انطلاقًا من الخسارة عند الإخراج، يُنشر التدرج للخلف طبقةً طبقة، حتى الطبقة المخفية الأولى. في كل خطوة، يُستخدم التدرج الوارد لحساب تدرج أوزان تلك الطبقة وانحيازاتها، ثم تدرج مدخلات الطبقة الذي يصبح "التدرج الوارد" للطبقة السابقة.
إن اشتراط تخزين جميع التفعيلات الوسيطة خلال التمرير الأمامي هو سبب كثافة الشبكات العميقة في استهلاك الذاكرة. لدُفعة من 256 صورة عبر شبكة من 50 طبقة، قد تستهلك التفعيلات المخزّنة جيجابايتات من ذاكرة GPU. فحص نقاط التدرج — إعادة حساب بعض التفعيلات خلال التمرير الخلفي بدلًا من تخزينها جميعًا — يتداول الحساب مقابل الذاكرة عند الحاجة.
معادلات الانتشار الخلفي
ليكن L هو الخسارة، والمؤشر العلوي [l] يدل على الطبقة l، وL يمثل العدد الكلي للطبقات. يحسب التمرير الخلفي إشارة خطأ δ[l] لكل طبقة، وهي المشتقة الجزئية للخسارة بالنسبة للتفعيل المسبق z[l]. تُستخدم هذه الدالتا بعد ذلك لحساب تدرجات الأوزان.
التدرجات المتلاشية والمتفجرة
يضرب التمرير الخلفي التدرجات معًا أثناء تحركه عبر الطبقات. في شبكة عميقة، يمكن أن يصبح هذا حاصل الضرب لحدود كثيرة صغيرًا بصورة كارثية أو كبيرًا بصورة كارثية.
التدرجات المتلاشية تحدث حين تضرب كل طبقة التدرج في عدد أصغر من 1. السبب الكلاسيكي هو تفعيل السيغمويد: مشتقته أقصاها 0.25 (عند z = 0) وتقترب من الصفر للقيم الكبيرة |z|. بعد 20 طبقة من الضرب في 0.25، يصل التدرج إلى الطبقة الأولى بمقدار أقل من 10−12. تتلقى الطبقات الأولى إشارة تدريب شبه معدومة وتكاد أوزانها لا تتغير — تفشل الشبكة في تعلم تمثيلات هرمية.
التدرجات المتفجرة هي العكس: تضرب كل طبقة التدرج في عدد أكبر من 1 فينمو أسيًا. بعد 20 طبقة من الضرب في 2، يتجاوز التدرج المليون. تصبح تحديثات الأوزان ضخمة جدًا، وتزعزع التحسين وتُنتج في الغالب قيم NaN.
التدرجات المتلاشية: استخدام تفعيلات ReLU (التدرج يساوي 1 للمدخلات الموجبة)، وإضافة وصلات مختصرة (الشبكات المتبقية)، واستخدام تطبيع الدُّفعات للحفاظ على التفعيلات في نطاقات جيدة، أو استخدام معماريات كـ LSTMs للتسلسلات التي تمتلك بوابات قابلة للتعلم للتحكم في تدفق التدرج.
التدرجات المتفجرة: طبّق قص التدرج — إذا تجاوزت قاعدة التدرج حدًا معينًا (عادةً 1.0 أو 5.0)، قلّص متجه التدرج بأكمله حتى تساوي قاعدته الحد. هذه الحيلة البسيطة تستقر التدريب للشبكات المتكررة والمحولات. كذلك يمنع تهيئة الأوزان بعناية (Xavier/He) انفجار التدرجات منذ بداية التدريب.
تهيئة الأوزان
القيم الابتدائية للأوزان تحمل أهمية بالغة. إذا هُيِّئت جميع الأوزان بالصفر، تحسب جميع الخلايا العصبية في الطبقة نفس الإخراج وتتلقى نفس التدرج — إنها متماثلة ولن تتمايز أبدًا. هذه هي مشكلة كسر التماثل: التهيئة العشوائية تكسر التماثل، مما يسمح للخلايا المختلفة بتعلم ميزات مختلفة.
لكن العشوائية وحدها غير كافية — الحجم مهم. إذا كانت الأوزان كبيرة جدًا، تشبع التفعيلات؛ وإذا كانت صغيرة جدًا، تتقلص التفعيلات والتدرجات إلى الصفر. مخططان مبدئيان للتهيئة يسودان في الممارسة:
تجميع الأجزاء: حلقة التدريب
بالتمرير الأمامي والتمرير الخلفي وقاعدة تحديث الأوزان، تكون خوارزمية التدريب الكاملة لدُفعة صغيرة كما يلي:
1. اسحب دُفعة صغيرة من B مثال من مجموعة التدريب.
2. التمرير الأمامي: احسب التنبؤات وخزّن كل التفعيلات والتفعيلات المسبقة الوسيطة.
3. احسب الخسارة: قيّم دالة الخسارة على تنبؤات الدُّفعة مقابل التسميات الحقيقية.
4. التمرير الخلفي: احسب δ[L]، ثم انشر للخلف لحساب δ[l] لكل طبقة و∇W[l]، ∇b[l] لكل مصفوفة أوزان وانحياز.
5. حدّث الأوزان: طبّق المُحسِّن (مثلًا، W ← W − η∇W). كرّر من الخطوة 1.
كل مرور كامل على مجموعة التدريب هو حقبة. تتطلب الشبكات الحديثة عادةً عشرات إلى مئات من الحقب. حجم الدُّفعة الصغيرة B هو معامل فائق — الدُّفعات الأكبر تعطي تقديرات تدرج أكثر استقرارًا لكنها تتطلب ذاكرة أكبر؛ الدُّفعات الأصغر تُدخل ضوضاءً قد تساعد فعلًا على الخروج من الحدود الدنيا المحلية.
- الانتشار الخلفي يحل مشكلة إسناد الفضل بحساب تدرج الخسارة بالنسبة لكل وزن في الشبكة بكفاءة ودقة.
- إنه قاعدة السلسلة في حساب التفاضل والتكامل مطبَّقة بصورة متكررة: تضرب كل طبقة التدرج الوارد في مشتقتها المحلية وتمرر النتيجة للخلف.
- التمرير الأمامي يحسب ويخزّن كل التفعيلات الوسيطة؛ التمرير الخلفي يستخدم هذه القيم المخزّنة لحساب التدرجات طبقةً طبقة بالترتيب العكسي.
- دالتا طبقة الإخراج هي ∇aL ⊙ f′(z[L])؛ لـ softmax + الإنتروبيا المتقاطعة تُبسَّط إلى â − y.
- تُحسب دالتا الطبقات المخفية بإسقاط دالتا الطبقة التالية عبر مصفوفة الأوزان المنقولة، ثم الضرب في مشتقة التفعيل المحلية.
- التدرجات المتلاشية (بسبب تفعيلات التشبع في الشبكات العميقة) تُعالَج بـ ReLU والوصلات المختصرة وتطبيع الدُّفعات. التدرجات المتفجرة تُتحكم بها بقص التدرج.
- تهيئة الأوزان مهمة: Xavier للسيغمويد/tanh، وHe لـ ReLU. التهيئة العشوائية تكسر التماثل؛ القياس المناسب يحافظ على التدرجات في سلوك جيد من البداية.