تقویت گرادیان مانند کیسه و تقویت، روشی است که در بالای الگوریتم یادگیری ماشین دیگری اعمال می شود. به طور غیررسمی، تقویت گرادیان شامل دو نوع مدل است:
- یک مدل یادگیری ماشینی "ضعیف" که معمولاً یک درخت تصمیم است.
- یک مدل یادگیری ماشینی "قوی" که از چندین مدل ضعیف تشکیل شده است.
در تقویت گرادیان، در هر مرحله، یک مدل ضعیف جدید برای پیش بینی "خطای" مدل قوی فعلی (که پاسخ شبه نامیده می شود) آموزش داده می شود. "خطا" را بعداً شرح خواهیم داد. در حال حاضر، فرض کنید "خطا" تفاوت بین پیش بینی و برچسب رگرسیون است. سپس مدل ضعیف (یعنی "خطا") با علامت منفی به مدل قوی اضافه می شود تا خطای مدل قوی کاهش یابد.
افزایش گرادیان تکراری است. هر تکرار فرمول زیر را فراخوانی می کند:
\[ 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
بیایید این کد را روی مجموعه داده زیر اعمال کنیم:
شکل 25. یک مجموعه داده رگرسیون مصنوعی با یک ویژگی عددی.
در اینجا سه نمودار پس از اولین تکرار الگوریتم تقویت گرادیان آورده شده است:
شکل 26. سه نمودار پس از اولین تکرار.
در مورد نمودارهای شکل 26 به نکات زیر توجه کنید:
- نمودار اول پیش بینی های مدل قوی را نشان می دهد که در حال حاضر همیشه 0 است.
- نمودار دوم خطا را نشان می دهد که برچسب مدل ضعیف است.
- نمودار سوم مدل ضعیف را نشان می دهد.
اولین مدل ضعیف، یادگیری نمایش درشت برچسب است و بیشتر بر روی قسمت چپ فضای ویژگی (بخشی با بیشترین تنوع و در نتیجه بیشترین خطا برای مدل اشتباه ثابت) تمرکز میکند.
در زیر همان نمودارها برای تکرار دیگری از الگوریتم آمده است:
شکل 27. سه نمودار پس از تکرار دوم.
در مورد نمودارهای شکل 27 به نکات زیر توجه کنید:
- مدل قوی اکنون شامل پیش بینی مدل ضعیف تکرار قبلی است.
- خطای جدید مدل قوی کمی کوچکتر است.
- پیشبینی جدید مدل ضعیف اکنون روی قسمت سمت راست فضای ویژگی متمرکز شده است.
ما الگوریتم را برای 8 تکرار دیگر اجرا می کنیم:
شکل 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