بازدید: 66 بازدید
زمان مطالعه: 10 دقیقه

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

فهرست مطالب

تنظیم هایپرپارامتر

تنظیم هایپرپارامتر فرآیندی است که در آن مقادیر بهینه برای هایپرپارامترهای یک مدل یادگیری ماشین انتخاب می‌شوند. هایپرپارامترها تنظیماتی هستند که فرآیند یادگیری مدل را کنترل می‌کنند، مانند نرخ یادگیری، تعداد نورون‌ها در یک شبکه عصبی یا اندازه کرنل در یک ماشین بردار پشتیبان. هدف از تنظیم هایپرپارامتر یافتن مقادیری است که به بهترین عملکرد در یک وظیفه خاص منجر می‌شوند.

هایپرپارارمترها چه هستند؟

در زمینه یادگیری ماشین، هایپرپارامترها متغیرهای پیکربندی هستند که قبل از شروع فرآیند آموزش مدل تنظیم می‌شوند. آن‌ها فرآیند یادگیری را کنترل می‌کنند، نه اینکه از داده‌ها یاد گرفته شوند. هایپرپارامترها اغلب برای تنظیم عملکرد مدل به کار می‌روند و می‌توانند تأثیر قابل توجهی بر دقت مدل، تعمیم‌پذیری و سایر معیارها داشته باشند.

 
 
 
 

روش‌های مختلف تنظیم هایپرپارامترها

هایپرپارامترها متغیرهای پیکربندی هستند که فرآیند یادگیری یک مدل یادگیری ماشین را کنترل می‌کنند. آن‌ها متفاوت از پارامترهای مدل هستند که وزن‌ها و بایاس‌هایی هستند که از داده‌ها یاد گرفته می‌شوند. چندین نوع مختلف از هایپرپارامترها وجود دارد:
هایپرپارامترها در شبکه‌های عصبی
شبکه‌های عصبی چندین هایپرپارامتر اساسی دارند که نیاز به تنظیم دارند، از جمله:

  • نرخ یادگیری: این هایپرپارامتر اندازه گامی که بهینه‌ساز در هر تکرار آموزش برمی‌دارد را کنترل می‌کند. نرخ یادگیری خیلی کوچک می‌تواند منجر به همگرایی کند شود، در حالی که نرخ یادگیری خیلی بزرگ می‌تواند منجر به ناپایداری و واگرایی شود.

  • تعداد دوره‌ها (Epochs): این هایپرپارامتر تعداد دفعاتی که کل مجموعه داده‌های آموزشی در طول آموزش از طریق مدل عبور می‌کند را نشان می‌دهد. افزایش تعداد دوره‌ها می‌تواند عملکرد مدل را بهبود بخشد اما اگر به دقت انجام نشود ممکن است منجر به بیش‌برازش شود.

  • تعداد لایه‌ها: این هایپرپارامتر عمق مدل را تعیین می‌کند که می‌تواند تأثیر قابل توجهی بر پیچیدگی و توانایی یادگیری آن داشته باشد.

  • تعداد گره‌ها در هر لایه: این هایپرپارامتر عرض مدل را تعیین می‌کند که بر توانایی آن برای نمایش روابط پیچیده در داده‌ها تأثیر می‌گذارد.

  • معماری: این هایپرپارامتر ساختار کلی شبکه عصبی را تعیین می‌کند، شامل تعداد لایه‌ها، تعداد نورون‌ها در هر لایه و اتصالات بین لایه‌ها. معماری بهینه بستگی به پیچیدگی کار و اندازه مجموعه داده‌ها دارد.

  • تابع فعال‌ساز: این هایپرپارامتر غیرخطی بودن را به مدل وارد می‌کند، که به آن اجازه می‌دهد تا مرزهای تصمیم‌گیری پیچیده را یاد بگیرد. توابع فعال‌سازی رایج شامل سیگموید، تانژانت هایپربولیک (tanh) و واحد خطی اصلاح شده (ReLU) هستند.

 

