Hyperparameter Tuning হল মেশিন লার্নিং মডেল প্রশিক্ষণের জন্য অত্যন্ত গুরুত্বপূর্ণ একটি প্রক্রিয়া, যেখানে মডেলের পারফরম্যান্সকে সর্বোচ্চ করতে বিভিন্ন হাইপারপ্যারামিটারকে অপটিমাইজ করা হয়। Hyperparameters হল সেই প্যারামিটারগুলো যা মডেল ট্রেনিংয়ের আগে নির্ধারণ করতে হয় এবং মডেলের পারফরম্যান্সকে প্রভাবিত করে।
হাইপারপ্যারামিটার উদাহরণ:
- Learning rate: প্রশিক্ষণের গতি নির্ধারণ করে।
- Batch size: প্রতি ইটারের জন্য ডেটা কতটুকু প্রক্রিয়া করা হবে তা নির্ধারণ করে।
- Number of epochs: মডেল কতবার প্রশিক্ষণ করবে তা নির্ধারণ করে।
- Number of layers: নিউরাল নেটওয়ার্কে লেয়ারের সংখ্যা।
- Number of neurons: প্রতিটি লেয়ারের নিউরনের সংখ্যা।
- Dropout rate: মডেল ওভারফিটিং থেকে রক্ষা পেতে সাহায্য করে।
এগুলো ছাড়াও আরো অনেক হাইপারপ্যারামিটার থাকতে পারে, যেমন momentum, activation function, optimizer ইত্যাদি।
Hyperparameter Tuning - MXNet উদাহরণ
এখানে একটি Neural Network মডেলের হাইপারপ্যারামিটার টিউনিং করার জন্য Grid Search ব্যবহার করার উদাহরণ দেয়া হয়েছে, যা একটি সাধারণ পদ্ধতি।
ধাপ ১: মডেল তৈরি
প্রথমে একটি সাধারণ নিউরাল নেটওয়ার্ক তৈরি করা হচ্ছে, যেটি কেবল একটি লুকানো লেয়ার এবং একটি আউটপুট লেয়ার নিয়ে কাজ করবে।
import mxnet as mx
from mxnet.gluon import nn, Trainer, loss
from mxnet import nd, autograd
# Simple Neural Network Model
class SimpleNN(nn.Block):
def __init__(self, num_hidden=128, **kwargs):
super(SimpleNN, self).__init__(**kwargs)
self.dense1 = nn.Dense(num_hidden, activation='relu')
self.dense2 = nn.Dense(10) # 10 classes for output
def forward(self, x):
x = self.dense1(x)
return self.dense2(x)
# Model Initialization
model = SimpleNN()
model.initialize(ctx=mx.cpu())
ধাপ ২: হাইপারপ্যারামিটার সেট করা
এখন, আমরা মডেলটির জন্য কিছু হাইপারপ্যারামিটার নির্বাচন করব। উদাহরণস্বরূপ, learning rate, batch size, এবং number of epochs।
# Hyperparameters to tune
learning_rates = [0.001, 0.01, 0.1]
batch_sizes = [32, 64, 128]
epochs = [10, 20]
ধাপ ৩: Grid Search Implementation
গ্রিড সার্চ হল একটি পদ্ধতি যেখানে সব সম্ভাব্য কম্বিনেশন অনুসন্ধান করা হয় এবং সর্বোত্তম মডেল নির্বাচন করা হয়।
# Dummy dataset
train_data = nd.random.uniform(shape=(1000, 784)) # 1000 samples, 784 features (like MNIST)
train_labels = nd.random.randint(0, 10, shape=(1000,)) # 1000 labels for 10 classes
# Loss and optimizer
loss_fn = loss.SoftmaxCrossEntropyLoss()
trainer = Trainer(model.collect_params(), 'adam')
best_loss = float('inf')
best_params = {}
# Grid Search
for lr in learning_rates:
for batch_size in batch_sizes:
for epoch in epochs:
print(f"Training with lr={lr}, batch_size={batch_size}, epochs={epoch}")
# Training loop
for e in range(epoch):
total_loss = 0
for i in range(0, len(train_data), batch_size):
data_batch = train_data[i:i+batch_size]
label_batch = train_labels[i:i+batch_size]
with autograd.record():
output = model(data_batch)
loss = loss_fn(output, label_batch)
loss.backward()
trainer.step(batch_size)
total_loss += loss.mean().asscalar()
print(f"Epoch {e+1}, Loss: {total_loss}")
# Save best model
if total_loss < best_loss:
best_loss = total_loss
best_params = {'lr': lr, 'batch_size': batch_size, 'epochs': epoch}
print(f"Best loss so far: {best_loss}")
print("Best hyperparameters:", best_params)
ব্যাখ্যা:
- Train Data: এখানে, একটি ডামি ট্রেনিং ডেটা তৈরি করা হয়েছে (এটি
nd.random.uniformদিয়ে তৈরি করা হয়েছে)। বাস্তবে, আপনি নিজের ডেটাসেট ব্যবহার করবেন, যেমন MNIST, CIFAR-10 ইত্যাদি। - Hyperparameter Combinations: এখানে গ্রিড সার্চের মাধ্যমে
learning rate,batch size, এবংepochsএর সব সম্ভাব্য কম্বিনেশন ট্রাই করা হয়েছে। - Training Loop: প্রতিটি কম্বিনেশনের জন্য মডেল ট্রেনিং করা হচ্ছে এবং লস ট্র্যাক করা হচ্ছে।
- Best Hyperparameters: সর্বনিম্ন লস পাওয়া হাইপারপ্যারামিটার সেটটি নির্বাচিত হয় এবং সেগুলি প্রিন্ট করা হয়।
ধাপ ৪: ফলাফল এবং সেরা মডেল নির্বাচন
এটি Grid Search এর মাধ্যমে মডেলটি হাইপারপ্যারামিটার টিউনিং করে এবং সর্বোত্তম হাইপারপ্যারামিটার নির্বাচন করে। আপনার মডেলটি কোন কম্বিনেশন সর্বোচ্চ পারফরম্যান্স দিয়েছে, তা জানতে পারবেন।
বিকল্প পদ্ধতি: Random Search এবং Bayesian Optimization
- Random Search: Grid Search এর তুলনায় কম্পিউটেশনাল খরচ অনেক কম হতে পারে, যেখানে বিভিন্ন হাইপারপ্যারামিটার এলোমেলোভাবে নির্বাচন করা হয়।
- Bayesian Optimization: এটি একটি উন্নত পদ্ধতি, যেখানে মডেলটির পূর্বের পারফরম্যান্সের উপর ভিত্তি করে পরবর্তী পরীক্ষাগুলোর জন্য হাইপারপ্যারামিটার নির্বাচন করা হয়।
Hyperparameter Tuning এর কিছু গুরুত্বপূর্ণ পদ্ধতি:
- Grid Search:
- সমস্ত হাইপারপ্যারামিটার কম্বিনেশন পরীক্ষা করা হয়।
- সহজ এবং কার্যকরী, তবে সময়সাপেক্ষ হতে পারে।
- Random Search:
- এলোমেলোভাবে হাইপারপ্যারামিটার নির্বাচন করা হয়।
- Grid Search এর তুলনায় বেশি কার্যকরী হতে পারে, বিশেষ করে যখন হাইপারপ্যারামিটার স্পেস বড় হয়।
- Bayesian Optimization:
- এটি একটি আধুনিক পদ্ধতি, যা পূর্বের ট্রায়ালের তথ্যের ভিত্তিতে পরবর্তী পরীক্ষাগুলির জন্য প্যারামিটার নির্বাচন করে।
- কম্পিউটেশনাল খরচ কম এবং এটি ভালো ফলাফল দেয়।
সারাংশ:
- Hyperparameter Tuning মডেল উন্নত করার জন্য অত্যন্ত গুরুত্বপূর্ণ একটি প্রক্রিয়া।
- Grid Search, Random Search, এবং Bayesian Optimization হল জনপ্রিয় পদ্ধতি, যার মাধ্যমে বিভিন্ন হাইপারপ্যারামিটার সেট পরীক্ষা করে সেরা সেটটি নির্বাচন করা যায়।
- MXNet-এ, মডেল ট্রেনিং চলাকালীন লস বা পারফরম্যান্সের উপর ভিত্তি করে হাইপারপ্যারামিটার অপটিমাইজেশন করা হয়।