التحسين1964تأسيسي9 دقيقة قراءة

بعض طرق تسريع تقارب الأساليب التكرارية

Some Methods of Speeding Up the Convergence of Iteration Methods

Polyak, B. T. — USSR Computational Mathematics and Mathematical Physics

المشكلة

يخطو خطوات صغيرة تتناسب مع ميل السطح تحته مباشرة. المشكلة تظهر حين يكون سطح الخسارة وادياً ضيّقاً مستطيلاً — حادّ الانحناء في اتجاه ومنبسطاً في آخر — فبدل أن يسير المُحسِّن على طول قاع الوادي، يتأرجح ذهاباً وإياباً بين جدرانه. وكلّما ساء رقم الحالة (نسبة أكبر انحناء إلى أصغره)، ازداد التأرجح حدّةً وتباطأ التقارب حتى يكاد يتوقّف.

الإسهام

أضاف بولياك حدّاً واحداً فقط إلى قاعدة تحديث الانحدار التدريجي: كسراً من الخطوة السابقة. هذا الحدّ يعمل كالقصور الذاتي في الفيزياء — يُراكم السرعة حين يشير التدرّج في الاتجاه ذاته باستمرار، ويُخمد التذبذبات حين يتأرجح. على الدوال التربيعية المحدّبة بقوّة، يُحسِّن الأمثل معدّل التقارب من (κ−1)/(κ+1) إلى (√κ−1)/(√κ+1) حيث κ رقم الحالة. الفارق عمليّاً هائل: مسألة برقم حالة κ=100 تحتاج نحو 200 خطوة لتنصيف الخطأ بدون زخم، لكن مع الزخم لا تحتاج إلا نحو 18 خطوة.

الأثر

كان الزخم أول تقنية «تسريع» في تاريخ الأمثَلة، ولا يزال حاضراً في كل مُحسِّن للتعلّم العميق تقريباً. مع الزخم هو الأداة الأساسية لتدريب الشبكات العصبية. الفكرة ألهمت مباشرةً تدرّج نيستيروف المُسرَّع (1983)، وهي مكوِّن جوهري في مُحسِّن Adam (2014) الذي يُعدّ اليوم الأكثر انتشاراً في الذكاء الاصطناعي. أمّا التشبيه الفيزيائي الذي طرحه بولياك — تخيُّل الأمثَلة ككرة تتدحرج على سطح — شكّل الطريقة التي يفكّر بها الباحثون في ديناميكيات الأمثَلة حتى اليوم.

تخيّل أنك تسير في وادٍ جبلي يلفّه الضباب ولا تملك إلا أن تتحسّس ميل الأرض تحت قدميك. هذا بالضبط ما يفعله الانحدار التدريجي: خطوة حذرة نحو الأسفل، توقّف، تحسُّس الميل من جديد، ثم خطوة أخرى. في وادٍ طويل وضيق ستجد نفسك تتأرجح بين الجدارين ذهاباً وإياباً بدل أن تمشي على طول القاع.

الآن تخيّل أنك كرة ثقيلة تتدحرج. حين يستمرّ الميل في الاتجاه نفسه تكتسب سرعة، وحين ينعكس الميل فجأة عند جدار الوادي تقاوم كتلتُك الانعكاس — تتباطأ بدل أن ترتدّ بالكامل. المعلومات المتاحة لم تتغيّر، لكنّ الزخم يحملك على طول قاع الوادي أسرع بكثير من الخطوات الحذرة المتردّدة.

المشكلة: التأرجح على السطوح سيئة رقم الحالة

لنفترض أننا نريد إيجاد القيمة الصغرى لدالة ملساء f(x)f(\mathbf{x}). الانحدار التدريجي القياسي يسير عكس اتجاه في كل خطوة:

xk+1=xkαf(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \alpha \nabla f(\mathbf{x}_k)

حيث α\alpha هو . لو كان السطح كرويّاً مثالياً — أي الانحناء متساوٍ في كل اتجاه — لعمل هذا بامتياز، لأنّ كل خطوة تتّجه مباشرة نحو القاع.

لكنّ سطوح الخسارة في مسائل الحقيقية نادراً ما تكون كروية. الشائع أنها وديان مستطيلة: حادّة الانحناء في بعض الاتجاهات ومنبسطة في أخرى. نسبة أكبر انحناء إلى أصغره تُعرف بـ κ=L/μ\kappa = L / \mu.

هنا يقع الانحدار التدريجي في مأزق: إذا كبّرنا معدّل التعلّم بما يكفي للتقدّم في الاتجاه المنبسط، تجاوز المُحسِّن الهدف في الاتجاه الحادّ فنشأ . وإذا صغّرناه لتجنّب التذبذب، أصبح التقدّم في الاتجاه المنبسط بطيئاً بشكل مؤلم.

معدّل على دالة تربيعية محدّبة بقوّة هو ρGD=κ1κ+1\rho_{\text{GD}} = \frac{\kappa - 1}{\kappa + 1}. حين يكون κ=100\kappa = 100 تصبح هذه النسبة 0.980.98 — أي أنّ كل خطوة لا تُقلّص الخطأ إلا بنسبة 2%، ونحتاج قرابة κ\kappa خطوة لمجرّد تنصيف الخطأ.

افتح في المختبر
شاهد كيف يتأرجح الانحدار التدريجي عبر وادٍ ضيق بينما ينزلق الزخم على طول القاع. اسحب مؤشر رقم الحالة لتضييق الوادي.
تستيقظ التجربة عند وصولك…

الفكرة: تذكّر خطوة الأمس

فكرة بولياك كانت في غاية البساطة: أضِف كسراً من الخطوة السابقة إلى الخطوة الحالية. بدلاً من أن يقرّر وجهته بناءً على الميل الحالي وحده، يأخذ في الحسبان الاتجاه الذي كان يسير فيه فعلاً.

يمكن تصوُّر الأمر كأنّنا نمنح المُحسِّن ذاكرة. الانحدار التدريجي بطبيعته بلا ذاكرة — ينسى كل شيء عند كل خطوة. الزخم يمنحه ذاكرة بمقدار خطوة واحدة: «كنت أتّجه هنا، فما لم يعترض التدرّج بقوّة، سأستمرّ.»

حين تشير التدرّجات باستمرار في الاتجاه نفسه (على طول قاع الوادي)، يتراكم الزخم وينمو حجم الخطوة الفعلي فيتسارع المُحسِّن. وحين تتعاقب التدرّجات بإشارات متعاكسة (التذبذب عند الجدران)، يُلغي حدّ الزخم جزءاً من التدرّج تلقائياً فيُخمد التذبذب.

xk+1=xkαf(xk)+β(xkxk1)\mathbf{x}_{k+1} = \mathbf{x}_k - \alpha \nabla f(\mathbf{x}_k) + \beta (\mathbf{x}_k - \mathbf{x}_{k-1})
تحديث الكرة الثقيلة — الانحدار التدريجي مع الزخمα = معدّل التعلّم · ∇f(x_k) = التدرّج عند الموضع الحالي · β = معامل الزخم (عادةً 0.9) · (x_k − x_{k-1}) = اتجاه الخطوة السابقة. حدّ β هو الإسهام الكامل لهذه الورقة: إضافة قصور ذاتي للمُحسِّن.

هناك صيغة مكافئة أكثر شيوعاً تستعمل متغيّر سرعة v\mathbf{v}:

vk+1=βvkαf(xk)\mathbf{v}_{k+1} = \beta \mathbf{v}_k - \alpha \nabla f(\mathbf{x}_k) xk+1=xk+vk+1\mathbf{x}_{k+1} = \mathbf{x}_k + \mathbf{v}_{k+1}

v\mathbf{v} هنا يمثّل سرعة «الكرة الثقيلة». في كل خطوة تتلاشى السرعة بمقدار β\beta (كأنّها احتكاك)، وتتلقّى دفعة من سالب التدرّج (كأنّها جاذبية). بعد ذلك تتحرّك ببساطة في اتجاه السرعة.

هذه الصيغة تكشف الفيزياء بوضوح: حين يقترب β\beta من 1 ينخفض الاحتكاك فتواصل الكرة التدحرج طويلاً، وحين يساوي β\beta صفراً نعود إلى الانحدار التدريجي الصِّرف بلا قصور ذاتي على الإطلاق.

افتح في المختبر
اسحب β لترى كيف تتراكم السرعة مع التدرّجات المتّسقة وتُخمَد عند الانعكاسات.
تستيقظ التجربة عند وصولك…

لماذا ينجح: فيزياء الأمثَلة

طريقة بولياك مستوحاة من قانون نيوتن الثاني. كرة على سطح تتأثّر بالجاذبية (التدرّج) وبالاحتكاك (معامل الإخماد β\beta). في الزمن المتصل تُكتب المعادلة هكذا:

x(t)+γx(t)+f(x(t))=0\mathbf{x}''(t) + \gamma \mathbf{x}'(t) + \nabla f(\mathbf{x}(t)) = 0

هذه معادلة مذبذب توافقي مُخمَد. الاحتكاك γ\gamma يمنع الكرة من تجاوز والتأرجح بلا توقّف. الجوهري هنا أنّ ديناميكيات الرتبة الثانية (أي التسارع وليس السرعة فحسب) تسمح للنظام باستغلال معلومات الانحناء ضمنياً دون أن نحسب مصفوفة قطّ.

على دالة تربيعية f(x)=12xTAxf(\mathbf{x}) = \frac{1}{2}\mathbf{x}^T A \mathbf{x}، تمثّل لـAA الانحناءات في كل اتجاه. بدون زخم، يتقدّم التقارب في كل اتجاه ذاتي بشكل مستقل بمعدّل 1αλi|1 - \alpha \lambda_i|، وعلى حجم الخطوة الأمثل أن يوازن بين الاتجاه الأسرع (λmax=L\lambda_{\max} = L) والأبطأ (λmin=μ\lambda_{\min} = \mu).

مع الزخم، ينخفض معامل التقارب إلى κ1κ+1\frac{\sqrt{\kappa} - 1}{\sqrt{\kappa} + 1} — الجذر التربيعي يُحوِّل رقم الحالة. الفرق بين O(κ)O(\kappa) تكرار وO(κ)O(\sqrt{\kappa}) تكرار يعني انتقالاً من اعتماد تربيعي إلى خطّي على صعوبة المسألة.

افتح في المختبر
اسحب رقم الحالة κ وقارن عدد التكرارات حتى التقارب.
تستيقظ التجربة عند وصولك…

اختيار الزخم المناسب

اشتقّ بولياك المثلى للدوال التربيعية المحدّبة بقوّة. إذا كانت μ\mu أصغر قيمة ذاتية لمصفوفة هيسيان وLL أكبرها:

α=4(L+μ)2β=(LμL+μ)2\alpha^* = \frac{4}{(\sqrt{L} + \sqrt{\mu})^2} \qquad \beta^* = \left(\frac{\sqrt{L} - \sqrt{\mu}}{\sqrt{L} + \sqrt{\mu}}\right)^2

في الواقع العملي لا نعرف μ\mu وLL، لذا يستخدم الممارسون عادةً β=0.9\beta = 0.9 (وأحياناً 0.99). السبب أنّ معظم سطوح الخسارة في ذات رقم حالة مرتفع جداً (κ1\kappa \gg 1)، وعنده يقترب β\beta^* من 1 تلقائياً.

هناك تفاعل مهم بين معدّل التعلّم α\alpha وβ\beta: زخم أعلى يتيح خطوة فعلية أكبر. كقاعدة ذهنية، الزخم يُضخِّم معدّل التعلّم بعامل يقارب 11β\frac{1}{1 - \beta} — فمع β=0.9\beta = 0.9 يصبح المعدّل الفعلي عشرة أضعاف المعدّل الاسمي.

افتح في المختبر
اضبط L وμ لترى كيف يتغيّر β* وα* الأمثلان. لاحظ كيف يقترب β* من 1 كلما كبر رقم الحالة.
تستيقظ التجربة عند وصولك…

الزخم بوصفه متوسطاً متحركاً أُسّياً

يمكن النظر إلى صيغة السرعة من زاوية أخرى مفيدة. إذا فككنا العلاقة التكرارية vk+1=βvkαf(xk)\mathbf{v}_{k+1} = \beta \mathbf{v}_k - \alpha \nabla f(\mathbf{x}_k) نحصل على:

vk+1=αi=0kβkif(xi)\mathbf{v}_{k+1} = -\alpha \sum_{i=0}^{k} \beta^{k-i} \nabla f(\mathbf{x}_i)

أي أنّ السرعة ما هي إلا مجموع مُرجَّح أُسّياً لجميع التدرّجات السابقة، تحظى فيه التدرّجات الأحدث بالوزن الأكبر. هذا بالضبط ما يُعرف بـ — الأداة ذاتها المُستخدمة في معالجة الإشارات لتنعيم البيانات المُشوَّشة.

هذه الزاوية تفسّر لماذا ينفع الزخم تحديداً مع التدرّجات العشوائية المُشوَّشة: المتوسط يُنعّم ويُبقي على الإشارة المتّسقة. في الانحدار التدريجي العشوائي، تدرّج كل هو تقدير مُشوَّش للتدرّج الحقيقي، والزخم فعلياً يحسب متوسطاً على عدّة دفعات.

افتح في المختبر
شاهد كيف يُنعّم الزخم التدرّجات العشوائية المُشوَّشة. بدِّل الضوضاء لتقارن.
تستيقظ التجربة عند وصولك…

الفكرة ذاتها في شيفرة برمجية

الانحدار التدريجي العشوائي مع الزخم، كاملاًpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import numpy as np

def sgd_momentum(gradient_fn, x0, lr=0.01, beta=0.9, steps=100):
    """تصغير f(x) باستخدام الانحدار التدريجي العشوائي مع زخم بولياك.

    gradient_fn: تُرجع ∇f(x) — قد تكون عشوائية
    x0:          المعاملات الأولية
    lr:          معدّل التعلّم  α
    beta:        معامل الزخم  β  (0 = انحدار عشوائي صِرف)
    """
    x = x0.copy()
    v = np.zeros_like(x)         # السرعة تبدأ من الصفر

    for k in range(steps):
        g = gradient_fn(x)       # حساب التدرّج (العشوائي)
        v = beta * v - lr * g    # تحديث السرعة: إخماد + دفع
        x = x + v               # اتّبع السرعة

    return x

# مثال: تصغير  f(x,y) = 50x² + y²  (رقم الحالة κ = 100)
def grad(x):
    return np.array([100 * x[0], 2 * x[1]])

x_star = sgd_momentum(grad, np.array([1.0, 1.0]), lr=0.002, beta=0.9)
# x_star ≈ [0, 0]  — وصول أسرع بكثير مما لو كان بدون زخم

لماذا غيّر كل شيء: من 1964 إلى كل مُحسِّن اليوم

  1. 1964

    الكرة الثقيلة لبولياك

    أول طريقة زخم. تُضيف β(x_k − x_{k-1}) إلى الانحدار التدريجي. أثبت التقارب المحلي الأمثل على الدوال التربيعية المحدّبة بقوّة.

  2. 1983

    تدرّج نيستيروف المُسرَّع

    يحسب التدرّج عند موقع الاستشراف. يحقّق معدّل O(1/k²) مُثبَت الأمثلية للدوال المحدّبة العامة — أول طريقة «مُسرَّعة شاملاً».

  3. 2012

    الانحدار العشوائي مع الزخم يُدرِّب AlexNet

    إنجاز كريجيفسكي على ImageNet استخدم الانحدار العشوائي مع زخم β=0.9. هذه التوليفة أصبحت الوصفة المعيارية لتدريب الشبكات الالتفافية العميقة.

  4. 2014

    مُحسِّن Adam

    جمع كينغما وبا بين زخم بولياك (β₁) ومعدّلات التعلّم التكيّفية لكل معامل (β₂) في المُحسِّن الأكثر انتشاراً في التعلّم العميق.

  5. 2017

    الانحدار العشوائي مع الزخم يُدرِّب المحوِّلات

    ورقة «الانتباه هو كل ما تحتاجه» استخدمت Adam (الذي عزمه الأول هو زخم بولياك) لتدريب المحوِّل. كل نموذج لغوي كبير بعدها ورث هذا الاختيار.

الزخم في شجرة عائلة المُحسِّنات

زخم بولياك هو البذرة التي نبتت منها شجرة المُحسِّنات الحديثة. العلاقة مباشرة ويمكن تتبّعها:

  • الانحدار العشوائي الصِّرف: xk+1=xkαf(xk)\mathbf{x}_{k+1} = \mathbf{x}_k - \alpha \nabla f(\mathbf{x}_k) — بلا ذاكرة.
  • الانحدار العشوائي + زخم (بولياك، 1964): يُضيف β(xkxk1)\beta(\mathbf{x}_k - \mathbf{x}_{k-1}) — ذاكرة بخطوة واحدة.
  • زخم نيستيروف (1983): يحسب التدرّج عند xk+βvk\mathbf{x}_k + \beta \mathbf{v}_k — «انظر قبل أن تقفز.»
  • Adam (2014): زخم على العزم الأول (β1\beta_1) والعزم الثاني (β2\beta_2) للتدرّج.

المسار من الانحدار العشوائي إلى Adam هو سلسلة من الطرق المتزايدة تطوّراً للاستفادة من تاريخ التدرّجات — وكلّ ذلك بدأ بحدٍّ إضافي واحد في قاعدة تحديث بولياك.

افتح في المختبر
انقر على أي مُحسِّن لترى كيف ترتبط قاعدة تحديثه بزخم بولياك الأصلي.
تستيقظ التجربة عند وصولك…

المرجعPolyak, B. T.. Some Methods of Speeding Up the Convergence of Iteration Methods. USSR Computational Mathematics and Mathematical Physics, 1964.

مصطلحات هذه الورقة