Hook — Network কীভাবে শেখে?
Forward pass এ prediction পাওয়া গেল, loss measure হলো। কিন্তু weight গুলো কীভাবে update হবে? উত্তর — Backpropagation: error কে পিছনে পাঠানো, প্রতিটি weight এর gradient হিসাব করে gradient descent দিয়ে update করা।
Chain Rule — গাণিতিক ভিত্তি
Composite function এর derivative — chain rule দিয়ে।
dL/dw = (dL/dy) · (dy/dz) · (dz/dw)
Output layer থেকে শুরু করে input layer পর্যন্ত — প্রতিটি weight এর partial derivative হিসাব হয়।
Backprop এর ধাপ
- Forward pass — prediction ও loss।
- Output layer এ gradient হিসাব।
- Hidden layer এ chain rule দিয়ে gradient propagate।
- Gradient descent দিয়ে weight update: w ← w - η · ∂L/∂w।
Gradient Descent Variants
- Batch GD — পুরো dataset, স্থির কিন্তু ধীর।
- SGD — এক sample, noisy কিন্তু দ্রুত।
- Mini-batch — সাধারণত ৩২/৬৪/১২৮ — practical sweet spot।
Optimizers
- SGD + Momentum — past gradient memory।
- RMSProp — adaptive learning rate।
- Adam — Momentum + RMSProp, default choice।
- AdamW — weight decay সঠিকভাবে।
Vanishing & Exploding Gradient
Deep network এর শত্রু
Sigmoid/Tanh এ gradient ০-১ এর মধ্যে — অনেক layer পেরিয়ে ০ হয়ে যায় (vanishing)। আবার বড় weight এ gradient বিস্ফোরিত হয় (exploding)।
- ReLU — vanishing কমায়।
- Weight Initialization (He, Xavier) — শুরুতে সঠিক scale।
- Batch Normalization — layer wise normalize।
- Gradient Clipping — exploding রোধ।
- Residual Connection — gradient highway।
Code — Training Loop
train_loop.py
for epoch in range(epochs):
for X, y in train_loader:
optimizer.zero_grad() # পুরোনো gradient মুছে ফেলো
logits = model(X) # Forward
loss = loss_fn(logits, y)
loss.backward() # Backprop — autograd সব gradient হিসাব করে
optimizer.step() # Weight update
print(f"Epoch {epoch}: loss={loss.item():.4f}")Common Mistakes
- optimizer.zero_grad() ভুলে যাওয়া — gradient accumulate হয়।
- Learning rate খুব বড় — loss diverge।
- Learning rate খুব ছোট — training plateau।
- Eval mode ছাড়া BatchNorm/Dropout সহ inference।
Summary
এক নজরে
Backprop = Chain Rule দিয়ে gradient → Optimizer দিয়ে update। এটাই Deep Learning এর engine।