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 — গুরুত্ব অনুসারে

  1. Learning rate — সবচেয়ে গুরুত্বপূর্ণ।
  2. Batch size — সাধারণত 32/64/128।
  3. Architecture — layer ও unit count।
  4. Regularization — Dropout, Weight Decay।
  5. Optimizer — Adam, SGD+Momentum।
  6. Activation — ReLU, GELU।
  7. 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 খুঁজুন এবং রিপোর্ট লিখুন।

ইন্টারভিউ প্রশ্ন

  1. Parameter vs Hyperparameter।
  2. Grid vs Random vs Bayesian search।
  3. Dropout কীভাবে overfit কমায়?
  4. Weight decay কী?
  5. LR range test কীভাবে কাজ করে?

সারসংক্ষেপ

✨ এই অধ্যায়ে যা শিখলাম
  • Hyperparameter = মডেলের জাদুর knob।
  • Random > Grid; Bayesian (Optuna) সবচেয়ে ভাল।
  • Regularization দিয়ে overfit কমান।
  • এই অধ্যায়ে Phase 2 শেষ। পরের Phase-এ আমরা Computer Vision-এ ঢুকব — CNN দিয়ে।