الطرائق التجميعية2001متوسط11 دقيقة قراءة

التقريب الجشع للدوال: آلة التعزيز التدرُّجي

Greedy Function Approximation: A Gradient Boosting Machine

Friedman, J. H. — Annals of Statistics

المشكلة

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

الإسهام

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

الأثر

أصبح التعزيز التدرُّجي الخوارزمية الأنجح في التعلم الموجَّه على البيانات الجدولية والمهيكلة. أحفاده المباشرون — XGBoost وLightGBM وCatBoost — هيمنوا على مسابقات Kaggle ويُشغّلون أنظمة إنتاجية تمتد من كشف الاحتيال إلى التشخيص الطبي. كما أثّرت القفزة المفاهيمية التي قدّمتها الورقة — الأمثَلة في فضاء الدوال — في طريقة تفكير الباحثين حول تجميع النماذج والنماذج الجمعية والعلاقة بين التعلم الإحصائي والأمثَلة العددية.

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

هذا هو : سلسلة من نماذج صغيرة غير مثالية، كل واحد منها ينحت الأخطاء المتبقية التي خلّفها من سبقه.

المشكلة: النماذج المنفردة ضعيفة، والتجميع العشوائي لا يتعلّم من أخطائه

بحلول أواخر التسعينيات، وقع ممارسو تعلّم الآلة في معضلة محبطة. المنفردة شفافة وسريعة، لكن تنبؤاتها خشنة — فهي النموذج الذي نسمّيه في نظرية التجميع. يمكنك تنمية شجرة كبيرة، لكنها ستقع في على بيانات وتفشل على البيانات الجديدة.

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

ما كان ينقص هو طريقة منهجية لبناء تجميع تتابعي، تستهدف فيه كل شجرة جديدة تحديداً الأخطاء المتبقية من الجولة السابقة، وأن ينجح ذلك مع أي يحتاجها الممارس.

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

الفكرة المحورية: انحدار تدرُّجي، لكن في فضاء الدوال

في المعتاد، لديك معاملات θ\theta ودالة خسارة L(θ)L(\theta). تحسب θL\nabla_\theta L ثم تخطو خطوة في الاتجاه المعاكس: θθηθL\theta \leftarrow \theta - \eta \nabla_\theta L. الصعوبة الأساسية هنا هي اختيار الطريقة المناسبة لتمثيل النموذج بمعاملات.

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

ri=L(yi,F(xi))F(xi)r_i = -\frac{\partial L(y_i, F(x_i))}{\partial F(x_i)}

تُسمّى هذه القيم rir_i . في حالة الخطأ التربيعي تساوي تماماً البواقي العادية yiF(xi)y_i - F(x_i). أما في دوال الخسارة الأخرى فهي تُشير إلى اتجاه عند كل نقطة. لكنّ المشكلة أنك لا تستطيع اتّباع هذا التدرُّج مباشرةً — ليس لديك حرية تعديل كل تنبؤ على حدة — لذلك الحل هو ملاءمة شجرة جديدة تُقرِّب تلك البواقي الزائفة. هكذا تصبح الشجرة نسخة عملية وقابلة للتعميم من خطوة التدرُّج المثالية.

افتح في المختبر
تنقّل عبر 5 جولات تعزيز. راقب كيف تتقلّص البواقي الزائفة مع تصحيح التجميع للأخطاء جولةً بعد جولة.
تستيقظ التجربة عند وصولك…

الخوارزمية: التعزيز التدرُّجي خطوة بخطوة

بنية خوارزمية التعزيز التدرُّجي أنيقة ومباشرة. تبدأ باختيار دالة خسارة L(y,F)L(y, F) تناسب المسألة — الخطأ التربيعي لمسائل الانحدار، أو الانحراف اللوجستي لمسائل التصنيف، أو خسارة هوبر للانحدار المتين. ثم تُكرّر الخطوات التالية:

1. التهيئة بتنبؤ ثابت: F0(x)=argminciL(yi,c)F_0(x) = \arg\min_c \sum_i L(y_i, c) (في الخطأ التربيعي، هذا ببساطة متوسط قيم yy).

