اگر همین حالا در حال اجرای جستوجوی شبکهای (Grid Search) برای یافتن بهترین ابرپارامترهای مدل خود هستید، احتمالاً بخش زیادی از توان محاسباتیتان را هدر میدهید. باید بدانید که در مدلهای Boosting، افزایش بیرویه عمق درختان برخلاف تصور رایج، دقت را بالا نمیبرد، بلکه مدل را به سمتی میبرد که حتی از یک درخت تصمیم تکشاخه (Decision Stump) هم ضعیفتر شود.
به نقل از راهنمای فنی منتشر شده در dev.to در ۱۸ آگوست ۲۰۲۶، رابطه بین عمق درخت و عملکرد در مدلهای Boosting به شکل U است. در حالی که در روشهای Bagging عمق بیشتر معمولاً به بهبود مدل کمک میکند، در Boosting اجازه رشد نامحدود به درختان باعث فروپاشی عملکرد میشود.
بسیاری از متخصصان با ابرپارامترها (Hyperparameter) — که مثل پیچهای تنظیم یک دستگاه پیچیده هستند و رفتار مدل را تغییر میدهند — به صورت مستقل برخورد میکنند و آنها را به عنوان دکمههایی میبینند که باید از طریق Grid Search چرخاند. این رویکرد اغلب منجر به اتلاف منابع محاسباتی و ایجاد مدلهای غیربهینه میشود، زیرا موازنه ریاضی بین پارامترهای کلیدی را نادیده میگیرد. در یادگیری ماشین کاربردی، هدف نهایی یافتن حداقل ظرفیتی است که بتواند سیگنال داده را استخراج کند، بدون اینکه نویزهای موجود در دادهها را جذب نماید.
همانطور که در تحلیلهای قبلی ما دربارهی بهینهسازی مدلهای درختی اشاره کردیم، درک رابطه متقابل پارامترها کلید کاهش هزینههای استنتاج است.
پیوند نرخ یادگیری و تعداد درختان
نخستین یافته حیاتی این است که نرخ یادگیری (Learning Rate) و تعداد تخمینگرها (n_estimators) در واقع یک پارامتر واحد هستند. طبق گزارش این منبع، در وظایف طبقهبندی، حاصلضرب این دو مقدار تقریباً ثابت میماند، فارغ از اینکه چه نرخ یادگیری خاصی انتخاب شده باشد.
اندازهگیریها در بازهای ۱۰ برابری از نرخهای یادگیری نشان میدهد حاصلضرب lr x trees تغییر چندانی نمیکند:
- نرخ یادگیری ۰.۳: ۱۵ درخت (حاصلضرب ۴.۵۰)
- نرخ یادگیری ۰.۱: ۴۴ درخت (حاصلضرب ۴.۴۰)
- نرخ یادگیری ۰.۰۳: ۱۴۷ درخت (حاصلضرب ۴.۴۱)
به همین دلیل، جستوجوی شبکهای برای هر دو پارامتر به صورت همزمان زائد است. نصف کردن نرخ یادگیری صرفاً به این معناست که برای رسیدن به همان مدل، به تقریباً دو برابر تعداد درختان نیاز دارید. بهینهترین گردشکار این است که نرخ یادگیری را ثابت نگه دارید و از توقف زودهنگام (Early Stopping) — شبیه به ترمز زدن دقیقاً قبل از خط پایان برای جلوگیری از رد شدن از هدف — برای تعیین تعداد درختان استفاده کنید. این استراتژی از اشتباه رایج اجرای هزاران درخت در حالی که نقطه بهینه ممکن است در عدد ۱۹ باشد، جلوگیری میکند.
خطر عمق زیاد و بیشبرازش
تفاوت بنیادین Boosting و Bagging در نحوه مدیریت ظرفیت است. در Bagging عمق بیشتر عموماً به مدل کمک میکند. اما در Boosting، یک درخت کاملاً رشدیافته میتواند تمام باقیماندهها (Residuals) را در همان گام اول ببلعد و هیچ چیزی برای بقیه زنجیره باقی نگذارد. این اتفاق منجر به بیشبرازش (Overfitting) — وضعیتی که مدل مثل دانشآموزی است که پاسخها را حفظ کرده اما مفهوم را نفهمیده — روی نویزها میشود.
بر اساس دادههای مربوط به ۱۰۰ تخمینگر، تفاوت در میانگین مربعات خطای آزمون (MSE) تکاندهنده است:
- Bagging: عمق ۱ (۱۹.۵۹۴۴) $\rightarrow$ عمق ۵ (۵.۶۲۴۱) $\rightarrow$ نامحدود (۳.۶۱۵۶)
- Boosting: عمق ۱ (۵.۰۶۶۰) $\rightarrow$ عمق ۵ (۲.۰۱۹۶) $\rightarrow$ نامحدود (۷.۱۱۰۵)
عمق نامحدود، مدل Boosting را از MSE ۲.۰۱۹۶ به ۷.۱۱۰۵ رساند و آن را حتی از مدلهای ساده (Stumps) با MSE ۵.۰۶۶۰ ضعیفتر کرد. بازه بهینه برای max_depth یا num_leaves معمولاً بین ۳ تا ۶ است. قانون طلایی این است: ظرفیت مدل را با تعداد درختان بیشتر بخرید، نه با افزایش عمق آنها.
هزینه درختان اضافی
بسیاری از توسعهدهندگان با این فرض که «بیشتر همیشه بهتر است»، آخر هفتههای خود را صرف اجرای هزاران تخمینگر میکنند. اما برخلاف Bagging که رفتاری یکنواخت دارد و با درختان بیشتر بهبود مییابد، Boosting یک نقطه اوج (Peak) مشخص دارد.
مقایسه n_estimators برای هر دو روش رفتارهای متفاوتی را آشکار میکند:
- Bagging: ۱۰ درخت (۳۹.۵۶۳۹) $\rightarrow$ ۱۰۰ درخت (۳۶.۵۰۵۴) $\rightarrow$ ۳۰۰۰ درخت (۳۵.۵۳۸۸)
- Boosting: ۱۰ درخت (۳۷.۱۴۳۸) $\rightarrow$ ۱۰۰ درخت (۴۳.۴۷۳۹) $\rightarrow$ ۳۰۰۰ درخت (۴۸.۴۷۰۴)
در یک تست مشخص، نقطه بهینه Boosting روی ۱۹ درخت با MSE ۳۶.۱۸۴۱ بود. وقتی مدل به ۳۰۰۰ درخت رسید، عملکرد به ۴۸.۴۷۰۴ افت کرد؛ یعنی یکسوم بدتر از بهترین حالت خودش. این موضوع تأیید میکند که n_estimators برای Bagging یک پیچ تنظیم برای «هموارسازی» است، اما برای Boosting یک پیچ تنظیم «ظرفیت» است که نیازمند توقف زودهنگام سختگیرانه است.
تفاوتهای کتابخانهای و عملیاتی
در تقابل میان کتابخانهها، شکاف عملکردی اغلب ناچیز است. در یک تست رودررو با ۱۵ تکرار برای هر کدام، XGBoost به AUC ۰.۹۸۸۴۵ و LightGBM به ۰.۹۸۸۲۵ رسید. این تفاوت دو صدم هزارمی، از نظر آماری بیمعنی است. حتی زمانی که از مزیت سرعت LightGBM برای برازش ۵۹ کاندید در مقابل ۳۷ کاندید XGBoost استفاده شد، امتیازات نهایی (۰.۹۸۹۷۷ در برابر ۰.۹۸۹۹۰) نشان داد که جستوجوی اضافی هیچ سودی نداشته است.
با این حال، توازنهای عملیاتی بسیار شدید هستند:
- LightGBM در مرحله برازش ۳.۳ برابر سریعتر است (۴.۹ ثانیه در برابر ۱۰.۸ ثانیه)، که آن را برنده برای چرخههای توسعه میکند.
- XGBoost در مرحله استنتاج (Inference) — لحظهای که مدل واقعاً جواب تولید میکند — ۲.۲ برابر سریعتر است (۱۷ میلیثانیه در برابر ۳۸ میلیثانیه)، که آن را برنده برای محیطهای عملیاتی (Production) میکند.
یافتههای خاص دیگر شامل موارد زیر است:
- Binning: استفاده از Binning درشتتر در LightGBM (
max_bin=15) با امتیاز ۰.۱۵۹۸ بر رزولوشن بالاتر (max_bin=1023) با امتیاز ۰.۱۶۱۹ پیروز شد. رزولوشن بیشتر به جای افزایش دقت، واریانس را بالا میبرد. - رشد (Growth): رشد بر اساس برگ (Leaf-wise) با امتیاز ۰.۱۷۵۳ کمی بهتر از رشد بر اساس عمق (Depth-wise) با امتیاز ۰.۱۷۸۴ بود.
- رمزگذاری (Encoding): در CatBoost، حذف یک ستون بدون سیگنال (تست ۰.۵۴۶۴) هم از رمزگذاری هدف ساده (Target Encoding - تست ۲.۷۹۷۵) و هم از رمزگذاری خارج از پوشه (Out-of-fold - تست ۰.۵۸۲۳) بهتر عمل کرد.
کیفیت داده برتر از ابرپارامترها
هیچ مقدار تنظیمات دقیق نمیتواند مدلی را از دادههای بد نجات دهد. گزارش اشاره میکند که وجود ۳۰٪ برچسبهای جابهجا شده (Flipped Labels)، باعث کاهش صحت مدل Boosting به میزان ۰.۱۴۷۷ و مدل Bagging به میزان ۰.۱۱۳۳ شد. این افت عملکرد بسیار بزرگتر از هر بهبودی است که ممکن است از طریق بهینهسازی ابرپارامترها به دست آید.
قبل از تغییر پیچهای تنظیم، متخصصان باید این پرچمهای قرمز را بررسی کنند:
- برچسبهای نویزی: Boosting هزینه سنگینتری برای برچسبهای بد میپردازد تا هر آنچه یک ابرپارامتر میتواند جبران کند.
- رمزگذاری دستی: ستونهایی با تعداد مقادیر زیاد (High-cardinality) که به صورت دستی Target-encode شدهاند، باید در سطح رمزگذار اصلاح شوند، نه با تغییر عمق درخت.
- شکافهای اعتبارسنجی: اگر مجموعههای اعتبارسنجی متقابل (CV) و Holdout اختلافی بیشتر از شکافی که شما به دنبال بهینهسازی آن هستید داشته باشند، احتمالاً در حال بهینهسازی یک نشت داده (Leak) هستید.
این تغییر دیدگاه، تمرکز را از جستوجوهای شبکهای جامع به سمت تنظیمات هدفمند و مبتنی بر اندازهگیری منتقل میکند. با اولویت دادن به پاکسازی دادهها و محدود کردن عمق درختان، توسعهدهندگان میتوانند با کسری از توان محاسباتی، به نتایج بهتری دست یابند.
گام بعدی شما
- ابتدا نویز برچسبها و تفکیکهای اعتبارسنجی خود را بازبینی کنید.
- نرخ یادگیری و تعداد درختان را به عنوان یک واحد واحد تنظیم کنید.
- عمق درختان را بین ۳ تا ۶ نگه دارید و تنها در صورتی که منحنی اعتبارسنجی شما این تلاش را توجیه کند، پارامترهای subsample یا colsample (در بازه ۰.۶ تا ۱.۰) را تغییر دهید.
اما تأثیر این تنظیمات بر مصرف حافظه در محیطهای تولیدی حتی حیاتیتر است — به تحلیل ما درباره بهینهسازی VRAM در مدلهای درختی مراجعه کنید.




گفتگو