পাঠ ১৪ · ৩০-এর মধ্যে · মডিউল ২
Home / AI Courses / AI Foundations / গ্রেডিয়েন্ট

গ্রেডিয়েন্ট — উপরে যাওয়ার দিক

Gradients — direction of steepest ascent
৮ মিনিট পড়া শুরু · Beginner NumPy কোডসহ

এই পাঠে যা শিখবেন

  • আংশিক ডেরিভেটিভ (partial derivative) — যখন একাধিক চলক থাকে
  • গ্রেডিয়েন্ট কী — সব আংশিক ডেরিভেটিভের ভেক্টর
  • "উপরে যাওয়ার সবচেয়ে খাড়া দিক" — গ্রেডিয়েন্টের জ্যামিতিক অর্থ
  • NumPy দিয়ে গ্রেডিয়েন্ট সংখ্যাগতভাবে বের করা

১ · এক চলক থেকে দু'চলকে

আগের পাঠে আমরা $f(x)$-এর ডেরিভেটিভ দেখেছি — একটি চলক $x$। কিন্তু বাস্তবে — বিশেষ করে AI-তে — ফাংশন প্রায়ই অনেক চলকের। যেমন একটি বাড়ির দাম শুধু আকার নয়, অবস্থান, বয়স, কক্ষ-সংখ্যা — সব কিছুর উপর নির্ভর করে।

সরল উদাহরণ — $f(x, y) = x^2 + y^2$। দু'টি চলক। ঢাল কোন দিকে?

২ · আংশিক ডেরিভেটিভ

সংজ্ঞা

একটি চলকের সাপেক্ষে আংশিক ডেরিভেটিভPartial Derivativeবহু-চলক ফাংশনে — একটি চলকের সাপেক্ষে derivative নিয়ে অন্যগুলো ধ্রুব ধরা। চিহ্ন: $\partial$ (curly d, "del")। AI-তে loss function কোটি কোটি weight-এর — প্রতিটির সাপেক্ষে আংশিক derivative-ই gradient. Multivariable calculus-এর core. মানে — অন্য সব চলক ধ্রুব ধরে নিয়ে শুধু সেই চলকের সাপেক্ষে ডেরিভেটিভ। চিহ্ন: $\partial$ (curly d)।

উদাহরণ

$f(x, y) = x^2 + y^2$

  • $x$-এর সাপেক্ষে আংশিক: $\dfrac{\partial f}{\partial x} = 2x$   ($y^2$-এর ডেরিভেটিভ ০, কারণ $y$ ধ্রুব)
  • $y$-এর সাপেক্ষে আংশিক: $\dfrac{\partial f}{\partial y} = 2y$

আরেকটি উদাহরণ

$f(x, y) = 3x^2 y + 4xy^2 + 5$

  • $\dfrac{\partial f}{\partial x} = 6xy + 4y^2$   ($y$ ধ্রুব ধরা হলো)
  • $\dfrac{\partial f}{\partial y} = 3x^2 + 8xy$
ভাবুন একটি পাহাড়ের ত্রিমাত্রিক ম্যাপ। আপনি দাঁড়িয়ে আছেন $(x, y)$ বিন্দুতে। উচ্চতা = $f(x, y)$।
$\partial f/\partial x$ = পূর্ব দিকে এক ধাপ গেলে কত উচ্চতা পরিবর্তন।
$\partial f/\partial y$ = উত্তর দিকে এক ধাপ গেলে কত উচ্চতা পরিবর্তন।

৩ · গ্রেডিয়েন্ট = সব আংশিক ডেরিভেটিভের ভেক্টর

সব আংশিক ডেরিভেটিভ একসাথে রাখলে — পাওয়া যায় গ্রেডিয়েন্ট ভেক্টরGradientএকটি বহু-চলক ফাংশনের সব আংশিক derivative-এর ভেক্টর। যেদিকে ফাংশন সবচেয়ে দ্রুত বাড়ে সেদিকে নির্দেশ করে। চিহ্ন: $\nabla f$।। চিহ্ন: $\nabla f$ (nabla)।

$$\nabla f = \begin{pmatrix} \dfrac{\partial f}{\partial x} \\[6pt] \dfrac{\partial f}{\partial y} \end{pmatrix}$$

$f(x, y) = x^2 + y^2$-এর গ্রেডিয়েন্ট:

$$\nabla f = \begin{pmatrix} 2x \\ 2y \end{pmatrix}$$

$x = 1, y = 2$ বিন্দুতে — $\nabla f = (2, 4)$।

৪ · গ্রেডিয়েন্টের জ্যামিতিক অর্থ

এটাই AI-এর সবচেয়ে গুরুত্বপূর্ণ একটি ধারণা —

গুরুত্বপূর্ণ সত্য

গ্রেডিয়েন্ট ভেক্টর — যেদিকে ফাংশন সবচেয়ে দ্রুত বাড়ে সেই দিকে নির্দেশ করে। এর বিপরীত দিক — সবচেয়ে দ্রুত কমার দিক।

পাহাড়ের উপমায় — আপনি $(x, y)$ বিন্দুতে দাঁড়িয়ে আছেন। গ্রেডিয়েন্ট ভেক্টর তার দিকে ইশারা করে — যেদিকে গেলে সবচেয়ে দ্রুত উপরে উঠবেন। $-\nabla f$ — তার বিপরীত — সবচেয়ে দ্রুত নিচে নামার দিক।

$f(x,y) = x^2 + y^2$ — contour map ∇f points uphill, −∇f points to minimum min L=0 P(3,4) ∇f = (6,8) ↑ steepest ascent −∇f ↓ AI-র পথ বাইরে = বেশি L (high loss) কেন্দ্র = কম L (target) প্রতিটি training step: w ← w − η·∇f (ছোট ধাপ −∇f-এর দিকে)
$\nabla f$ contour-এর সাথে lambda-এ বাইরের দিকে। এর বিপরীতে চললে — minimum-এর দিকে।

৫ · কেন AI-এর জন্য গুরুত্বপূর্ণ?

AI-তে আমরা একটি loss function $L(w_1, w_2, \ldots, w_n)$ বানাই। লক্ষ্য — এই $L$-কে যতটা সম্ভব ছোট করা।

কিন্তু $L$-এর কোটি কোটি চলক ($w_1, w_2, \ldots$) থাকে। কোন দিকে যাবেন? — গ্রেডিয়েন্ট বলে দেয়।

  • $\nabla L$ গণনা করুন — উপরে যাওয়ার দিক।
  • বিপরীতে এক ছোট ধাপ যান: $w \leftarrow w - \eta \nabla L$ (এখানে $\eta$ = learning rateLearning Rateপ্রতি training step-এ weight update-এর "ধাপের আকার"। বড় = দ্রুত কিন্তু overshoot, ছোট = ধীর কিন্তু stable. DL-এর সবচেয়ে গুরুত্বপূর্ণ hyperparameter.)।
  • পুনরাবৃত্তি করুন — ক্রমশ $L$-এর সর্বনিম্নে পৌঁছানো।

এটাই Gradient Descent — পরের পাঠে বিস্তারিত। আজ শুধু জানা — গ্রেডিয়েন্ট কী।

৬ · NumPy দিয়ে গ্রেডিয়েন্ট

সংজ্ঞা থেকেই গ্রেডিয়েন্ট সংখ্যাগতভাবে বের করা যায় — প্রতিটি চলকের সাপেক্ষে আলাদাভাবে।

Python · NumPy
import numpy as np

# f(x, y) = x^2 + y^2
def f(point):
    x, y = point
    return x ** 2 + y ** 2

def gradient(f, point, h=1e-6):
    point = np.array(point, dtype=float)
    grad = np.zeros_like(point)
    for i in range(len(point)):
        p_plus = point.copy()
        p_plus[i] += h
        grad[i] = (f(p_plus) - f(point)) / h
    return grad

# (1, 2) বিন্দুতে গ্রেডিয়েন্ট
g = gradient(f, [1.0, 2.0])
print(f"∇f(1, 2) ≈ {g}")
# তাত্ত্বিক উত্তর: (2*1, 2*2) = (2, 4)

    
ফলাফল প্রায় $(2, 4)$ — তাত্ত্বিক উত্তরের সাথে মিলছে। gradient() function-টি যেকোনো মাত্রায় কাজ করে।