2. في كل جولة m=1,2,,Mm = 1, 2, \ldots, M:

  • احسب البواقي الزائفة: rim=L(yi,Fm1(xi))Fm1(xi)r_{im} = -\frac{\partial L(y_i, F_{m-1}(x_i))}{\partial F_{m-1}(x_i)}
  • لائم شجرة انحدار hm(x)h_m(x) على البواقي الزائفة {rim}\{r_{im}\}
  • أوجد حجم الخطوة الأمثل γm\gamma_m عبر : γm=argminγiL(yi,Fm1(xi)+γhm(xi))\gamma_m = \arg\min_\gamma \sum_i L(y_i, F_{m-1}(x_i) + \gamma \cdot h_m(x_i))
  • حدّث النموذج: Fm(x)=Fm1(x)+ηγmhm(x)F_m(x) = F_{m-1}(x) + \eta \cdot \gamma_m \cdot h_m(x)

3. النتيجة هي التجميع النهائي FM(x)F_M(x).

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

Fm(x)=Fm1(x)+ηγmhm(x)F_m(x) = F_{m-1}(x) + \eta \cdot \gamma_m \cdot h_m(x)
قاعدة تحديث التعزيز التدرُّجي — قلب الخوارزميةفي كل جولة يُضاف متعلّم ضعيف جديد وظيفته تصحيح الأخطاء المتبقية في التجميع الحالي. يُقلَّص إسهام هذا المتعلّم قبل إضافته إلى النموذج القائم، والتنبؤ النهائي هو حصيلة تراكم كل هذه التصحيحات المتتالية عبر الجولات.
افتح في المختبر
انقر «الجولة التالية» لإضافة الأشجار واحدة تلو الأخرى. راقب تنبؤ التجميع (الأخضر) وهو يقترب تدريجياً من الدالة الحقيقية (الأزرق المتقطع).
تستيقظ التجربة عند وصولك…

صندوق الأدوات: دالة خسارة لكل مسألة

قوة التعزيز التدرُّجي تكمن في مرونته وقابليته للتبديل. غيِّر دالة الخسارة وستحصل على سلوك مختلف تماماً — دون أن تمسّ جوهر الخوارزمية. قدّم فريدمان صيغاً جاهزة لأهم الحالات العملية:

المربعات الصغرى (LS): L=12(yF)2L = \frac{1}{2}(y - F)^2. البواقي الزائفة هنا ببساطة هي (yF)(y - F). سريعة الحساب وسلسة التدرُّج، لكنها حساسة للقيم الشاذة لأن الأخطاء الكبيرة تُربَّع فتُضخَّم.

الانحراف المطلق (LAD): L=yFL = |y - F|. البواقي الزائفة هي sign(yF)\text{sign}(y - F). متينة أمام القيم الشاذة لأن كل خطأ يُسهم بالمقدار نفسه بصرف النظر عن حجمه، لكن التدرُّج يفتقر إلى النعومة — يقفز فجأة عند الصفر.

خسارة هوبر: L=12(yF)2L = \frac{1}{2}(y-F)^2 حين yFδ|y-F| \leq \delta، وإلا δ(yFδ/2)\delta(|y-F| - \delta/2). دالة هجينة تجمع أفضل ما في الاثنتين — تربيعية للأخطاء الصغيرة فتُعطي تدرُّجات سلسة، وخطّية للأخطاء الكبيرة فتُقاوم القيم الشاذة. العتبة δ\delta تتحكم في نقطة الانتقال بين السلوكين.

الخسارة اللوجستية / الانحراف (للتصنيف): L=log(1+e2yF)L = \log(1 + e^{-2yF}) حيث y{1,+1}y \in \{-1, +1\}. التدرُّج السالب يدفع النقاط الخاطئة التصنيف بقوة أكبر، ويمتد طبيعياً إلى التصنيف متعدد الفئات عبر الانحراف المتعدد الحدود.

لتكوين صورة ذهنية: كل دالة خسارة ترسم تضاريس مختلفة تنحدر عبرها الخوارزمية. الخطأ التربيعي يرسم وعاءً سلساً مستديراً. الانحراف المطلق يرسم وادياً حادّاً كحرف V. وخسارة هوبر ترسم وعاءً يتسطّح عند الأطراف ليصبح وادياً مفتوحاً عند القيم الشاذة.

افتح في المختبر
اسحب نقطة القيمة الشاذة لترى كيف تستجيب كل دالة خسارة. لاحظ كيف تنتقل خسارة هوبر من السلوك التربيعي إلى الخطّي.
تستيقظ التجربة عند وصولك…