هایپرپارامترها در ماشین بردار پشتیبان
برای تنظیم دقیق SVM‌ها، برخی از هایپرپارامترهای اساسی را در نظر می‌گیریم:

  • C: پارامتر تنظیم‌کننده که تعادل بین حاشیه و تعداد خطاهای آموزشی را کنترل می‌کند. مقدار بزرگتر C خطاهای آموزشی را سنگین‌تر جریمه می‌کند، که منجر به حاشیه کوچکتر اما احتمالاً عملکرد تعمیم‌پذیری بهتر می‌شود. مقدار کوچکتر C اجازه می‌دهد تا خطاهای آموزشی بیشتری وجود داشته باشد اما ممکن است منجر به بیش‌برازش شود.
  • کرنل: تابع کرنل که شباهت بین نقاط داده را تعریف می‌کند. کرنل‌های مختلف می‌توانند روابط مختلف بین نقاط داده را به دست آورند و انتخاب کرنل می‌تواند تأثیر قابل توجهی بر عملکرد SVM داشته باشد. کرنل‌های رایج شامل خطی، چندجمله‌ای، تابع پایه شعاعی (RBF) و سیگموید هستند.
  • گاما: این پارامتر تأثیر بردارهای پشتیبان بر مرز تصمیم‌گیری را کنترل می‌کند. مقدار بزرگتر گاما نشان‌دهنده تأثیر قوی‌تر بردارهای پشتیبان نزدیک است، در حالی که مقدار کوچکتر نشان‌دهنده تأثیر ضعیف‌تر بردارهای پشتیبان دور است. انتخاب گاما برای کرنل‌های RBF بسیار مهم است.

 

هایپرپارامترها در XGBoost
هایپرپارامترهای ضروری زیر در XGBoost نیاز به تنظیم دارند:

  • learning_rate: این هایپرپارامتر اندازه گامی که بهینه‌ساز در هر تکرار آموزش برمی‌دارد را تعیین می‌کند. نرخ یادگیری بزرگتر می‌تواند منجر به همگرایی سریع‌تر شود، اما همچنین ممکن است خطر بیش‌برازش را افزایش دهد. نرخ یادگیری کوچکتر ممکن است منجر به همگرایی کندتر شود اما می‌تواند به جلوگیری از بیش‌برازش کمک کند.
  • n_estimators: این هایپرپارامتر تعداد درختان تقویتی که باید آموزش داده شوند را تعیین می‌کند. تعداد بیشتری از درختان می‌تواند دقت مدل را بهبود بخشد، اما همچنین ممکن است خطر بیش‌برازش را افزایش دهد. تعداد کمتری از درختان ممکن است منجر به دقت پایین‌تر شود اما می‌تواند به جلوگیری از بیش‌برازش کمک کند.
  • max_depth: این هایپرپارامتر حداکثر عمق هر درخت در مجموعه را تعیین می‌کند. max_depth بزرگتر می‌تواند به درختان اجازه دهد تا روابط پیچیده‌تری را در داده‌ها به دست آورند، اما همچنین ممکن است خطر بیش‌برازش را افزایش دهد. max_depth کوچکتر ممکن است منجر به پیچیدگی کم درختان شود اما می‌تواند به جلوگیری از بیش‌برازش کمک کند.
  • min_child_weight: این هایپرپارامتر حداقل مجموع وزن نمونه (هسین) مورد نیاز در یک گره فرزند را تعیین می‌کند. min_child_weight بزرگتر می‌تواند به جلوگیری از بیش‌برازش کمک کند با اینکه نیاز به داده‌های بیشتری برای تأثیرگذاری بر تقسیم درختان دارد. min_child_weight کوچکتر ممکن است به تقسیم تهاجمی‌تر درختان منجر شود اما همچنین ممکن است خطر بیش‌برازش را افزایش دهد.
  • subsample: این هایپرپارامتر درصد ردیف‌های استفاده شده برای هر ساخت درخت را تعیین می‌کند. subsample کوچکتر می‌تواند کارایی آموزش را بهبود بخشد اما ممکن است دقت مدل را کاهش دهد. subsample بزرگتر می‌تواند دقت را افزایش دهد اما ممکن است هزینه های محاسباتی آموزش را بالا ببرد.

برخی دیگر از مثال‌های هایپرپارامترهای مدل عبارتند از:

  • جریمه در طبقه‌بندی‌کننده رگرسیون لجستیک، یعنی نظم دهی L1 یا L2

  • تعداد درختان و عمق درختان برای جنگل‌های تصادفی

  • نرخ یادگیری برای آموزش یک شبکه عصبی

  • تعداد خوشه‌ها برای الگوریتم‌های خوشه‌بندی

  • k در k-نزدیک‌ترین همسایه‌ها

 
 
 
 
 

تکنیک‌های تنظیم هایپرپارامتر

مدل‌ها می‌توانند بسیاری از هایپرپارامترها داشته باشند و یافتن بهترین ترکیب پارامترها می‌تواند به عنوان یک مسئله جستجو در نظر گرفته شود. دو استراتژی برتر برای تنظیم هایپرپارامتر عبارتند از:

  • GridSearchCV

  • RandomizedSearchCV

  • بهینه‌سازی بیزی

  1. GridSearchCV
    جستجوی شبکه می‌تواند به عنوان یک رویکرد "زورگویانه" برای بهینه‌سازی هایپرپارامتر در نظر گرفته شود. مدل با استفاده از تمام ترکیب‌های ممکن پس از ایجاد یک شبکه از مقادیر هایپرپارامتر گسسته بالقوه ساخته می شود. عملکرد مدل هر مجموعه ثبت و سپس ترکیبی انتخاب می شود که بهترین نتایج را تولید می‌کند. این رویکرد GridSearchCV نامیده می‌شود، زیرا به دنبال بهترین مجموعه هایپرپارامترها از یک شبکه از مقادیر هایپرپارامتر است.

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