৭ · উচ্চ-মাত্রিক গ্রেডিয়েন্ট

AI মডেলে মিলিয়ন বা বিলিয়ন চলক থাকতে পারে। গ্রেডিয়েন্ট তখন একটি বিশাল ভেক্টর।

Python · NumPy
import numpy as np

# 5-চলকের একটি ফাংশন
# f(w) = w[0]^2 + 2*w[1]^2 + 3*w[2]^2 + 4*w[3]^2 + 5*w[4]^2
def f(w):
    coeffs = np.array([1, 2, 3, 4, 5])
    return np.sum(coeffs * w ** 2)

def gradient(f, w, h=1e-6):
    w = np.array(w, dtype=float)
    grad = np.zeros_like(w)
    for i in range(len(w)):
        wp = w.copy()
        wp[i] += h
        grad[i] = (f(wp) - f(w)) / h
    return grad

w0 = np.array([1.0, 1.0, 1.0, 1.0, 1.0])
print("ফাংশন মান:", f(w0))
print("গ্রেডিয়েন্ট:", gradient(f, w0))
# তাত্ত্বিক: (2, 4, 6, 8, 10)

    
৫-মাত্রিক গ্রেডিয়েন্ট = $(2, 4, 6, 8, 10)$। বাস্তব AI-তে — PyTorch বা TensorFlow এই কাজটি স্বয়ংক্রিয়ভাবে করে (autogradAutograd · Automatic DifferentiationPyTorch/TensorFlow-এর feature — computation graph track করে chain rule দিয়ে gradient নিজেই বের করে। হাতে derivative লিখতে হয় না।)। আমাদের হাতে লিখতে হয় না।

৮ · একটি ভিজ্যুয়াল উপলব্ধি

$f(x, y) = x^2 + y^2$ — একটি বাটির আকৃতির পৃষ্ঠ (paraboloid)। কেন্দ্র $(0, 0)$-এ সর্বনিম্ন, $L = 0$।
যেকোনো বিন্দু থেকে $-\nabla f$-এর দিকে গেলে — সরাসরি কেন্দ্রের দিকে চলে যাবেন।

বাস্তব loss landscape এত সরল নয় — এটা পাহাড়-উপত্যকা মেশানো। কিন্তু মূলনীতি একই: গ্রেডিয়েন্টের বিপরীত দিকে গেলে নিচে নামবেন।

AI-এ একটি বড় চ্যালেঞ্জ — local minimumLocal Minimumএকটি বিন্দু যেখানে আশেপাশের সব বিন্দুর চেয়ে loss কম — কিন্তু global সর্বনিম্ন না-ও হতে পারে। gradient descent এতে আটকে যেতে পারে।. loss landscape-এ অনেক ছোট গর্ত থাকতে পারে। গ্রেডিয়েন্ট descent কোনো একটি গর্তে আটকে যেতে পারে — সবচেয়ে নিচু না হলেও। এই সমস্যার সমাধানে আছে অনেক কৌশল, যা পরে দেখা যাবে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ "Gradient সবচেয়ে দ্রুত উপরে যাওয়ার দিক" — এই দাবি কেন সত্য? Mathematically প্রমাণ কী?

এই দাবিটি যেন magic, কিন্তু আসলে directional derivative ও Cauchy-Schwarz inequality থেকে সরাসরি প্রমাণ।

Directional derivative:

  • একটি unit vector $\hat{\mathbf{u}}$-এর দিকে $f$-এর পরিবর্তনের হার = $D_{\hat{u}}f = \nabla f \cdot \hat{\mathbf{u}}$।
  • এটি dot product — gradient ও direction-এর।

Dot product expansion:

$\nabla f \cdot \hat{\mathbf{u}} = \|\nabla f\| \cdot \|\hat{\mathbf{u}}\| \cdot \cos\theta = \|\nabla f\| \cos\theta$

($\hat{\mathbf{u}}$ unit vector, তাই $\|\hat{\mathbf{u}}\| = 1$)

