#optimizers — التعلّم العميق
SGD وMomentum وAdam: سباق إلى الأدنى.
ما ستُجرّبه
- مرحبًا بك في #optimizers. على الشاشة، سطح الخسارة
L(x, y)لنموذج ذي وزنين — وعاء أشدّ انحدارًا عشر مرات على المحور y مقارنةً بالمحور x — وثلاث كرات تنطلق من النقطة نفسها: SGD (أزرق)، Momentum (أصفر)، Adam (وردي). الميل نفسه تحت أقدامها، وثلاث طرق لاستخدامه. راقب SGD: يهبط بسرعة على المحور y ثم يزحف على المحور x، بينما يكون الآخران قد وصلا القاع بعد 60 خطوة. المُحسِّن (optimizer) هو القاعدة التي تحوّل التدرّج (gradient) إلى تحديث للأوزان؛ هو ما يجعل التدريب يستغرق عشر دقائق… أو عشر ساعات. - إلى التضاريس الحقيقية: وادٍ منحنٍ (Rosenbrock مخفَّف)، الكابوس الكلاسيكي للمُحسِّنات. اكتب
/surface valley. الثلاثة ينطلقون من النقطة نفسها، عاليًا على المنحدر. - اعزل الأول:
/optimizer sgd. نزول تدرّج خالص،p ← p − lr·∇L، لا شيء آخر: في كل خطوة تتحرّك lr مضروبًا في الميل، في اتجاه النزول. - ضاعف معدّل التعلّم ثلاث مرات:
/lr 0.3. تأمّل بداية المسار. - Momentum يحتفظ بسرعة:
v ← β·v + ∇Lثمp ← p − lr·v. التعرّجات، التي تنقلب إشارتها عند كل خطوة، تُلغى فيv؛ أما الخطوات المتماسكة على طول الوادي فتتراكم. أظهره:/optimizer momentum. - Adam يضيف ذاكرة ثانية: متوسط مربّعات التدرّج، إحداثيًا بإحداثي، ويقسم الخطوة على جذره التربيعي. الاتجاه ذو التدرّج الضخم يحصل على خطوة صغيرة، والاتجاه المستوي على خطوة كبيرة. أظهره:
/optimizer adam. - ضع الثلاثة جنبًا إلى جنب:
/compare. يعطي الجدول، لكل منها، الخسارة النهائية وعدد الخطوات اللازمة لخفض الخسارة إلى ما دون 1% من قيمتها الأولية. - حان دورك:
/surface hillsثم/compare— من الحافة نفسها، قد ينتهي الثلاثة في ثلاثة أحواض مختلفة؛/surface saddleلترى كيف يفلت كل منها من نقطة السرج؛/noise 0.5لتدرّجات مضجوجة كالحُزَم الصغيرة (mini-batches)؛/momentum 0.5لتشعر بأثر β؛/start -2 -2لتغيير التهيئة؛/resetللبدء من جديد. التالي: #batch-normalization، أي كيف نجعل التضاريس ذاتها أسهل للنزول.
أوامر القناة
/surface <bowl|valley|saddle|hills>— تغيير سطح الخسارة (وإعادة ضبط نقطة الانطلاق الموصى بها)./optimizer <sgd|momentum|adam|all>— إظهار مُحسِّن واحد فقط، أو الثلاثة معًا./lr <0.001..1>— ضبط معدّل التعلّم للمُحسِّنات الثلاثة وإعادة الحساب./steps <1..300>— عدد الخطوات التي يشغّلها كل مُحسِّن./momentum <0..0.99>— المُعامل β: زخم Momentum وβ1 الخاص بـ Adam./start <x=-3..3> <y=-3..3>— نقطة الانطلاق المشتركة بين المُحسِّنات الثلاثة./noise <0..1>— الانحراف المعياري للضجيج المضاف إلى التدرّج (محاكاة الحُزَم الصغيرة)./seed <1..9999>— بذرة الضجيج: سحبة أخرى قابلة للاستنساخ./compare— إظهار المسارات الثلاثة وجدول الخسائر النهائية./reset— العودة إلى الوعاء، lr = 0.1، β = 0.9، 60 خطوة، بلا ضجيج، ال ثلاثة معروضون.
المسرد
- المُحسِّن (Optimizer)
- القاعدة التي تحوّل تدرّج دالة الخسارة إلى تحديث للأوزان. SGD وMomentum وRMSProp وAdam مُحسِّنات: الميل نفسه دخلًا، تحرّكات مختلفة خرجًا. هو أحد الخيارات الأكثر تأثيرًا على سرعة التدريب.
- معدّل التعلّم (Learning rate)
- المعامل
lrالذي يضبط طول كل خطوة:p ← p − lr·∇L. صغير جدًا فيزحف النزول؛ كبير جدًا فيتعرّج في الاتجاهات الحادّة ثم يتباعد. على سطح انحناؤه λ، النزول الخالص مستقرّ فقط إذا كانlr < 2/λ. - الزخم (Momentum)
- يُضيف سرعةً إلى الأوزان:
v ← β·v + ∇L،p ← p − lr·v. التدرّجات المتماسكة تتراكم، والتعرّجات تُلغى. في الوضع المستقرّ الخطوة الفعّالة هيlr / (1 − β)— أي عشرة أضعاف lr عند β = 0.9 — ومن ثَمّ سرعة أكبر في الوديان، لكن مع خطر التجاوز. - Adam
- مُحسِّن يجمع بين الزخم (متوسط متحرّك للتدرّج، β1) وRMSProp (متوسط متحرّك لمربّع التدرّج، β2):
p ← p − lr·m̂ / (√v̂ + ε)، مع تصحيح انحياز المتوسطات عند البدء. الخطوة مطبّعة إحداثيًا بإحداثي، مما يجعله متينًا تجاه اختيار lr. AdamW هو الصيغة ذات التنظيم المفصول، وهو المعيار في نماذج transformers. - RMSProp
- يقسم خطوة كل إحداثي على الجذر التربيعي لمتوسط متحرّك لمربّع تدرّجه: الاتجاهات ذات التدرّج القوي تحصل على خطوة صغيرة، والاتجاهات المستوية على خطوة كبيرة. هذا هو النصف «التكيّفي» من Adam، موروثًا عن Adagrad الذي كان يتراكم دون نسيان فينتهي إلى التوقّف.
- التكييف (Conditioning)
- النسبة بين أكبر وأصغر انحناءات دالة الخسارة (قيم الهسّي الذاتية). وعاءٌ أشدّ انحدارًا بعشر مرات في اتجاه ما له عدد تكييف يساوي 10: lr المستقرّ للاتجاه الحاد صغير عشر مرات مما يلزم للاتجاه المستوي، فيزحف النزول الخالص أو يتعرّج. هذه هي المشكلة الأساسية التي يعالجها Momentum وAdam.
- نقطة السرج (Saddle point)
- نقطة يكون فيها التدرّج صفرًا دون أن تكون أدنى: الخسارة ترتفع في بعض الاتجاهات وتنخفض في أخرى. يتباطأ النزول هناك بشكل حاد (الميل شبه مستوٍ) قبل أن يفلت عبر الاتجاه النازل. في الأبعاد العالية، نقاط السرج أكثر شيوعًا من الأدنيات المحلية.
- الأدنى المحلي (Local minimum)
- انخفاض في الخسارة أقلّ من جواره المباشر، لكن ليس بالضرورة الأعمق على الإطلاق (الأدنى الشامل). نزول التدرّج يتوقّف في أول حوض يبلغه: نقطة الانطلاق (التهيئة) وزخم المُحسِّن يقرّران أي حوض.
- جدولة معدّل التعلّم (Learning rate schedule)
- تغيير lr على مدى التدريب: كبير في البداية لتحقيق تقدّم سريع، وأصغر لاحقًا للاستقرار في القاع دون تعرّج أو اهتزاز تحت ضجيج الحُزَم الصغيرة. جداول درجات، cosine decay، warmup: كل تدريب حديث تقريبًا يستخدم واحدةً منها.
- تدرّج مضجوج (Noisy gradient)
- التدرّج المحسوب على حُزمة صغيرة (mini-batch) هو مجرّد تقدير لتدرّج المجموعة الكاملة: إنه مضجوج. SGD يتبعه حرفيًا فيهتزّ حول الأدنى؛ Momentum يُوسِّط عدّة تدرّجات ويُنعّم؛ Adam يُطبّع سعته. هذا هو «S» (stochastic) في SGD، وتُحاكيه هنا
/noise.
قنوات أخرى في التعلّم العميق
- #optimizers — SGD وMomentum وAdam: سباق إلى الأدنى.
- #batch-normalization — تطبيع الحُزَم: إبقاء التفعيلات في المدى الصحيح.
- #rnn-lstm — RNN وLSTM: تذكُّر تسلسل.
- #autoencoder — المرمّز التلقائي: اضغط ثم أعِد البناء.
- #transfer-learning — التعلّم بالنقل: انطلق من شبكة مدرَّبة سلفًا.
- #gan — GAN: مزوِّر ضدّ مفتِّش