Grid Search এবং Random Search এর মাধ্যমে Hyperparameter Tuning

Hyperparameter Tuning এবং Optimization - কেরাস ডিপ লার্নিং (Deep Learning with Keras) - Machine Learning

324

Hyperparameter tuning হল মডেলের পারফরম্যান্স বৃদ্ধি করার একটি গুরুত্বপূর্ণ প্রক্রিয়া, যেখানে মডেলের hyperparameters (যেমন, লার্নিং রেট, ব্যাচ সাইজ, ইত্যাদি) চিহ্নিত এবং অপটিমাইজ করা হয়। Grid Search এবং Random Search হল দুটি জনপ্রিয় পদ্ধতি যা Hyperparameter Tuning এর জন্য ব্যবহৃত হয়।

এখন, চলুন প্রতিটি পদ্ধতির মাধ্যমে Hyperparameter Tuning এর বিস্তারিত আলোচনা করা যাক।


১. Grid Search

Grid Search হল একটি exhaustive পদ্ধতি যেখানে একটি নির্দিষ্ট hyperparameter স্পেসের মধ্যে প্রতিটি সম্ভাব্য সমন্বয় পরীক্ষিত হয়। এটি সব সম্ভাব্য সংমিশ্রণ পর্যালোচনা করে, যাতে সর্বোচ্চ পারফরম্যান্স প্রদানকারী hyperparameters পাওয়া যায়।

Grid Search এর কাজ:

  • নির্দিষ্ট কিছু hyperparameters এবং তাদের সম্ভাব্য মানের একটি গ্রিড তৈরি করা হয়।
  • প্রতিটি সংমিশ্রণ ট্রেনিং এবং ভ্যালিডেশন ডেটাতে পরীক্ষা করা হয়।
  • সেরা ফলাফল দেওয়া hyperparameter সেট নির্বাচন করা হয়।

উদাহরণ: Keras মডেলে Grid Search ব্যবহার করা

ধরা যাক, আমরা Keras মডেলে GridSearchCV ব্যবহার করব। প্রথমে, আমরা একটি Keras মডেল তৈরি করবো এবং এরপর GridSearchCV এর মাধ্যমে hyperparameters টিউন করবো।

import tensorflow as tf
from tensorflow.keras import layers, models
from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

# মডেল তৈরি ফাংশন
def create_model(optimizer='adam', activation='relu'):
    model = models.Sequential()
    model.add(layers.Dense(64, activation=activation, input_dim=8))
    model.add(layers.Dense(64, activation=activation))
    model.add(layers.Dense(1, activation='sigmoid'))
    
    model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
    
    return model

# KerasClassifier wrapper ব্যবহার করে মডেলটি স্কিকিট-লার্নের সাথে কাজ করতে তৈরি করা
model = KerasClassifier(build_fn=create_model, verbose=0)

# GridSearchCV এর মাধ্যমে hyperparameters টিউন করা
param_grid = {
    'optimizer': ['adam', 'sgd'],
    'activation': ['relu', 'tanh'],
    'batch_size': [32, 64],
    'epochs': [10, 20]
}

grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid_result = grid.fit(X_train, y_train)

# সেরা পারফরম্যান্স এবং সেরা hyperparameters দেখা
print(f"Best: {grid_result.best_score_} using {grid_result.best_params_}")

ব্যাখ্যা:

  • KerasClassifier: Keras মডেলকে স্কিকিট-লার্নের সাথে ইন্টিগ্রেট করতে ব্যবহার করা হয়।
  • param_grid: এখানে বিভিন্ন hyperparameter এর সম্ভাব্য মানের গ্রিড নির্ধারণ করা হয়েছে। GridSearchCV এই গ্রিডের মধ্যে সমস্ত সম্ভাবনা পরীক্ষা করবে।
  • cv=3: ক্রস ভ্যালিডেশন ফোল্ডস সংখ্যা ৩ নির্ধারণ করা হয়েছে, যা ৩টি ভিন্ন ভ্যালিডেশন সেট ব্যবহার করবে।

Grid Search এর সুবিধা:

  • পুরো hyperparameter স্পেস পরীক্ষা করা হয়, তাই সেরা hyperparameters পাওয়ার সম্ভাবনা বেশি।
  • সহজ এবং কার্যকরী পদ্ধতি যখন hyperparametersের সীমিত সংখ্যা থাকে।