Maximize over $\theta$:

  • $\cos\theta$ সর্বোচ্চ যখন $\theta = 0$ — অর্থাৎ $\hat{\mathbf{u}}$ ও $\nabla f$ একই দিকে।
  • সর্বোচ্চ মান = $\|\nabla f\|$।
  • সর্বনিম্ন মান যখন $\theta = 180°$ — অর্থাৎ $-\nabla f$ দিকে। মান = $-\|\nabla f\|$।

প্রভাব:

  • $\nabla f$ direction-এ সর্বাধিক বৃদ্ধি।
  • $-\nabla f$ direction-এ সর্বাধিক হ্রাস।
  • $\nabla f$ এর বিপরীতে — সবচেয়ে দ্রুত কমার পথ।
  • Perpendicular (কোণ ৯০°) — কোনো পরিবর্তন নেই (level curve-এ চলা)।

মূল উপলব্ধি: গ্রেডিয়েন্ট-এর "magic" আসলে dot product-এর geometry. এই কারণেই AI-এর প্রতিটি step gradient-এর বিপরীত দিকে — এর কোনো বিকল্প নেই (locally)।

Caveat: এই "steepest" শুধু infinitesimally সত্য। বড় ধাপে — landscape curvature কারণে পথ optimal না-ও হতে পারে। তাই Newton's method, second-order optimization-এ Hessian ব্যবহার।

প্র ০২ GPT-৪-এর ১.৭৫ trillion parameters. প্রতিটি training step-এ এত বিশাল gradient compute কীভাবে সম্ভব? Backprop-এর efficiency কোথা থেকে আসে?

এই প্রশ্ন AI computation-এর সবচেয়ে gripping engineering trick-এ পৌঁছায় — backpropagation.

Naive approach — কেন কাজ করবে না:

  • Numerical: প্রতিটি parameter-এর জন্য একটি forward pass. ১.৭৫T params × forward time = অসম্ভব।
  • প্রতিটি step-এ ~১০ trillion FLOPs forward. × 1.75T = 1.75 × 10²⁵ FLOPs. মহাবিশ্বের গণনাও কম।

Backprop-এর genius — chain rule:

  • Computation graph: প্রতিটি operation একটি node.
  • Forward pass: input → output, intermediate values store.
  • Backward passBackpropagationoutput থেকে input-এর দিকে chain rule দিয়ে gradient propagate করার algorithm. DL-এর শেখার মূল engine — Rumelhart, Hinton, Williams (১৯৮৬)।: output থেকে input-এর দিকে — প্রতিটি node-এ local derivative × upstream gradient.
  • একটি forward + একটি backward = সব gradients.

কেন এটি দ্রুত — Reverse-mode AutoDiff:

  • Output scalar ($L$) → input vector (parameters)।
  • Cost ≈ forward pass cost × constant (~৩×)।
  • প্রতিটি parameter-এর gradient — independently compute নয়, একসাথে।
  • এই efficiency এসে কারণ — sum-of-products structure-এ shared sub-expressions.

উদাহরণ — সরল network:

  • $L = (y - W_2 \sigma(W_1 x))^2$।
  • Forward: $h = W_1 x$, $a = \sigma(h)$, $\hat{y} = W_2 a$, $L = (y - \hat{y})^2$।
  • Backward (chain rule):
    • $\partial L / \partial \hat{y} = -2(y - \hat{y})$।
    • $\partial L / \partial W_2 = (\partial L / \partial \hat{y}) \cdot a^T$।
    • $\partial L / \partial a = W_2^T \cdot (\partial L / \partial \hat{y})$।
    • $\partial L / \partial h = (\partial L / \partial a) \cdot \sigma'(h)$।
    • $\partial L / \partial W_1 = (\partial L / \partial h) \cdot x^T$।
  • Forward + backward = total gradient. Memory cost: forward intermediates store.

Modern implementations:

  • PyTorch autograd: dynamic computation graph, eager.
  • JAX: functional, JIT compile-এ XLA.
  • TensorFlow: static graph (older), eager (newer)।
  • Activation checkpointing: memory save — recompute কিছু intermediates.
  • Mixed precision (fp16): half memory, almost-same accuracy.
  • Distributed training: gradient sync across GPUs (data parallel)।

মূল উপলব্ধি: Backprop শুধু "calculus" না — এটি AI-র একটি engineering miracle. ১৯৮৬-তে Rumelhart, Hinton, Williams পেপারে আনুষ্ঠানিকীকরণ। এই algorithm ছাড়া আজকের কোনো DL সম্ভব না।