برای مثال: اگر بخواهیم دو هایپرپارامتر C و Alpha را برای مدل طبقه‌بندی‌کننده رگرسیون لجستیک با مجموعه‌های مختلفی از مقادیر تنظیم کنیم، تکنیک جستجوی شبکه نسخه‌های متعددی از مدل را با تمام ترکیب‌های ممکن از هایپرپارامترها می‌سازد و بهترین آن را برمی‌گرداند.

مانند تصویر، برای C = [0.1, 0.2, 0.3, 0.4, 0.5] و Alpha = [0.1, 0.2, 0.3, 0.4]. برای ترکیبی از C=0.3 و Alpha=0.2، نمره عملکرد به ۰.۷۲۶ (بالاترین) می‌رسد، بنابراین انتخاب می‌شود.

معایب: GridSearchCV از تمام ترکیب‌های میانی هایپرپارامترها عبور می‌کند که باعث می‌شود جستجوی شبکه از نظر محاسباتی بسیار گران قیمت باشد.

 
 
 
 

کد زیر نحوه استفاده از GridSearchCV را نشان می‌دهد.

				
					# Necessary imports
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
import numpy as np
from sklearn.datasets import make_classification


X, y = make_classification(
	n_samples=1000, n_features=20, n_informative=10, n_classes=2, random_state=42)

# Creating the hyperparameter grid
c_space = np.logspace(-5, 8, 15)
param_grid = {'C': c_space}

# Instantiating logistic regression classifier
logreg = LogisticRegression()

# Instantiating the GridSearchCV object
logreg_cv = GridSearchCV(logreg, param_grid, cv=5)

# Assuming X and y are your feature matrix and target variable
# Fit the GridSearchCV object to the data
logreg_cv.fit(X, y)

# Print the tuned parameters and score
print("Tuned Logistic Regression Parameters: {}".format(logreg_cv.best_params_))
print("Best score is {}".format(logreg_cv.best_score_))

				
			

خروجی

				
					Tuned Logistic Regression Parameters: {'C': 0.006105402296585327}
Best score is 0.853
				
			
  1. RandomizedSearchCV
    همانطور که از نام آن پیداست، روش جستجوی تصادفی به جای استفاده از مجموعه‌ای از اعداد مشخص شده توسط روش جستجوی شبکه، مقادیر را به صورت تصادفی انتخاب می‌کند. جستجوی تصادفی در هر تکرار یک مجموعه متفاوت از هایپرپارامترها را امتحان می‌کند و عملکرد مدل را ثبت می‌کند. پس از چندین تکرار، ترکیبی که بهترین نتیجه را داده است را برمی‌گرداند. این رویکرد محاسبات غیرضروری را کاهش می‌دهد.

RandomizedSearchCV معایب GridSearchCV را حل می‌کند، زیرا فقط از تعداد مشخصی از تنظیمات هایپرپارامتر عبور می‌کند. این رویکرد در شبکه به صورت تصادفی حرکت می‌کند تا بهترین مجموعه هایپرپارامترها را پیدا کند. مزیت آن این است که، در بیشتر موارد، جستجوی تصادفی سریع‌تر از جستجوی شبکه نتیجه قابل مقایسه‌ای تولید می‌کند.

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

کد زیر نحوه استفاده از RandomizedSearchCV را نشان می‌دهد.

 
 
 
 
 
				
					import numpy as np
from sklearn.datasets import make_classification

# Generate a synthetic dataset for illustration
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_classes=2, random_state=42)

# Rest of your code (including the RandomizedSearchCV part)
from scipy.stats import randint
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import RandomizedSearchCV

param_dist = {
	"max_depth": [3, None],
	"max_features": randint(1, 9),
	"min_samples_leaf": randint(1, 9),
	"criterion": ["gini", "entropy"]
}

tree = DecisionTreeClassifier()
tree_cv = RandomizedSearchCV(tree, param_dist, cv=5)
tree_cv.fit(X, y)

print("Tuned Decision Tree Parameters: {}".format(tree_cv.best_params_))
print("Best score is {}".format(tree_cv.best_score_))

				
			

خروجی

				
					Tuned Decision Tree Parameters: {'criterion': 'entropy', 'max_depth': None, 'max_features': 8, 'min_samples_leaf': 7}