Grid Search এর অসুবিধা:

  • সময়সাপেক্ষ এবং কম্পিউটেশনালভাবে ব্যয়বহুল যদি hyperparametersের সংখ্যার পরিমাণ বড় হয়।
  • শুধুমাত্র predefined গ্রিডের মধ্যে পরীক্ষা করা হয়, তাই অনেক সময় উপযুক্ত টিউনিং মিস হতে পারে।

২. Random Search

Random Search একটি প্রগ্রাম্যাটিক পদ্ধতি যেখানে মডেলের hyperparameters এর মধ্যে র‍্যান্ডম ভাবে কিছু সম্ভাব্য মান নির্বাচন করা হয়। এটি Grid Search এর তুলনায় কম কম্পিউটেশনাল খরচে অধিক কার্যকরী হতে পারে, কারণ এটি সমস্ত সম্ভাব্য সংমিশ্রণ পরীক্ষা না করে শুধুমাত্র কিছু সম্ভাব্য মান নির্বাচন করে।

Random Search এর কাজ:

  • hyperparameters এর মধ্যে নির্দিষ্ট মানের একটি র‍্যান্ডম সেট তৈরি করা হয়।
  • কিছু নির্দিষ্ট সংখ্যক সমন্বয় পরীক্ষা করা হয়।
  • সেরা ফলাফল দেয়া মান নির্বাচন করা হয়।

উদাহরণ: Keras মডেলে Random Search ব্যবহার করা

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# Hyperparameters এর জন্য র‍্যান্ডম স্পেস
param_dist = {
    'optimizer': ['adam', 'sgd'],
    'activation': ['relu', 'tanh'],
    'batch_size': [32, 64, 128],
    'epochs': [10, 20, 30]
}

# RandomizedSearchCV ব্যবহার করা
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=10, cv=3)
random_search_result = random_search.fit(X_train, y_train)

# সেরা ফলাফল এবং সেরা hyperparameters দেখা
print(f"Best: {random_search_result.best_score_} using {random_search_result.best_params_}")

ব্যাখ্যা:

  • RandomizedSearchCV: Random Search এর জন্য স্কিকিট-লার্নের RandomizedSearchCV ব্যবহার করা হয়েছে। এখানে n_iter=10 মানে ১০টি র‍্যান্ডম সমন্বয় পরীক্ষা করা হবে।
  • param_dist: এটি বিভিন্ন hyperparameters এবং তাদের সম্ভাব্য মানের একটি র‍্যান্ডম সেট তৈরি করে।

Random Search এর সুবিধা:

  • Grid Search এর তুলনায় কম কম্পিউটেশনাল খরচ।
  • বড় hyperparameter স্পেসের জন্য দ্রুত ফলাফল দেয়।
  • এটি গ্রিডের বাইরে থাকা কিছু নতুন সমন্বয়ও পরীক্ষা করে।

Random Search এর অসুবিধা:

  • এটি সমস্ত সম্ভাব্য সমন্বয় পরীক্ষা করে না, তাই কিছু সময় সেরা ফলাফল মিস হতে পারে।

সারাংশ

  • Grid Search: এটি exhaustive এবং সব সমন্বয় পরীক্ষা করে, তবে অনেক সময় কম্পিউটেশনালভাবে ব্যয়বহুল হতে পারে। এটি ছোট hyperparameter স্পেসের জন্য উপযুক্ত।
  • Random Search: এটি কম্পিউটেশনালভাবে দ্রুত এবং কার্যকরী হতে পারে বড় স্পেসের জন্য, কারণ এটি কেবল কিছু র‍্যান্ডম সমন্বয় পরীক্ষা করে।

আপনি যদি ছোট hyperparameter স্পেস নিয়ে কাজ করেন এবং আপনার কাছে যথেষ্ট কম্পিউটেশনাল ক্ষমতা থাকে, তাহলে Grid Search একটি ভালো পছন্দ হতে পারে। তবে, যদি আপনি বড় স্পেসে কাজ করছেন এবং কম্পিউটেশনাল খরচ কমাতে চান, তাহলে Random Search আরো কার্যকরী হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...