একজন অন্ধ ব্যক্তি একটি পাহাড় থেকে নামতে চাইছেন। সে দেখতে পায় না, কিন্তু প্রতিটি পদক্ষেপে পায়ের তলায় ঢাল অনুভব করতে পারে — কোন দিকে সবচেয়ে খাড়া নিচে। সে সেই দিকে একটু একটু করে নামে।
এই "অন্ধ নামা"-র process-টাই Gradient Descent। AI-এর প্রতিটি model "অন্ধ" — সেই global minimum কোথায় তা জানে না, কিন্তু gradient বলে কোন দিকে যেতে হবে।
Algorithm = ১ লাইনের Magic
Gradient descent-এর update rule:
- θ — model parameter
- η (eta) — learning rate (step size)
- ∇L — loss function-এর gradient
Variants — কোনটা কখন?
Batch Gradient Descent (BGD)
সমস্ত training data দিয়ে gradient হিসাব:
- ✅ Stable, deterministic convergence
- ❌ Slow per step, large memory for big datasets
Stochastic Gradient Descent (SGD)
প্রতিটি step-এ একটি random sample:
- ✅ Fast per step, online learning possible
- ❌ Noisy updates, oscillation near minimum
Mini-batch Gradient Descent
একটি ছোট batch (যেমন ৩২, ৬৪, ১২৮) দিয়ে gradient:
- ✅ BGD-এর stability + SGD-এর speed — best of both
- ✅ Hardware-optimized (GPU matrix operations)
- ❌ Batch size tuning needed
Learning Rate — সবচেয়ে Important Hyperparameter
Learning rate η নিয়ন্ত্রণ করে:
- η too small → slow convergence, stuck in plateau
- η just right → smooth, fast convergence
- η too large → overshoot, oscillate, diverge
Learning Rate Schedules:
- Step decay: fixed interval-এ η কমানো
- Exponential decay: η(t) = η₀ · e−kt
- Cosine annealing: η(t) = ηₘᵢₙ + ½(ηₘₐₓ−ηₘᵢₙ)(1 + cos(πT/Tₘₐₓ))
- Warmup: শুরুতে η বাড়িয়ে তারপর কমানো (Transformer training-এ standard)
Momentum — গতি যোগ করা
Gradient descent zigzag করে narrow valley-তে। Momentum past gradients-এর direction "স্মরণ" রাখে:
- β = 0.9 → পূর্ববর্তী ১০টি gradient-এর exponential weighted average।
- Narrow valley-তে oscillation কমায়, speed বাড়ায়।
- Saddle point থেকে escape সাহায্য করে।
Adaptive Methods — Per-parameter Learning Rate
AdaGrad
প্রতিটি parameter-এর জন্য accumulated squared gradient দিয়ে lr scale:
সমস্যা: r বড় হতে থাকে → lr শূন্যের দিকে → early stop।
RMSProp
AdaGrad-এর decaying average — সমস্যা সমাধান:
Adam (Adaptive Moment Estimation)
Momentum + RMSProp — deep learning-এর most popular optimizer:
Default: β₁=0.9, β₂=0.999, ε=1e−8
Python Implementation
import numpy as np
import torch
import torch.optim as optim
# 1) Vanilla Gradient Descent from scratch
# Minimize f(x) = x^2 + 4y^2 (elongated bowl)
def f(x, y): return x**2 + 4*y**2
def grad(x, y): return np.array([2*x, 8*y])
x, y = 5.0, 5.0
lr = 0.1
history = [(x, y)]
for _ in range(50):
g = grad(x, y)
x -= lr * g[0]
y -= lr * g[1]
history.append((x, y))
print(f"Vanilla GD: converged to ({x:.4f}, {y:.4f})")
# 2) SGD with Momentum
x, y, v_x, v_y = 5.0, 5.0, 0.0, 0.0
lr, beta = 0.1, 0.9
for _ in range(50):
g = grad(x, y)
v_x = beta * v_x + g[0]
v_y = beta * v_y + g[1]
x -= lr * v_x
y -= lr * v_y
print(f"Momentum GD: converged to ({x:.4f}, {y:.4f})")
# 3) Mini-batch on linear regression
np.random.seed(42)
N = 1000
X = np.random.randn(N, 3)
w_true = np.array([2.0, -1.0, 0.5])
y = X @ w_true + 0.1 * np.random.randn(N)
w = np.zeros(3)
lr = 0.1
batch_size = 32
for epoch in range(20):
perm = np.random.permutation(N)
for i in range(0, N, batch_size):
idx = perm[i:i+batch_size]
Xb, yb = X[idx], y[idx]
grad = (2/len(idx)) * Xb.T @ (Xb @ w - yb)
w -= lr * grad
if epoch % 5 == 0:
loss = np.mean((X @ w - y)**2)
print(f"epoch {epoch:2d}: loss={loss:.4f}, w={w.round(3)}")
# 4) PyTorch optimizers
Xt = torch.tensor(X, dtype=torch.float32)
yt = torch.tensor(y, dtype=torch.float32)
wt = torch.zeros(3, requires_grad=True)
optimizer = optim.Adam([wt], lr=0.1)
# Try: optim.SGD([wt], lr=0.1, momentum=0.9)
# Try: optim.RMSprop([wt], lr=0.1)
for epoch in range(100):
optimizer.zero_grad()
pred = Xt @ wt
loss = torch.mean((pred - yt)**2)
loss.backward()
optimizer.step()
if epoch % 20 == 0:
print(f"epoch {epoch:3d}: loss={loss.item():.4f}")
print(f"learned w = {wt.detach().numpy().round(3)}")AI/ML সংযোগ
- All deep learning training: gradient descent or its variants।
- Transformer training: AdamW (Adam + weight decay) + cosine LR schedule + warmup — industry standard।
- Computer vision: SGD + momentum + step LR decay often beats Adam for ResNet, ViT।
- Fine-tuning LLM: very small LR (1e-5 to 5e-5) with cosine decay — catastrophic forgetting avoid করে।
- Learning rate finder: LR বাড়িয়ে loss track — steepest descent point = good starting LR (fast.ai method)।
Common Mistakes
- Learning rate একই রাখা — decay/schedule ব্যবহার না করা।
- Too large batch size → sharp minimum, worse generalization (generalization gap)।
- Momentum ছাড়া narrow valley-তে training — zigzag-এ slow।
- Adam default-এই সব problem solve করবে ভাবা — কখনো না, architecture ও task অনুযায়ী vary।
- Gradient accumulation step-এ scale ভুল করা — effective batch size বুঝতে হবে।
Practice Tasks
- f(x) = x²-এ gradient descent: η = 0.1, 1.0, 2.1 দিয়ে converge/diverge দেখান।
- f(x,y) = x² + 25y²-এ vanilla vs momentum GD compare করুন (zigzag visualization)।
- Learning rate schedule (step decay vs cosine) দিয়ে linear regression train করুন, loss curve compare করুন।
- PyTorch-এ SGD, Adam, RMSprop দিয়ে same problem solve করে performance তুলনা করুন।
Assignment
একটি 2D Rosenbrock function f(x,y) = (1−x)² + 100(y−x²)²-এর জন্য vanilla GD, momentum GD, Adam — তিনটি optimizer-এর convergence speed তুলনা করুন। প্রতিটির জন্য প্রয়োজনীয় iteration সংখ্যা এবং final accuracy report করুন। (Hint: start from (−1, 2))।
Interview Questions
- SGD vs mini-batch vs BGD — tradeoffs কী?
- Momentum কীভাবে কাজ করে geometrically?
- Adam-এর bias correction কেন দরকার?
- Learning rate too high হলে কী ঘটে — mathematically ব্যাখ্যা করুন (Lipschitz smoothness)।
- Cosine annealing vs step decay — কখন কোনটা prefer করেন?
Mini Project
"Optimizer Zoo" — একটি visualization tool বানান যেখানে ৫টি optimizer (BGD, SGD, Momentum, RMSProp, Adam) একই non-convex 2D function-এর উপর simultaneously চলে। প্রতিটির path আলাদা color-এ দেখান, প্রতিটি step-এর speed (arrow length) visualize করুন। দেখান কোনটা saddle point-এ আটকে, কোনটা oscillate করে, কোনটা সবচেয়ে দ্রুত converge করে।
Summary · সারসংক্ষেপ
- Gradient Descent: θ ← θ − η∇L — AI training-এর মূল algorithm।
- Mini-batch = default: stability + speed + hardware efficiency।
- Learning rate = সবচেয়ে important hyperparameter — schedule ব্যবহার করুন।
- Momentum oscillation কমায়, saddle escape সাহায্য করে।
- Adam = momentum + adaptive LR — default choice, কিন্তু universal নয়।