Momentum (Optimization)
يستخدم تحسين الزخم التدرجات السابقة لتسريع تدريب النموذج، وتخفيف ضوضاء التحديثات، وتحسين التقارب، مع الموازنة بين معدل التعلّم.
الزخم تقنية تحسين تمنح التدريب القائم على التدرجات ذاكرةً للتحديثات السابقة. ومن خلال الجمع بين التدرج الحالي وسجل متناقص للتدرجات السابقة، تزيد السرعة في الاتجاهات المتسقة وتقلل الحركة ذهابًا وإيابًا. وهذا يساعد نماذج التعلّم الآلي على تقليل دالة الهدف التدريبية بكفاءة أكبر. يهتم تحسين محركات البحث بظهور المواقع الإلكترونية؛ أما الزخم فيهتم بالتحديثات العددية لمعاملات النموذج.
آلية عمل الزخم#
أثناء الانحدار المتدرج، يحرّك النموذج أوزانه عكس اتجاه التدرج، أي الاتجاه الذي تزداد فيه دالة الخسارة بأسرع وتيرة. يضيف الزخم الكلاسيكي، المعروف أيضًا باسم زخم بولياك أو طريقة الكرة الثقيلة، قصورًا ذاتيًا إلى هذه الحركة. وقدّمه بوريس بولياك في عمله الصادر عام 1964 حول تسريع الطرق التكرارية.
يحتفظ المحسّن بمخزن للسرعة، يضم قيمة تراكمية واحدة لكل معامل. يضرب كل تحديث المخزن القديم في معامل الزخم، ويضيف إليه التدرج الحالي، ثم يطرح من الأوزان المخزن الناتج مضروبًا في معدل التعلّم. وفي الشبكات العصبية، توفّر الانتشار العكسي هذه التدرجات؛ ويحتفظ المحسّن بالمخزن بين التحديثات.
يكون الزخم مفيدًا بوجه خاص على أسطح الخسارة الممدودة، حيث يكون الانحناء حادًا عبر الوادي وضحلًا على امتداده. وتتراكم التدرجات التي تشير مرارًا إلى اتجاه الوادي، بينما تلغي المكونات المتناوبة عبره بعضها جزئيًا. ومع الانحدار المتدرج العشوائي، تخفف هذه الذاكرة أيضًا التقلبات بين الدفعات المصغّرة. وتفسّر ديناميكيات الخسارة التربيعية للزخم كلاً من تسريعه والاهتزازات التي قد يسببها بالقرب من نقطة الحد الأدنى.
الزخم ومعدل التعلّم والطرق ذات الصلة#
يتراوح معامل الزخم، الذي يُرمز إليه عادةً بـ beta أو mu، بين الصفر والواحد. وتعيد القيمة صفر الانحدار المتدرج العادي؛ أما القيم الأقرب إلى الواحد فتحتفظ بالتدرجات الأقدم مدة أطول. وتُعد القيمة 0.9 نقطة بداية شائعة. ومع مخزن سرعة غير مُطبّع وتدرج ثابت، تقترب السرعة المتراكمة عند 0.9 من عشرة أضعاف ذلك التدرج، مقابل مئة ضعف عند 0.99. لذلك، يتفاعل الزخم ومعدل التعلّم بقوة أثناء ضبط المعلمات الفائقة.
يؤدي الجمع بينهما باندفاع مفرط إلى تجاوز نقطة الحد الأدنى: إذ تعبرها التحديثات مرارًا، ما يسبب تذبذب الخسارة أو التباعد. ويحدث ذلك حتى مع دوال الهدف التربيعية الملساء. ويغيّر جدول معدل التعلّم مقدار التحديث أثناء التدريب، بينما يحدد الزخم مقدار استمرار أثر الاتجاهات السابقة.
يستخدم خوارزميتا تحسين متقاربتان هذا السجل بطريقتين مختلفتين:
- يحسب زخم نيستيروف التدرج عند موضع استشرافي يُحدَّد باستخدام السرعة المحتفَظ بها، ما يتيح للتدرج تصحيح الحركة المتوقعة.
- يجمع Adam بين متوسط مرجّح أسي للتدرج ومتوسط لمربّع التدرج، يضبط التحديثات لكل معامل على حدة. ويتحكم
beta1فيه بذاكرة التدرجات.
مثال مبسّط باستخدام PyTorch#
يقارن هذا المثال باستخدام PyTorch نقاط بداية متطابقة ومعدلات تعلّم متطابقة على دالة هدف تربيعية ممدودة. وتتولى آلية تنفيذ SGD الرسمية إدارة مخزن الزخم تلقائيًا.
import torch
# Curvature is 50 times greater along the second coordinate.
scale = torch.tensor([1.0, 50.0])
for momentum in (0.0, 0.9):
weights = torch.tensor([5.0, 1.0], requires_grad=True)
optimizer = torch.optim.SGD([weights], lr=0.015, momentum=momentum)
for step in range(100):
optimizer.zero_grad()
loss = (scale * weights.square()).sum()
loss.backward()
optimizer.step()
final_loss = (scale * weights.square()).sum().item()
print(f"Momentum {momentum}: loss = {final_loss:.6f}")بعد 100 تحديث، تبلغ الخسارة نحو 0.056531 دون زخم و0.000216 مع الزخم. ويسرّع سجل الاتجاهات المتراكم التقدم على امتداد المحور الضحل.
استخدامات الزخم في تدريب الرؤية الحاسوبية#
يدعم الزخم تدريب الشبكات العصبية الالتفافية لمهام تصنيف الصور واكتشاف الأجسام. ويتيح تدريب Ultralytics YOLO استخدام زخم نيستيروف عند تحديد optimizer="SGD"، كما يتحكم الإعداد momentum في سجل التحديثات المحتفَظ به. ويمرّر تنفيذ أداة التدريب هذا المعامل إلى المحسّن باستخدام nesterov=True.
من التطبيقات البارزة إجراء التدريب الأصلي لـ ResNet على ImageNet. استخدمت تلك النماذج SGD مع معامل زخم 0.9، وحجم الدفعة قدره 256، ومعامل اضمحلال الأوزان 0.0001، ومعدل تعلّم ابتدائي 0.1، مع خفضه إلى عُشره عندما استقر الخطأ.