প্র ০৩ Loss landscape "smooth bowl" না — এটা ১,০০০,০০০-D-এর rocky landscape. Saddle points, local minima, plateaus — gradient descent কীভাবে navigate করে?

High-dimensional optimization-এর geometry counterintuitive. অনেক popular ধারণা ভুল।

মিথ ১: "Many local minima"

  • ২-D-এ অনেক — সত্য।
  • হাই-D-এ — Choromanska et al. (২০১৪) ও পরে Dauphin et al. দেখান — DL loss surface-এ local minima বিরল, সাধারণত globally optimum-এর কাছে।
  • সমস্যা — bad local minima না, saddle points.

মিথ ২: "Gradient descent gets stuck"

  • Saddle point — eigenvalues mixed (positive ও negative)।
  • Pure GD-এ slow escape — gradient ছোট কিন্তু ০ না।
  • Stochasticity — saddle থেকে বেরিয়ে আসতে সাহায্য করে। SGD এ কারণে ভাল।

আসল চ্যালেঞ্জ:

  • Plateaus: বড় flat region — gradient ~০, কিন্তু minimum না।
  • Cliffs: Sharp derivative — gradient explosion.
  • Curvature variation: এক direction-এ steep, অন্য direction-এ flat — pure GD struggle.
  • Pathological curvature: Hessian poorly conditioned → slow.

আধুনিক optimizers — কী করে:

  • Momentum (Polyak ১৯৬৪): velocity store — slow regions accelerate. $v_{t+1} = \beta v_t - \eta \nabla L$।
  • Nesterov accelerated: "look ahead" — momentum direction-এ আগে থেকে gradient.
  • AdaGrad/RMSprop: per-parameter learning rate — frequent updates-এ কম, rare-এ বেশি।
  • AdamAdam · Adaptive Moment Estimation(২০১৪) সবচেয়ে জনপ্রিয় optimizer — momentum ও RMSprop-এর মিশ্রণ। প্রতিটি parameter-এর নিজস্ব learning rate adaptive. DL-এর default পছন্দ। (Kingma ২০১৪): momentum + RMSprop combined. DL-এ default.
  • AdamW: weight decay decoupled. Modern LLM-এ standard.
  • Lion (Google ২০২৩): Adam-এর simpler alternative. Memory-efficient.

SGD-র counterintuitive efficacy:

  • Random mini-batches → noisy gradients.
  • Noise = exploration. Saddle escape সহজ।
  • Implicit regularization — generalization ভাল।
  • Sharp minima vs flat minima — SGD flat-এর দিকে bias. Flat minima better generalize.

Loss landscape visualization:

  • Li et al. (২০১৮) — DL loss surfaces 2D projection দেখায়।
  • ResNet skip connection — landscape smoother করে।
  • Wide networks — flat-এর প্রবণতা।

মূল উপলব্ধি: Pure gradient descent — old textbook. Modern AI-তে — momentum, adaptive learning rates, stochastic noise. সব মিলে — high-D rocky landscape navigate. এই কারণে DL "এত ভাল কাজ করে" — যা অপ্রত্যাশিত।

প্র ০৪ Gradient ভেক্টরের দৈর্ঘ্য $\|\nabla f\|$ কী বলে? AI training-এ কখন এটা গুরুত্বপূর্ণ?

Gradient-এর direction guide করে; কিন্তু magnitude-ও তথ্য বহন করে।

Geometric meaning:

  • $\|\nabla f\|$ = সেই বিন্দুতে সবচেয়ে দ্রুত পরিবর্তনের হার।
  • বড় magnitude = খাড়া পাহাড়, দ্রুত পরিবর্তন।
  • ছোট magnitude = সমতল area, ধীর পরিবর্তন।
  • $\|\nabla f\| = 0$ = critical point (min/max/saddle)।

