Training loop ek iterative process hai jo random weights ko ek trained model mein badalta hai. Iske core mein yeh empirical risk minimization implement karta hai: woh parameters θ dhundo jo training data par average loss minimize karein.
YEH components kyun? Har step ek specific problem solve karta hai:
Forward pass: "Mera current model kya predict karta hai?"
Loss: "Main kitna galat hoon?" (error ka scalar measure)
Backward: "Kis weight ki wajah se yeh error hua?" (gradient flow)
Update: "Error kam karne ke liye weights kaise adjust karoon?"
Iteration: "Kya main generalize kar raha hoon, ya sirf memorize?"
Direct minimization intractable hai neural networks ke liye (non-convex, millions of parameters). Iski jagah, hum gradient descent use karte hain:
θt+1=θt−η∇θR^(θt)
Yeh kyun kaam karta hai: Gradient ∇θR^ loss mein steepest increase ki taraf point karta hai; opposite direction mein jaana (negative gradient) loss locally decrease karta hai.
Problem yeh hai:∇θR^ compute karne ke liye full-dataset pass chahiye—jo bahut expensive hai!
Solution: Stochastic Gradient Descent (SGD) gradient ko mini-batch use karke approximate karta hai:
∇θR^≈B1∑i∈batch∇θL(f(xi;θ),yi)
Batches kyun? Single examples bahut noisy hote hain; full dataset bahut slow hai; mini-batches variance aur computation ke beech balance karte hain.
Ek fixed learning rate aksar underperform karta hai. Learning rate scheduling training ke dauran η ko adapt karta hai.
Schedule kyun? Early training mein initialization se nikalne ke liye bade steps chahiye; late training mein minima mein settle hone ke liye chhote steps chahiye.
Early stopping validation loss monitor karke overfitting rokta hai:
best_val_loss = float('inf')patience = 10 # Epochs to wait for improvementpatience_counter = 0for epoch in range(max_epochs): train_loss = train_one_epoch(model, train_loader, optimizer) val_loss = evaluate(model, val_loader) if val_loss < best_val_loss: best_val_loss = val_loss save_checkpoint(model, 'best_model.pth') patience_counter = 0 else: patience_counter += 1 if patience_counter >= patience: print(f"Early stopping at epoch {epoch}") break
Yeh kyun kaam karta hai: Validation loss tab badhti hai jab model training noise memorize karne lagta hai → overfitting aur kharab hone se pehle rok do.
Socho tum blindfold hokar basketball free throws seekh rahe ho, aur sirf feel kar sakte ho ki kitna miss hua.
Training loop aise practice routine ki tarah hai:
Ball shoot karo (forward pass) - apni current technique se shot maaro
Feel karo ball kahan giri (compute loss) - left miss hua, right, short, ya long?
Pata lagao kya galat hua (backward pass) - kya elbow zyada upar tha? Zyada power laga diya?
Apna form adjust karo (update parameters) - elbow thoda kam moro, power thodi kam karo
Phir shoot karo (next iteration) - adjusted technique se try karo
Har shot kuch chhota sikhata hai. Hundreds of shots (epochs) ke baad, tumhari muscle memory (weights) basket hit karne mein bahut achhi ho jaati hai. "Learning rate" waise hai jaise tum har baar kitna adjust karte ho - shuruaat mein bade changes jab bahut door ho, baad mein chhoti tweaks jab paas ho.
Isme magic yeh hai ki tumhe basket dikhni nahi chahiye - sirf error feel karo aur step-by-step adjust karte jao, eventually tum ek great shooter ban jaate ho!
Training loop ke paanch core components kya hain? :: 1. Forward pass (predictions compute karo), 2. Loss computation (error measure karo), 3. Backward pass (gradients compute karo), 4. Parameter update (optimizer apply karo), 5. Iteration (batches/epochs par repeat karo)
Hum full-batch gradient descent ki jagah mini-batch SGD kyun use karte hain?
Full-batch mein poore dataset par gradients compute karne padte hain (slow aur memory-intensive). Mini-batches gradient ko bahut kam computation mein approximate karte hain aur single-example SGD se kam noisy updates dete hain. Variance aur efficiency balance karte hain.
Empirical risk minimization kya hai?
Training data par average loss minimize karna, true data distribution par expected risk minimize karne ke proxy ke roop mein. Formula: R^(θ)=N1∑i=1NL(f(xi;θ),yi)
backward() se pehle optimizer.zero_grad() kyun call karna zaroori hai?
PyTorch default mein gradients accumulate karta hai. Zero kiye bina, pichle batches ke gradients current gradients mein jud jaate hain, jisse galat gradient magnitudes aur exploding gradients hote hain. Sirf tab intentionally skip karo jab gradient accumulation implement kar rahe ho.
Validation mein model.eval() bhoolne par kya hota hai?
Dropout aur BatchNorm jaise layers training-mode behavior use karti hain (random drops, running statistics ki jagah batch statistics), jo galat aur aksar pessimistic evaluation metrics deta hai. Validation se pehle hamesha model.eval() aur training se pehle model.train() call karo.
Mini-batches ke saath SGD ka update rule kya hai?
θt+1=θt−∣Bt∣η∑(x,y)∈Bt∇θL(f(x;θt),y) jahan Bt mini-batch hai, η learning rate hai, aur hum batch par gradient average karte hain.
Har epoch mein training data shuffle kyun karte hain?
Model ko batch order artifacts aur consecutive batches ke beech correlations seekhne se rokta hai. Shuffling ke bina, correlated samples gradient estimates bias kar dete hain aur model true underlying patterns ki jagah sequence pattern seekh sakta hai.
Early stopping kya hai aur yeh kyun kaam karta hai?
Validation loss monitor karna aur training tab rokna jab yeh improve karna band kar de (patience period ke baad). Kaam karta hai kyunki validation loss tab badhti hai jab model overfitting shuru kar deta hai (training noise memorize karna), toh is point se pehle rokna generalization preserve karta hai.
Gradient accumulation sahi tarike se kaise implement karte hain?
backward() se pehle loss ko accumulation_steps se divide karo, bina zero_grad() ke multiple batches mein gradients accumulate karo, phir accumulation_steps batches ke baad optimizer.step() aur zero_grad() call karo. Yeh ek bada effective batch size simulate karta hai.
Learning rate scheduling ka purpose kya hai?
Training ke dauran learning rate adapt karna - shuruaat mein initialization se jaldi nikalne ke liye bade steps, baad mein minima mein bina overshoot ke settle hone ke liye chhote steps. Common schedules: step decay, exponential decay, cosine annealing, reduce on plateau.