درختان تصمیم تقویت شده با گرادیان

تقویت گرادیان مانند کیسه و تقویت، روشی است که در بالای الگوریتم یادگیری ماشین دیگری اعمال می شود. به طور غیررسمی، تقویت گرادیان شامل دو نوع مدل است:

  • یک مدل یادگیری ماشینی "ضعیف" که معمولاً یک درخت تصمیم است.
  • یک مدل یادگیری ماشینی "قوی" که از چندین مدل ضعیف تشکیل شده است.

در تقویت گرادیان، در هر مرحله، یک مدل ضعیف جدید برای پیش بینی "خطای" مدل قوی فعلی (که پاسخ شبه نامیده می شود) آموزش داده می شود. "خطا" را بعداً شرح خواهیم داد. در حال حاضر، فرض کنید "خطا" تفاوت بین پیش بینی و برچسب رگرسیون است. سپس مدل ضعیف (یعنی "خطا") با علامت منفی به مدل قوی اضافه می شود تا خطای مدل قوی کاهش یابد.

افزایش گرادیان تکراری است. هر تکرار فرمول زیر را فراخوانی می کند:

\[ F_{i+1} = F_i - f_i \]

کجا:

  • $F_i$ مدل قوی در مرحله $i$ است.
  • $f_i$ مدل ضعیف در مرحله $i$ است.

این عملیات تا زمانی تکرار می شود که یک معیار توقف برآورده شود، مانند حداکثر تعداد تکرارها یا اگر مدل (قوی) شروع به بیش از حد برازش کند همانطور که در یک مجموعه داده اعتبارسنجی جداگانه اندازه گیری می شود.

بیایید تقویت گرادیان را در یک مجموعه داده رگرسیون ساده نشان دهیم که در آن:

  • هدف پیش‌بینی $y$ از $x$ است.
  • مدل قوی به صورت ثابت صفر مقداردهی اولیه می شود: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

بیایید این کد را روی مجموعه داده زیر اعمال کنیم:

A plot of ground truth for one feature, x, and its label, y. The plot is a
series of somewhat damped sine
waves.

شکل 25. یک مجموعه داده رگرسیون مصنوعی با یک ویژگی عددی.

در اینجا سه ​​نمودار پس از اولین تکرار الگوریتم تقویت گرادیان آورده شده است:

Three plots. The first plot shows the prediction of the strong model, which is
a straight line of slope 0 and y-intercept 0. The second plot shows the error of
the strong model, which is a series of sine waves. The third plot shows the
prediction of the weak model, which is a set of square
waves.

شکل 26. سه نمودار پس از اولین تکرار.

در مورد نمودارهای شکل 26 به نکات زیر توجه کنید:

  • نمودار اول پیش بینی های مدل قوی را نشان می دهد که در حال حاضر همیشه 0 است.
  • نمودار دوم خطا را نشان می دهد که برچسب مدل ضعیف است.
  • نمودار سوم مدل ضعیف را نشان می دهد.

اولین مدل ضعیف، یادگیری نمایش درشت برچسب است و بیشتر بر روی قسمت چپ فضای ویژگی (بخشی با بیشترین تنوع و در نتیجه بیشترین خطا برای مدل اشتباه ثابت) تمرکز می‌کند.

در زیر همان نمودارها برای تکرار دیگری از الگوریتم آمده است:

Three plots. The first plot shows the prediction of the strong model, which is
an inverse of the plot of the prediction of the weak model from the previous
Figure. The second plot shows the error of the strong model, which is a noisy
set of sine waves. The third plot shows the prediction of the weak model, which
is a couple of square
waves.

شکل 27. سه نمودار پس از تکرار دوم.

در مورد نمودارهای شکل 27 به نکات زیر توجه کنید:

  • مدل قوی اکنون شامل پیش بینی مدل ضعیف تکرار قبلی است.
  • خطای جدید مدل قوی کمی کوچکتر است.
  • پیش‌بینی جدید مدل ضعیف اکنون روی قسمت سمت راست فضای ویژگی متمرکز شده است.

ما الگوریتم را برای 8 تکرار دیگر اجرا می کنیم:

The plots show the strong model gradually becoming closer to ground truth
while the prediction of the weak model gradually becomes, well,
weaker.

شکل 28. سه نمودار بعد از تکرار سوم و تکرار دهم.

در شکل 28، توجه داشته باشید که پیش‌بینی مدل قوی شروع به شبیه‌سازی نمودار مجموعه داده‌ها می‌کند.

این شکل ها الگوریتم تقویت گرادیان را با استفاده از درخت های تصمیم به عنوان یادگیرندگان ضعیف نشان می دهد. به این ترکیب درختان با گرادیان تقویت شده (تصمیم گیری) می گویند.

نمودارهای قبلی جوهره افزایش گرادیان را نشان می دهد. با این حال، این مثال فاقد دو عملیات دنیای واقعی زیر است:

  • انقباض
  • بهینه سازی مقادیر برگ با یک مرحله از روش نیوتن

انقباض

مدل ضعیف $f_i$ قبل از اینکه به مدل قوی $F_i$ اضافه شود در مقدار کوچک $\nu$ ضرب می شود (به عنوان مثال $\nu = 0.1$). این مقدار کوچک انقباض نامیده می شود. به عبارت دیگر، به جای هر تکرار از فرمول زیر استفاده کنید:

\[ F_{i+1} = F_i - f_i \]

هر تکرار از فرمول زیر استفاده می کند:

\[ F_{i+1} = F_i - \nu f_i \]

انقباض در تقویت گرادیان مشابه نرخ یادگیری در شبکه های عصبی است. Shrinkage سرعت یادگیری مدل قوی را کنترل می‌کند که به محدود کردن بیش از حد برازش کمک می‌کند. یعنی مقدار انقباض نزدیکتر به 0.0 بیش از حد برازش را کاهش می دهد تا مقدار انقباض نزدیک به 1.0.

در کد بالا، انقباض به صورت زیر پیاده سازی می شود:

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions