Mempelajari cara melatih model secara profesional: hyperparameter tuning, cross-validation, dan early stopping; serta mengelola eksperimen dengan experiment tracking menggunakan Weights & Biases dan MLflow agar setiap run bisa dibandingkan dan direproduksi.

Setelah di episode 10 kalian memahami feature engineering dan cara memilih model, episode ini membuka "dapur" proses training: bagaimana mengatur hyperparameter, menghindari overfit lewat cross-validation dan early stopping, dan — yang paling sering diabaikan pemula — mencatat setiap eksperimen agar bisa dibandingkan dan direproduksi.
Mengapa episode ini penting? Karena training tanpa tracking adalah resep bencana: kalian mengganti learning rate, menambah layer, mengganti model — dan seminggu kemudian lupa mana konfigurasi yang menghasilkan skor terbaik. Di dunia nyata, "konfigurasi yang mana yang dipakai model di produksi?" adalah pertanyaan yang wajib bisa dijawab. Experiment tracking menjawabnya.
Hyperparameter menentukan seberapa baik model bisa belajar — tuning yang benar sering menaikkan skor lebih banyak daripada mengganti algoritma.
| Strategi | Cara Kerja | Kapan Dipakai |
|---|---|---|
| Grid search | Coba semua kombinasi daftar nilai | Ruang kecil, murah |
| Random search | Sampel acak dari distribusi nilai | Ruang besar — lebih efisien dari grid |
| Bayesian / Optuna | Cerdas: arahkan pencarian ke area menjanjikan | Default modern, hemat run |
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint
param_dist = {
"n_estimators": randint(50, 300),
"max_depth": randint(3, 20),
"min_samples_split": randint(2, 20),
}
search = RandomizedSearchCV(
RandomForestClassifier(),
param_distributions=param_dist,
n_iter=30,
cv=5,
random_state=42,
)
search.fit(X_train, y_train)
print(search.best_params_, search.best_score_)Aturan penting: tuning harus dilakukan dengan cross-validation di dalam — jika tidak, kalian memilih hyperparameter berdasarkan performa pada data yang sama dengan data evaluasi (leakage terselubung, lihat episode 8).
k-fold cross-validation membagi data menjadi k lipatan, melatih k kali (tiap lipatan jadi validasi sekali), lalu merata-ratakan skor. Ini memberi estimasi performa yang stabil — jauh lebih jujur daripada satu split tunggal yang mungkin beruntung.
Standarnya: 5-fold atau 10-fold. Data kecil → k lebih besar; data besar → k lebih kecil demi waktu. StratifiedKFold menjaga proporsi kelas di setiap lipatan — wajib untuk data tidak seimbang.
Dalam deep learning, early stopping menghentikan training saat performa di validation mulai turun — menangkap momen terbaik sebelum overfitting:
best_val_loss = float("inf")
patience = 0
epochs_no_improve = 0
for epoch in range(max_epochs):
train_loss = train_one_epoch(model, loader)
val_loss = evaluate(model, val_loader)
if val_loss < best_val_loss:
best_val_loss = val_loss
torch.save(model.state_dict(), "best.pt")
epochs_no_improve = 0
else:
epochs_no_improve += 1
if epochs_no_improve >= patience:
print("Early stopping di epoch", epoch)
breakPola ini — simpan yang terbaik, berhenti bila tidak membaik — lebih kuat daripada "training selama X epoch" yang statis.
Tanpa tracking, kalian hanya punya segudang loss_0.12_final.py yang tidak bisa dibandingkan. Dengan tracking, setiap run memiliki:
MLflow adalah open-source, berjalan di mana saja (lokal, on-prem, cloud), dan mengelola tiga hal: tracking (eksperimen), models (registry), dan registry (staging/production). Cocok untuk tim yang ingin kontrol penuh.
import mlflow
with mlflow.start_run():
mlflow.log_param("learning_rate", 0.001)
mlflow.log_param("n_layers", 2)
for epoch in range(3):
mlflow.log_metric("loss", train_loss, step=epoch)
mlflow.log_artifact("model.pt")
mlflow.log_metric("accuracy", final_acc)W&B adalah platform SaaS yang populer untuk deep learning: dashboard interaktif, perbandingan run, dan integrasi satu baris dengan PyTorch/HF. Untuk tim riset yang ingin kolaborasi visual, W&B sangat nyaman.
import wandb
wandb.init(project="belajar-ai", config={"lr": 0.001, "epochs": 10})
config = wandb.config
for epoch in range(config.epochs):
loss = train_one_epoch()
wandb.log({"loss": loss, "epoch": epoch})Tip
Pilih yang cocok dengan tim: MLflow untuk kontrol penuh & self-host (episode 17 membahas alasan self-host), W&B untuk pengalaman riset paling mulus. Keduanya mendukung reproduksibilitas yang menjadi syarat MLOps di episode 18.
Eksperimen hanya berguna jika bisa direproduksi. Checklist reproduksibilitas:
torch.manual_seed(42), np.random.seed(42), random.seed(42).pip freeze > requirements-lock.txtKombinasi tracking + checklist ini membuat kalian bisa menjawab pertanyaan audit paling dasar: "model mana yang dipakai, dilatih dengan data dan konfigurasi apa?"
Inti yang harus dibawa pulang:
Di episode 12 selanjutnya kita akan belajar Fine-Tuning & Transfer Learning — memanfaatkan pretrained model untuk data spesifik, kapan pakai PEFT/LoRA vs full fine-tuning, dan kapan cukup memakai prompt atau RAG tanpa training sama sekali. Sampai jumpa di episode 12!