Training-এ practical implications:

  • (১) Gradient explosion:
    • $\|\nabla L\|$ অনেক বড় → weight update বিশাল → loss diverges.
    • RNN/Transformer training-এ common.
    • Solution: Gradient clippingGradient Clippingএকটি কৌশল — gradient-এর norm threshold-এর বেশি হলে কেটে scale করা। gradient explosion প্রতিরোধে RNN ও Transformer training-এ অপরিহার্য।. Limit $\|\nabla L\| \leq c$ (typically ১.০)।
  • (২) Gradient vanishing:
    • $\|\nabla L\| \to 0$ → কোনো learning না।
    • Deep network-এ — chain rule-এ small numbers multiply.
    • Sigmoid activation-এ severe. ReLU + BatchNorm + skip connection — সমাধান।
  • (৩) Learning rate tuning:
    • Effective step size = $\eta \cdot \|\nabla L\|$।
    • $\|\nabla L\|$ training-এর শুরুতে বড়, শেষে ছোট।
    • তাই — learning rate schedule (warm-up, cosine decay)।
  • (৪) Convergence detection:
    • $\|\nabla L\| < \epsilon$ — typically training stop criterion.
    • Practice-এ — validation loss দেখা better.

Per-parameter view:

  • Adam — প্রতিটি parameter-এর gradient magnitude track.
  • Frequently-updated params → smaller effective step (RMS-normalized)।
  • Rarely-updated → larger step.
  • এটি sparse data (NLP, recommendation)-এ critical.

Diagnostic tool:

  • Training-এ gradient norm log করুন। Sudden spike → divergence risk. Slow decay → healthy convergence.
  • Per-layer gradient norms — DL debugging-এ standard.
  • "Healthy" training: norms ~constant scale-এ — neither growing nor vanishing.

RLHF-এ আরেক angle:

  • Reward model-এ training reward gradient signal — small.
  • Therefore RLHF — KL penalty, gradient clipping carefully.

মূল উপলব্ধি: Gradient direction = "where to go"। Gradient magnitude = "how confident is the signal"। দু'টিই training-এ critical. Magnitude ignore করলে — divergence বা stagnation.

অনুশীলন

  1. হাতে গণনা: $f(x, y) = x^3 y + 2xy^2$।
    • $\partial f/\partial x$ ও $\partial f/\partial y$ বের করুন।
    • $(1, 2)$ বিন্দুতে গ্রেডিয়েন্ট কত?
    • $\partial f/\partial x = 3x^2 y + 2y^2$।
    • $\partial f/\partial y = x^3 + 4xy$।
    • $(1, 2)$-এ: $\partial f/\partial x = 3(1)(2) + 2(4) = 14$; $\partial f/\partial y = 1 + 8 = 9$।
    • $\nabla f(1,2) = (14, 9)$।
  2. NumPy-তে যাচাই: উপরের কোডে $f$ পরিবর্তন করে নিজের ফাংশনের গ্রেডিয়েন্ট যাচাই করুন।
    import numpy as np
    
    def f(point):
        x, y = point
        return x**3 * y + 2*x*y**2
    
    def gradient(f, point, h=1e-6):
        point = np.array(point, dtype=float)
        grad = np.zeros_like(point)
        for i in range(len(point)):
            p = point.copy()
            p[i] += h
            grad[i] = (f(p) - f(point)) / h
        return grad
    
    print(gradient(f, [1.0, 2.0]))  # ≈ [14, 9]
  3. চিন্তা করুন: পাহাড়ের উপমায় — যদি গ্রেডিয়েন্ট ভেক্টরের দৈর্ঘ্য বড় হয়, সেটা কী বলে? যদি ছোট হয়?

    প্র ০৪-এ বিস্তারিত আছে। সংক্ষেপে:

    • বড় $\|\nabla f\|$: খাড়া পাহাড়, দ্রুত পরিবর্তন। AI-তে ঝুঁকি — gradient explosion. Solution: clipping.
    • ছোট $\|\nabla f\|$: সমতল, ধীর পরিবর্তন। AI-তে — stuck, vanishing gradient. Solution: ReLU, BatchNorm, skip connections.
    • $\|\nabla f\| = 0$: Critical point — min, max, বা saddle.

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? ব্রাউজারে কাজ না করলে Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ, শুধু Gmail অ্যাকাউন্ট লাগে।
পূর্ববর্তী পাঠ
পাঠ ১৩ · ডেরিভেটিভ ও ঢাল