Chapter 17
হাইপারপ্যারামিটার টিউনিং
Hyperparameter Tuning
🎬 মডেলের জাদুর knob
Hyperparameter হলো সেইসব setting যা training-এর আগে আপনি ঠিক করেন — learning rate, batch size, layer count, dropout। সঠিক টিউনিং মানে সাধারণ মডেল থেকে state-of-the-art-এ পৌঁছানো।
Parameter vs Hyperparameter
Parameter (মডেল শেখে)
Hyperparameter (আপনি ঠিক করেন)
Weight, bias
Learning rate, batch size, epochs
Embedding vector
Layer count, hidden size, dropout, optimizer
মূল Hyperparameters — গুরুত্ব অনুসারে
- Learning rate — সবচেয়ে গুরুত্বপূর্ণ।
- Batch size — সাধারণত 32/64/128।
- Architecture — layer ও unit count।
- Regularization — Dropout, Weight Decay।
- Optimizer — Adam, SGD+Momentum।
- Activation — ReLU, GELU।
- LR Schedule — Cosine, Step।
Search Strategies
১. Grid Search
সব combination পরীক্ষা — exponential explosion।
from sklearn.model_selection import GridSearchCV
params = {"lr": [1e-2, 1e-3], "batch_size": [32, 64]}
grid = GridSearchCV(model, params, cv=3)২. Random Search — সাধারণত Grid-এর চেয়ে ভালো
from sklearn.model_selection import RandomizedSearchCV
params = {"lr": [1e-2, 1e-3, 1e-4], "dropout": [0.1, 0.2, 0.3, 0.5]}
search = RandomizedSearchCV(model, params, n_iter=20)৩. Bayesian Optimization — Optuna
import optuna
def objective(trial):
lr = trial.suggest_float("lr", 1e-5, 1e-1, log=True)
hidden = trial.suggest_int("hidden", 32, 256)
dropout = trial.suggest_float("dropout", 0.0, 0.5)
model = build_model(hidden, dropout)
val_acc = train_and_eval(model, lr)
return val_acc
study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=50)
print(study.best_params)🔑 Random > Grid
Bergstra ও Bengio (2012) দেখিয়েছেন — একই compute budget-এ random search সাধারণত grid search-এর চেয়ে ভাল hyperparameter খুঁজে দেয়। কারণ গুরুত্বপূর্ণ hyperparameter-এ বেশি varied value পরীক্ষা হয়।
Learning Rate খোঁজার কৌশল — LR Range Test
খুব ছোট lr থেকে শুরু করে exponentially বাড়ান, loss vs lr plot করুন। যেখানে loss দ্রুততম কমে — সেটাই আপনার ideal lr-এর কাছাকাছি।
# PyTorch LightningModule ব্যতীত — manual
lrs = np.logspace(-6, 0, 100)
losses = []
for lr in lrs:
set_lr(opt, lr)
loss = train_one_step()
losses.append(loss)
plt.semilogx(lrs, losses)Regularization — Overfit কমানোর কৌশল
- L2 (weight decay): বড় weight-কে penalize।
- Dropout: training-এ এলোমেলোভাবে কিছু নিউরন বন্ধ।
- Data Augmentation: ডেটা বাড়ানোর কৌশল।
- Early Stopping: val loss বাড়লেই থামুন।
- Batch Normalization: training স্থিতিশীল।
সাধারণ ভুল ধারণা
⚠️ এড়িয়ে চলবেন
- সব hyperparameter একসাথে tune — সমস্যা localize করা কঠিন।
- Test set-এ tune করা — data leakage!
- একবার tune করলেই হয়ে গেল — dataset বদলালে আবার tune করুন।
অনুশীলন
১. একটি মডেলের lr 1e-1, 1e-2, 1e-3, 1e-4 দিয়ে train করে loss curve তুলনা করুন।
২. Optuna দিয়ে hidden size ও dropout tune করুন।
৩. Dropout 0, 0.2, 0.5 — overfit কেমন বদলায়?
মিনি প্রজেক্ট
🚀 আজকের চ্যালেঞ্জ
গত pipeline-এ Optuna integrate করুন। ৩০টি trial চালিয়ে best config খুঁজুন এবং রিপোর্ট লিখুন।
ইন্টারভিউ প্রশ্ন
- Parameter vs Hyperparameter।
- Grid vs Random vs Bayesian search।
- Dropout কীভাবে overfit কমায়?
- Weight decay কী?
- LR range test কীভাবে কাজ করে?
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- Hyperparameter = মডেলের জাদুর knob।
- Random > Grid; Bayesian (Optuna) সবচেয়ে ভাল।
- Regularization দিয়ে overfit কমান।
- এই অধ্যায়ে Phase 2 শেষ। পরের Phase-এ আমরা Computer Vision-এ ঢুকব — CNN দিয়ে।