ترويض الجشع: الانكماش والتعزيز العشوائي

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

الانكماش (معدَّل التعلُّم η\eta): صغّر إسهام كل شجرة بضربه في معامل صغير η(0,1]\eta \in (0, 1]، عادةً بين 0.010.01 و0.10.1. تخيّله مقبض مستوى الصوت لكل مستشار: حين تخفضه يصبح كل تصحيح أهدأ، لكن اللجنة تحتاج جولات أكثر حتى تصل إلى الإجابة النهائية. التجارب العملية تُظهر أن قيمة η\eta صغيرة مع عدد أشجار أكبر تتفوق دائماً تقريباً على قيمة η\eta كبيرة مع عدد أشجار قليل. كلما صغرت الخطوات تحسّن التعميم — لكن على حساب مزيد من الحوسبة.

التعزيز التدرُّجي العشوائي: في كل جولة، لائم الشجرة على عيّنة فرعية عشوائية من بيانات التدريب (عادةً 50–80%) بدلاً من استخدام البيانات كاملة. هذه العشوائية تُقلّل التباين (بأسلوب يشبه فائدة التجميع بالعيّنات المتكررة)، وتُسرّع كل جولة، وتعمل كطبقة تنظيم إضافية. الفكرة توازي في الأمثَلة المعلمية.

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

TreeBoost: لماذا تُعدّ الأشجار المتعلّم الأساسي المثالي

من الناحية النظرية، يعمل التعزيز التدرُّجي مع أي متعلّم أساسي، لكن أشجار الانحدار هي الخيار الطاغي عملياً — وبيّن فريدمان السبب. شجرة القرار تُقسّم فضاء المدخلات إلى مناطق منفصلة {Rj}j=1J\{R_j\}_{j=1}^J وتتنبأ بقيمة ثابتة داخل كل منطقة:

h(x)=j=1Jcj1(xRj)h(x) = \sum_{j=1}^{J} c_j \cdot \mathbf{1}(x \in R_j)

هذه البنية تفتح الباب أمام تحسين جوهري: بدلاً من حجم خطوة واحد γ\gamma للشجرة بأكملها، يستخدم TreeBoost قيمة مثلى منفصلة γj\gamma_j لكل منطقة ورقية، تُحسَب بـالبحث الخطّي داخل تلك المنطقة:

γj=argminγxiRjL(yi,Fm1(xi)+γ)\gamma_j = \arg\min_\gamma \sum_{x_i \in R_j} L(y_i, F_{m-1}(x_i) + \gamma)

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

عمق الشجرة يتحكّم في تعقيد النموذج. وجد فريدمان أنّ الأشجار الضحلة (J=4J = 488 عقد طرفية) تُعطي أفضل النتائج. كل شجرة تلتقط تفاعلات من رتبة منخفضة (عمق 1 = لا تفاعلات، بحت؛ عمق 2 = تفاعلات ثنائية). ثم يبني التجميع تفاعلات معقدة من خلال جمع عدد كبير من التفاعلات البسيطة.

γj=argminγxiRjL(yi,Fm1(xi)+γ)\gamma_j = \arg\min_\gamma \sum_{x_i \in R_j} L(y_i, F_{m-1}(x_i) + \gamma)
الخطوة المثلى لكل ورقة — التحسين الجوهري في TreeBoostبخلاف التعزيز التدرُّجي العام، تحصل كل ورقة في الشجرة على مقدار تصحيح خاص بها. يُختار هذا المقدار بحيث يُقلّل خطأ التنبؤ للعيّنات الواقعة في تلك الورقة. نتيجة ذلك، تتكيّف مناطق مختلفة من فضاء السمات بمعدلات مختلفة، فتكون التحديثات أدق.
افتح في المختبر
استكشف بنية TreeBoost. انقر على أي عقدة ورقية لترى كيف يُحسَب حجم خطوتها المثلى بشكل مستقل.
تستيقظ التجربة عند وصولك…

قراءة النموذج: أهمية السمات والاعتماد الجزئي

رغم أنّ التعزيز التدرُّجي تجميعٌ من مئات الأشجار، إلا أنه يُوفّر أدوات تفسيرية عملية سلّط فريدمان الضوء عليها:

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

