পাহাড়ের ঢালে কুয়াশার ভেতরে দাঁড়িয়ে আছেন। সবচেয়ে দ্রুত নিচে নামতে চাইলে কোন দিকে যাবেন? পা দিয়ে চারপাশ অনুভব করে যেদিকে ঢাল সবচেয়ে খাড়া, সেদিকে। সেই "সবচেয়ে খাড়া দিক"-ই হলো gradient-এর বিপরীত দিক।
Gradient descent — modern AI-এর একমাত্র training algorithm — এই একটিমাত্র ধারণার উপর দাঁড়ানো।
Gradient = সব Partials একসাথে
f : ℝⁿ → ℝ-এর gradient একটি n-মাত্রার vector:
উদাহরণ: f(x, y) = x² + 3y² → ∇f = [2x, 6y]।
Direction of Steepest Ascent
যে কোনো direction û-এ f-এর rate of change (directional derivative):
- সর্বাধিক যখন θ = 0, অর্থাৎ û gradient-এর সমান্তরাল।
- সর্বনিম্ন (steepest descent) যখন û = −∇f / ‖∇f‖।
Contour ও Perpendicularity
Contour line (level set) — যেখানে f constant। Gradient সবসময় contour-এর সাথে perpendicular। এটাই কেন gradient সবচেয়ে দ্রুত ওঠার পথ — সমান-উচ্চতার line থেকে যত দ্রুত সম্ভব দূরে যাওয়া।
ML-এর গুরুত্বপূর্ণ Gradient
MSE Loss
Linear regression
Cross-entropy + softmax
Python Implementation
import numpy as np
# 1) Manual gradient of f(x, y) = x^2 + 3y^2
def f(x, y): return x**2 + 3*y**2
def grad_f(x, y): return np.array([2*x, 6*y])
print("∇f at (1,1) =", grad_f(1, 1)) # [2, 6]
# 2) Gradient descent on f
x, y = 4.0, 4.0
lr = 0.1
for step in range(30):
g = grad_f(x, y)
x, y = x - lr*g[0], y - lr*g[1]
print(f"final (x,y) = ({x:.4f}, {y:.4f}) f = {f(x,y):.6f}")
# 3) Linear regression via gradient descent
np.random.seed(0)
X = np.random.randn(100)
y = 3 * X + 2 + 0.1 * np.random.randn(100)
w, b, lr = 0.0, 0.0, 0.05
for epoch in range(200):
y_hat = w*X + b
err = y_hat - y
dw = (2/len(X)) * np.dot(err, X)
db = (2/len(X)) * err.sum()
w -= lr * dw
b -= lr * db
print(f"learned w={w:.3f}, b={b:.3f} (true 3.0, 2.0)")
# 4) PyTorch autograd
import torch
xy = torch.tensor([4.0, 4.0], requires_grad=True)
f_val = xy[0]**2 + 3*xy[1]**2
f_val.backward()
print("torch grad:", xy.grad) # [8., 24.]AI/ML সংযোগ
- Gradient Descent: θ ← θ − η · ∇L — সমস্ত ML training।
- SGD / Mini-batch: full gradient-এর noisy approximation।
- Momentum, Adam: gradient-এর moving average ব্যবহার।
- Gradient clipping: ‖∇‖ > c হলে scale করে কাটা — RNN/LLM-এ অপরিহার্য।
- Gradient checking: numerical gradient দিয়ে analytical verify।
- Saliency maps: ∂output/∂input দিয়ে কোন pixel গুরুত্বপূর্ণ — XAI।
Common Mistakes
- Gradient = scalar ভাবা — এটা vector।
- "+ η ∇L" ব্যবহার করে fall করার বদলে rise করা — sign ভুল।
- Learning rate বড় → gradient direction সঠিক কিন্তু step বড়, oscillate করে।
- Mini-batch gradient ও full gradient-কে identical ভাবা।
Practice Tasks
- f(x, y) = x² + xy + y²-এর gradient বের করুন। (0, 0) কি minimum?
- (3, 4) point-এ f = x² + y²-এর gradient ও steepest descent direction।
- Linear regression gradient descent চালিয়ে loss curve plot করুন।
Assignment
f(x, y) = (x − 3)² + (y + 2)²-এর জন্য (10, 10) থেকে শুরু করে gradient descent চালান। প্রতি step-এর (x, y) save করে contour plot-এর উপর path draw করুন। তিনটি ভিন্ন learning rate (0.01, 0.1, 0.9) তুলনা করুন।
Interview Questions
- Gradient কেন steepest ascent direction?
- SGD ও full-batch GD-এর tradeoff কী?
- Gradient clipping কেন দরকার RNN-এ?
- Momentum কীভাবে কাজ করে?
Mini Project
"Gradient Descent on a Bowl" — f(x, y) = x² + 4y²-এর contour plot এর উপর gradient descent path animate করুন (matplotlib FuncAnimation)। দেখান কীভাবে narrow valley-তে zigzag হয় এবং momentum যোগ করলে কেমন মসৃণ হয়।
Summary · সারসংক্ষেপ
- Gradient = সব partial derivative-এর vector।
- Gradient direction = steepest ascent; বিপরীত = steepest descent।
- Gradient সবসময় contour line-এর perpendicular।
- Modern AI training = gradient descent-এর variations (SGD, Adam, …)।