একটি পাহাড়ি রাস্তায় নামছেন — কোথাও সমতল, কোথাও খাড়া। প্রতিটি পায়ে একই দৈর্ঘ্য পা ফেলা বোকামি। চালাক hiker খাড়া-তে ছোট, সমতল-এ বড় পা ফেলেন। Adaptive optimizer ঠিক এই কাজটাই করে — প্রতিটি parameter-এর জন্য আলাদা step size।
AdaGrad
Frequent feature-এর LR কমে, rare feature-এর LR বড় থাকে। সমস্যা: G monotonically বাড়ে — LR শেষে ০ হয়ে যায়।
RMSProp
AdaGrad-এর fix — recent gradient-কে বেশি weight, LR decay-এর problem নেই। RNN-এ ভালো কাজ করে।
Adam (Adaptive Moment Estimation)
Momentum + RMSProp-এর combination, সাথে bias correction।
Default: β₁=0.9, β₂=0.999, ε=10⁻⁸, η=10⁻³। Deep learning-এর default optimizer।
AdamW, NAdam, LAMB
- AdamW: L2 regularization-কে weight decay হিসেবে আলাদা করে — Transformer-এ standard।
- NAdam: Adam + Nesterov look-ahead।
- LAMB: layer-wise adaptive — BERT-এর large batch training।
- Lion (2023): sign-based update, Adam-এর চেয়ে memory-efficient।
- Sophia (2024): light-weight Hessian-based, LLM pretraining-এ ব্যবহৃত।
Python Implementation (Adam from scratch)
import numpy as np
def adam_step(theta, g, state, lr=1e-3, b1=0.9, b2=0.999, eps=1e-8):
state['t'] += 1
state['m'] = b1*state['m'] + (1-b1)*g
state['v'] = b2*state['v'] + (1-b2)*g**2
m_hat = state['m'] / (1 - b1**state['t'])
v_hat = state['v'] / (1 - b2**state['t'])
return theta - lr * m_hat / (np.sqrt(v_hat) + eps)
# Train on noisy quadratic
np.random.seed(0)
theta = np.array([5.0, 5.0])
state = {'t': 0, 'm': np.zeros(2), 'v': np.zeros(2)}
for step in range(500):
g = np.array([2*theta[0], 20*theta[1]]) + 0.1*np.random.randn(2)
theta = adam_step(theta, g, state)
if step % 100 == 0:
loss = theta[0]**2 + 10*theta[1]**2
print(f"step {step:3d} theta={theta} loss={loss:.4f}")
# Verify with PyTorch
import torch
t = torch.tensor([5.0, 5.0], requires_grad=True)
opt = torch.optim.Adam([t], lr=1e-3)
for _ in range(500):
loss = t[0]**2 + 10*t[1]**2
opt.zero_grad(); loss.backward(); opt.step()
print(f"\nPyTorch Adam final: {t.detach().numpy()}")When to Use What
- SGD + momentum: image classification (ResNet, ViT) — best final accuracy with tuning।
- Adam / AdamW: NLP, Transformer, GAN, RL — default for most।
- RMSProp: RNN/LSTM।
- LAMB: large batch (BERT pretraining)।
- Lion / Sophia: very large LLM-এ memory/speed efficient।
Common Mistakes
- Adam-এ default LR সব সময় চলবে ধরে নেওয়া — Transformer-এ warmup দরকার।
- AdamW vs Adam confusion — weight decay implementation আলাদা।
- Bias correction skip করে early-step instability।
- Adam দিয়ে ResNet train করে SGD-এর চেয়ে worse val acc পেয়ে অবাক হওয়া।
Practice Tasks
- SGD, Momentum, RMSProp, Adam একই network-এ compare করুন (CIFAR-10)।
- Adam-এ β₂ = 0.9 vs 0.999 — কী পার্থক্য?
- AdamW-এ weight_decay = 0 vs 0.01 — generalization কেমন?
Assignment
Adam, AdamW, এবং Lion optimizer scratch থেকে NumPy-তে implement করুন। একটি logistic regression problem-এ train loss/accuracy curve plot করে compare করুন। প্রতিটির memory ও per-step compute রিপোর্ট করুন।
Interview Questions
- Adam-এ bias correction কেন দরকার?
- AdamW Adam-এর সমস্যা কীভাবে fix করে?
- Adam সব সময় SGD-এর চেয়ে ভালো — সত্য নাকি মিথ্যা? কেন?
- Adaptive optimizer generalization-এ কেন কখনো খারাপ হয়?
Mini Project
"Optimizer Comparison Suite" — একটি benchmark যেখানে user dataset choose করে এবং ৬টি optimizer simultaneously train হয়; learning curve, final accuracy, training time, memory side-by-side দেখায়।
Summary · সারসংক্ষেপ
- AdaGrad → RMSProp → Adam = adaptive LR-এর evolution।
- Adam = momentum + per-parameter LR + bias correction।
- AdamW = Transformer-এর standard।
- SGD+momentum এখনো computer vision-এ best generalization দেয়।