مخططات تُظهر التأثير الهامشي لسمة أو اثنتين على التنبؤ، بعد حساب المتوسط على قيم بقية السمات. تُجيب عن سؤال عملي: «إذا ثبّتنا كل شيء آخر، كيف يتغيّر التنبؤ عند تغيير هذه السمة؟» هذا يكشف شكل العلاقة — هل هي خطية، أم تتغيّر عند عتبة معينة، أم لها شكل أعقد.

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

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

الفكرة ذاتها في الكود

التعزيز التدرُّجي من الصفر (انحدار بالخطأ التربيعي)python

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

import numpy as np
from sklearn.tree import DecisionTreeRegressor

def gradient_boosting(X, y, n_rounds=100, lr=0.1, max_depth=3):
    """بناء تجميع تعزيز تدرُّجي لخسارة الخطأ التربيعي."""
    # الخطوة 1: التهيئة بالمتوسط
    F = np.full(len(y), y.mean())
    trees, gammas = [], []

    for m in range(n_rounds):
        # الخطوة 2أ: البواقي الزائفة = التدرُّج السالب لـ L = 0.5*(y-F)^2
        residuals = y - F  # للخطأ التربيعي: -dL/dF = y - F

        # الخطوة 2ب: لائم شجرة صغيرة على البواقي الزائفة
        tree = DecisionTreeRegressor(max_depth=max_depth)
        tree.fit(X, residuals)

        # الخطوة 2ج: تنبؤات الشجرة (تمثّل اتجاه خطوة التدرُّج)
        h = tree.predict(X)

        # الخطوة 2د: حدّث التجميع بمعدَّل التعلُّم (الانكماش)
        F = F + lr * h

        trees.append(tree)

    return trees, lr

def predict(X, trees, lr, y_train_mean):
    """التنبؤ باستخدام التجميع المُدرَّب."""
    F = np.full(len(X), y_train_mean)
    for tree in trees:
        F += lr * tree.predict(X)
    return F

# هذا هو التعزيز التدرُّجي: لائم البواقي، أضف التصحيح، كرِّر.
# XGBoost وLightGBM وCatBoost نسخ مُحسَّنة من هذه الحلقة.

لماذا كانت هذه الورقة مهمة

  1. 1996

    AdaBoost

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

  2. 2000

    الانحدار اللوجستي الجمعي

    قدّم فريدمان وهاستي وتيبشيراني رؤية إحصائية للتعزيز بوصفه نمذجة جمعية مرحلية، وربطوا AdaBoost بالانحدار اللوجستي المرحلي الأمامي.

  3. 2001

    آلة التعزيز التدرُّجي

    هذه الورقة. عمّم فريدمان التعزيز ليشمل أي دالة خسارة قابلة للاشتقاق عبر الانحدار التدرُّجي في فضاء الدوال. تضمّنت الورقة TreeBoost والانكماش وأدوات التفسير.

  4. 2002

    التعزيز التدرُّجي العشوائي

    في ورقة لاحقة، أثبت فريدمان أنّ سحب عيّنات فرعية عشوائية من بيانات التدريب في كل جولة يُحسّن الدقة والسرعة معاً — ناقلاً فائدة تقليل التباين من التجميع بالعيّنات المتكررة إلى التعزيز.

  5. 2016

    XGBoost

    بنى تشن وغيسترين نظاماً مُحسَّناً وقابلاً للتوسّع يستخدم تقريبات تايلور من الرتبة الثانية وتنظيماً مدمجاً وهندسة على مستوى البنية التحتية. هيمن على مسابقات Kaggle والتطبيقات الصناعية.

  6. 2017

    LightGBM

    قدّمت مايكروسوفت تقسيماً مبنياً على المدرّجات التكرارية ونموّاً على مستوى الأوراق، ما سرّع التدريب بشكل كبير على مجموعات البيانات الضخمة مع الحفاظ على الدقة.

  7. 2018

    CatBoost

    أضاف نظام ياندكس معالجة أصلية للسمات الفئوية وتعزيزاً مُرتَّباً لتقليل انزياح التنبؤ، محقّقاً نتائج قوية بأقل قدر من المعالجة المسبقة.

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

المرجعFriedman, Jerome H.. Greedy Function Approximation: A Gradient Boosting Machine. Annals of Statistics, 2001.

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