Best score is 0.842
				
			
  1. بهینه‌سازی بیزی
    جستجوی شبکه و جستجوی تصادفی اغلب ناکارآمد هستند زیرا آن‌ها ترکیب‌های زیادی از هایپرپارامترهای نامناسب را بدون در نظر گرفتن نتایج تکرارهای قبلی ارزیابی می‌کنند. بهینه‌سازی بیزی، از طرف دیگر، جستجو برای هایپرپارامترهای بهینه را به عنوان یک مسئله بهینه‌سازی در نظر می‌گیرد. این روش نتایج ارزیابی‌های قبلی را هنگام انتخاب ترکیب بعدی هایپرپارامترها در نظر می‌گیرد و از یک تابع احتمالاتی برای انتخاب ترکیبی که احتمالاً بهترین نتایج را به دست می‌دهد، استفاده می‌کند. این روش در تعداد نسبتاً کمی از تکرارها ترکیب خوبی از هایپرپارامترها را کشف می‌کند.

    دانشمندان داده زمانی که تابع هدف نامشخص است، از مدل‌های احتمالاتی استفاده می‌کنند. این مدل‌ها احتمال نتیجه تابع هدف برای یک ترکیب خاص از هایپرپارامترها را بر اساس نتایج ارزیابی‌های قبلی برآورد می‌کنند.

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

    استفاده از مدل احتمالاتی برای هایپرپارامترها از نظر محاسباتی بسیار مقرون‌به‌صرفه‌تر از محاسبه تابع هدف است. بنابراین، این روش معمولاً هر بار که تابع هدف اجرا می‌شود، مدل احتمالاتی جایگزین را به‌روزرسانی و بهبود می‌بخشد. پیش‌بینی‌های دقیق‌تر هایپرپارامترها تعداد ارزیابی‌های تابع هدف مورد نیاز برای رسیدن به نتیجه خوب را کاهش می‌دهد. فرآیندهای گاوسی، رگرسیون جنگل تصادفی و برآوردگرهای ساختار درختی پارزن (TPE) نمونه‌هایی از مدل‌های جایگزین هستند.

    مدل بهینه‌سازی بیزی پیچیده است اما کتابخانه‌های آماده مانند Ray Tune می‌توانند فرآیند را ساده‌تر کنند. استفاده از این نوع مدل ارزشمند است زیرا در تعداد نسبتاً کمی از تکرارها ترکیب مناسبی از هایپرپارامترها را پیدا می‌کند. با این حال، در مقایسه با جستجوی شبکه یا جستجوی تصادفی، ما باید بهینه‌سازی بیزی را به صورت متوالی محاسبه کنیم، بنابراین اجازه پردازش توزیع شده را نمی‌دهد. بنابراین، بهینه‌سازی بیزی زمان بیشتری می‌برد اما از منابع محاسباتی کمتری استفاده می‌کند.

    معایب: برای درک این موضوع نیاز به شناخت مدل احتمالاتی پایه و اساس آن است.

     
     

چالش‌های تنظیم هایپرپارامترها

  • رویارویی با فضاهای پیچیده هایپرپارامتر: جستجو و بهینه‌سازی کارآمد
  • رسیدگی به ارزیابی‌های تابعی پرهزینه: دستیابی به توازن بین کارایی محاسباتی و دقت
  • به کارگیری دانش تخصصی: بهره‌گیری از اطلاعات پیشین برای تنظیم دقیق‌تر
  • پرورش روش‌های تنظیم هایپرپارامتر انعطاف‌پذیر: تغییر پارامترها در حین آموزش

کاربردهای تنظیم هایپرپارامتر

  • انتخاب مدل: انتخاب بهترین معماری مدل برای کار مورد نظر
  • تنظیم پارامترهای تنظیم‌کننده: تنظیم پیچیدگی مدل برای بهترین عملکرد
  • بهینه‌سازی پیش‌پردازش ویژگی‌ها: ارتقاء کیفیت داده‌ها و کارایی مدل
  • تنظیم پارامترهای الگوریتمی: تنظیم دقیق پارامترهای خاص الگوریتم برای بهترین نتایج

مزایای تنظیم هایپرپارامتر:

  • افزایش کارایی مدل
  • کاهش بیش‌برازش و کم‌برازش
  • بهبود قابلیت تعمیم مدل
  • استفاده بهینه از منابع
  • افزایش قابل فهم بودن مدل

معایب تنظیم هایپرپارامتر:

  • هزینه‌های محاسباتی بالا
  • روندی زمان‌بر
  • خطر بیش‌برازش
  • عدم تضمین برای عملکرد ایده‌آل
  • نیازمند دانش تخصصی

مطالعه بیشتر