Foundationপ্রথম নীতি থেকে
LEVEL 13লেসন ১৮/২৩কঠিন১ ঘণ্টা ১০ মিনিট

AI/ML Foundations — একদম প্রথম নীতি থেকে

AI/ML Foundations from First Principles

Machine learning আসলে data থেকে function approximate করা — জাদু নয়, calculus আর linear algebra। Linear regression শূন্য থেকে derive করে, bias-variance tradeoff সংখ্যায় দেখে, আর সবচেয়ে গুরুত্বপূর্ণ — ML-এর তত্ত্ব এখনো কতটা অসম্পূর্ণ তা সৎভাবে স্বীকার করে।

এই লেসন শেষে আপনি পারবেন

  • Machine learning-কে 'data থেকে function approximation' হিসেবে সংজ্ঞায়িত করতে পারবেন, linear algebra ও probability-র ভাষায়
  • Linear regression-এর loss function আর gradient descent update rule হাতে derive করতে পারবেন
  • Bias-variance tradeoff একটা concrete সাংখ্যিক উদাহরণে ব্যাখ্যা করতে পারবেন — underfitting বনাম overfitting
  • Deep learning কেন স্কেলে কাজ করে তার সৎ, non-mystical ব্যাখ্যা দিতে পারবেন
  • ML-এর তাত্ত্বিক ভিত্তি (generalization theory) কেন এখনো অসম্পূর্ণ, আর এটা কেন automata/complexity theory-র নিশ্চয়তার থেকে ভিন্ন প্রকৃতির জ্ঞান, তা ব্যাখ্যা করতে পারবেন

আগে যা বোঝা থাকা দরকার

আগে এটা বুঝি

এই module-এর আগের লেসনগুলোতে আপনি যা প্রমাণ করেছেন তা চিরকাল সত্য। Halting problem undecidable — এটা কোনো নতুন CPU, নতুন algorithm, নতুন data দিয়ে বদলাবে না। NP-complete সমস্যা P-তে আছে কি না, এখনো অজানা, কিন্তু যেদিন প্রমাণ হবে, সেটাও চিরকাল সত্য থাকবে। এই ধরনের জ্ঞান — deductive, প্রমাণ-ভিত্তিক, সময়-নিরপেক্ষ — এই module-এর প্রথমার্ধের চরিত্র।

এখন আমরা সম্পূর্ণ ভিন্ন ধরনের জ্ঞানে ঢুকছি। Machine learning নিয়ে প্রায়ই এমনভাবে কথা বলা হয় যেন এটা জাদু — একটা বিশাল neural network data “শিখে ফেলে”, আর কেউ ঠিক জানে না কীভাবে। এই লেসনের প্রথম কাজ সেই আবরণটা সরানো: linear regression-এর সম্পূর্ণ গণিত হাতে derive করে দেখাব যে এটা শুধু calculus আর linear algebra, নতুন কিছু না।

কিন্তু দ্বিতীয় আর বেশি গুরুত্বপূর্ণ কাজটা হলো একটা অস্বস্তিকর সততা: deep learning-এর তত্ত্ব এখনো এই module-এর প্রথমার্ধের মতো পূর্ণাঙ্গ নয়। আমরা জানি কেন Turing machine একটা নির্দিষ্ট ভাষা চিনতে পারে না — প্রমাণ আছে। আমরা এখনো জানি না কেন একটা ১০০ বিলিয়ন প্যারামিটারের neural network overfitting ছাড়াই generalize করে — শুধু পর্যবেক্ষণ আছে, সম্পূর্ণ প্রমাণ নেই। এই পার্থক্যটা চেনা — কখন আমরা জানি, আর কখন শুধু অনুমান করি যে জানি — গবেষণার সবচেয়ে গুরুত্বপূর্ণ দক্ষতা, আর এই লেসনটা সেই দক্ষতার প্রথম বাস্তব প্রয়োগ।

মূল ধারণা

Machine learning আসলে কী — একটা সংজ্ঞা যেখানে জাদু নেই

সবচেয়ে সাধারণ রূপে (supervised learning):

আপনার কাছে জোড়া data আছে: (x₁, y₁), (x₂, y₂), …, (xₙ, yₙ)। আপনি একটা function f খুঁজছেন যাতে নতুন, আগে না-দেখা x-এর জন্যও f(x) ≈ y হয়।

এটাই সব। x একটা ছবি হতে পারে, একটা বাক্য হতে পারে, একটা user-এর click history হতে পারে — কিন্তু গাণিতিকভাবে x সবসময় একটা vector (mathematics/linear-algebra লেসনের সেই বস্তু), আর f একটা function যার parameter আমরা data দেখে ঠিক করি।

এখানেই আগের দুইটা math লেসন সরাসরি কাজে লাগে:

  • Linear algebra: x একটা vector (d সংখ্যক feature), data পুরোটা একটা matrix X (n × d)। Model-এর ভেতরের গণনা প্রায় সবসময় matrix multiplication।
  • Probability: Data-তে noise থাকে — একই x দুইবার দেখলেও y সামান্য ভিন্ন হতে পারে। তাই f(x) ≈ y লেখাটার আসল অর্থ একটা probabilistic statement: y = f(x) + ε, যেখানে ε একটা random variable (গড় শূন্য, নির্দিষ্ট variance)।

Linear regression — সবচেয়ে সরল case, সম্পূর্ণ derive করা

একটা feature (d = 1) ধরি, যাতে হাতে-কলমে করা যায়। Model:

y^=f(x)=wx+b\hat{y} = f(x) = wx + b

w (weight/slope) আর b (bias/intercept) — এই দুইটাই আমরা data থেকে বের করতে চাই।

Loss function — “কতটা ভুল” মাপার উপায়

n টা data point-এর উপর গড় squared error (Mean Squared Error, MSE):

L(w,b)=1n∑i=1n(wxi+b−yi)2L(w, b) = \frac{1}{n}\sum_{i=1}^{n} \big(wx_i + b - y_i\big)^2

Squared কেন? দুইটা কারণ:

  1. সবসময় অ-ঋণাত্মক — over-prediction আর under-prediction একইভাবে penalize হয়, একে অপরকে বাতিল করে না
  2. Differentiable — এটাই গুরুত্বপূর্ণ, কারণ পরের ধাপে derivative লাগবে। (|error| ব্যবহার করা যেত, কিন্তু 0-তে derivative অসংজ্ঞায়িত — গাণিতিকভাবে অসুবিধাজনক)

L(w, b) একটা convex function w, b-এর — অর্থাৎ এর একটাই global minimum আছে, কোনো লুকানো local minimum নেই যেখানে আটকে যেতে পারেন। এই গুণটাই linear regression-কে বিশেষভাবে সহজ করে তোলে — পরে দেখব deep network-এ এই নিশ্চয়তা আর থাকে না।

Gradient derive করা — হাতে

L-কে w আর b-এর সাপেক্ষে partial derivative নিন (chain rule):

∂L∂w=2n∑i=1n(wxi+b−yi) xi∂L∂b=2n∑i=1n(wxi+b−yi)\frac{\partial L}{\partial w} = \frac{2}{n}\sum_{i=1}^{n} \big(wx_i + b - y_i\big)\, x_i \qquad \frac{\partial L}{\partial b} = \frac{2}{n}\sum_{i=1}^{n} \big(wx_i + b - y_i\big)

এই দুইটা রাশি বলে দেয় L কোন দিকে সবচেয়ে দ্রুত বাড়ছে — (w, b) স্থানে দাঁড়িয়ে। আমরা L কমাতে চাই, তাই ঠিক উল্টো দিকে যাব — এটাই gradient descent:

w←w−η∂L∂w,b←b−η∂L∂bw \leftarrow w - \eta \frac{\partial L}{\partial w}, \qquad b \leftarrow b - \eta \frac{\partial L}{\partial b}

η (eta) হলো learning rate — একটা ছোট ধনাত্মক সংখ্যা যা বলে দেয় এক ধাপে কতটা নড়বেন।

একটা হাতে-করা সংখ্যাগত ধাপ

Data: x = [1, 2, 3], y = [2, 4, 6] (নিখুঁত রৈখিক সম্পর্ক, y = 2x)। শুরু করি w = 0, b = 0, η = 0.01।

Prediction (শুরুতে): ŷ = [0, 0, 0] (কারণ w=b=0)

Error (ŷ - y): [-2, -4, -6]

Gradient:

∂L∂w=23[(−2)(1)+(−4)(2)+(−6)(3)]=23(−28)=−18.67\frac{\partial L}{\partial w} = \frac{2}{3}\big[(-2)(1) + (-4)(2) + (-6)(3)\big] = \frac{2}{3}(-28) = -18.67

∂L∂b=23[−2−4−6]=23(−12)=−8.0\frac{\partial L}{\partial b} = \frac{2}{3}\big[-2 -4 -6\big] = \frac{2}{3}(-12) = -8.0

একটা ধাপ:

w←0−0.01×(−18.67)=0.1867b←0−0.01×(−8.0)=0.08w \leftarrow 0 - 0.01 \times (-18.67) = 0.1867 \qquad b \leftarrow 0 - 0.01 \times (-8.0) = 0.08

একটা মাত্র ধাপেই w সঠিক উত্তর (2)-এর দিকে এগোল। এই একই ধাপ হাজার বার পুনরাবৃত্তি করলে (প্রতিবার নতুন গণনা দিয়ে) w → 2, b → 0-এর কাছাকাছি convergence হয়।

রূপPredictionGradient (w)
Scalar (d=1, উপরে করা)ŷᵢ = wxᵢ + b(2/n) Σ (ŷᵢ - yᵢ) xᵢ
Matrix (d feature, সাধারণ)ŷ = Xw + b(2/n) Xᵀ(ŷ - y)
একই সমীকরণ, দুইভাবে দেখা — matrix form বড় d-তে scale করে, উপরের হাতে-করা ধাপটাই একে element-wise প্রকাশ।

ভেতরে কী ঘটছে

Bias-Variance Tradeoff — সংখ্যায় দেখা underfitting বনাম overfitting

x-এর সাথে y-এর সত্যিকার সম্পর্ক জটিল (ধরি y = sin(x) + noise), কিন্তু আমরা বিভিন্ন জটিলতার polynomial দিয়ে fit করার চেষ্টা করছি।

Model জটিলতাTrain MSETest MSEকী ঘটছে
Degree 1 (সরলরেখা)0.850.91Underfitting — model এতই সরল যে pattern-টাই ধরতে পারছে না
Degree 30.090.12ভালো fit — train আর test প্রায় কাছাকাছি
Degree 150.011.47Overfitting — training data-র noise-টাও “মুখস্থ” করে ফেলেছে

সবচেয়ে গুরুত্বপূর্ণ পর্যবেক্ষণ: Train MSE জটিলতার সাথে একঘেয়েভাবে কমছে (0.85 → 0.09 → 0.01) — জটিলতা যত বাড়ে, model তত নিখুঁতভাবে training data মুখস্থ করতে পারে। কিন্তু Test MSE একটা U-আকৃতি নেয় — প্রথমে কমে (underfitting কমছে), তারপর বাড়ে (overfitting শুরু)। কখনোই শুধু training error দেখে model বাছবেন না — সেটা সবসময় জটিলতার সাথে কমতেই থাকবে, ভুল সিদ্ধান্তে নিয়ে যাবে।

গাণিতিক পচন (decomposition)

একটা নতুন x-এ prediction error-এর expectation তিনটা অংশে ভাগ করা যায় (probability লেসনের Term id="expectation" expectation আর variance এখানে সরাসরি প্রয়োগ):

E[(y−f^(x))2]=(Bias[f^(x)])2⏟model খুব সরল+Var[f^(x)]⏟model খুব সংবেদনশীল+σ2⏟irreducible noise\mathbb{E}\big[(y - \hat{f}(x))^2\big] = \underbrace{\big(\text{Bias}[\hat{f}(x)]\big)^2}_{\text{model খুব সরল}} + \underbrace{\text{Var}[\hat{f}(x)]}_{\text{model খুব সংবেদনশীল}} + \underbrace{\sigma^2}_{\text{irreducible noise}}

  • Bias — model-এর গড় prediction সত্যিকার function থেকে কতটা দূরে (systematic error — degree 1 polynomial কখনোই sin(x)-এর বাঁক ধরতে পারবে না, যতই data দিন)
  • Variance — ভিন্ন ভিন্ন training set দিলে model-এর prediction কতটা বদলে যায় (degree 15 polynomial প্রতিটা training set-এর আলাদা noise pattern মুখস্থ করে ফেলে, ফলে সামান্য ভিন্ন data দিলেই সম্পূর্ণ ভিন্ন curve আঁকে)
  • σ² — কোনো model দিয়েই কমানো যায় না, কারণ এটা data-র নিজস্ব randomness

underfitting=high bias, low varianceoverfitting=low bias, high variance\text{underfitting} = \text{high bias, low variance} \qquad \text{overfitting} = \text{low bias, high variance}

উদাহরণ

Deep learning কেন স্কেলে কাজ করে — একটা সৎ, non-mystical ব্যাখ্যা

তিনটা উপাদান — কোনোটাই রহস্যময় না:

১. বেশি parameter — সরল বিবৃতিতে। একটা neural network অনেকগুলো linear regression-এর মতো স্তর (layer) একটার পর একটা বসিয়ে, মাঝে একটা non-linear function (যেমন ReLU) দিয়ে। প্রতিটা layer-ই matrix multiply + bias — ঠিক উপরের ŷ = Xw + b-এর মতো, শুধু বহুবার পুনরাবৃত্তি। Universal Approximation Theorem (Cybenko 1989, Hornik 1991) প্রমাণ করে যে যথেষ্ট বড় একটা single-hidden-layer network যেকোনো continuous function যেকোনো নির্ভুলতায় approximate করতে পারে।

২. বেশি data — bias-variance-এর ভাষায়। উপরের টেবিলে variance সমস্যা (overfitting) হয় কারণ data কম, model জটিল। Data বাড়ালে variance কমে — একই জটিল model অনেক বেশি example দেখলে আর শুধু noise মুখস্থ করার সুযোগ পায় না, প্রকৃত pattern-এ বাধ্য হয়।

৩. Gradient descent — যা আমরা উপরে হাতে derive করেছি। Deep network-এর training ঠিক একই update rule — শুধু backpropagation (chain rule-এর পুনরাবৃত্ত প্রয়োগ, layer-বাই-layer) দিয়ে গণনা করা হয় বিলিয়ন parameter-এর জন্য একসাথে।

যেখানে ML-এর তত্ত্ব এখনো অসম্পূর্ণ — এই লেসনের কেন্দ্রীয় সততা

এই module-এর আগের লেসনগুলো (halting problem, NP-completeness) একটা নির্দিষ্ট ধরনের নিশ্চয়তা দিয়েছে: একবার প্রমাণিত হলে, চিরকাল সত্য। কোনো নতুন computer, নতুন algorithm, নতুন observation এই সত্যকে বদলাতে পারবে না।

Deep learning সম্পূর্ণ ভিন্ন অবস্থায় আছে — pre-paradigm, বলা যায়। কয়েকটা কংক্রিট উদাহরণ:

১. Classical generalization theory deep network ব্যাখ্যা করতে ব্যর্থ হয়। VC dimension, Rademacher complexity — এই ধ্রুপদী টুলগুলো (যা বলে দেয় একটা model কতটা “capacity” আছে overfit করার) একটা আধুনিক neural network-এ প্রয়োগ করলে এমন bound দেয় যা বাস্তব observation-এর চেয়ে হাজার গুণ বেশি — কার্যত অর্থহীন (vacuous)। Zhang et al. (2017)-এর বিখ্যাত পরীক্ষা দেখিয়েছে একটা standard deep network সম্পূর্ণ random label-ও নিখুঁতভাবে মুখস্থ করতে পারে (training accuracy 100%), অথচ সেই একই architecture সত্যিকার label-এ চমৎকারভাবে generalize করে। ক্লাসিক bias-variance তত্ত্ব অনুযায়ী এত capacity-র model ভয়াবহভাবে overfit করার কথা — কিন্তু বাস্তবে করে না। কেন করে না — এখনো সম্পূর্ণ প্রমাণিত নয়।

২. Double descent — একটা observed কিন্তু incompletely-explained ঘটনা। Belkin et al. (2019) দেখিয়েছেন model-এর জটিলতা বাড়াতে থাকলে test error শুধু U-shape (উপরের টেবিলের মতো) অনুসরণ করে না — একটা নির্দিষ্ট বিন্দুর পর (যেখানে model training data নিখুঁতভাবে fit করে ফেলে — “interpolation threshold”) test error আবার কমতে শুরু করে, আরো জটিল model দিয়ে। ক্লাসিক bias-variance ছবি এটা predict করে না — এটা একটা নতুন, এখনো পুরোপুরি না-বোঝা ঘটনা।

৩. Scaling law — একটা empirical curve-fit, deduced সূত্র নয়। Kaplan et al. (2020) দেখিয়েছেন model loss, parameter সংখ্যা, data সংখ্যা, আর compute-এর মধ্যে একটা প্রায়-নিখুঁত power-law সম্পর্ক। কিন্তু লক্ষ্য করুন — এটা একটা observation, কোনো axiom থেকে derive করা হয়নি। আর প্রমাণ যে এটা “law” নাম সত্ত্বেও চূড়ান্ত সত্য না: মাত্র দুই বছর পরে Chinchilla (Hoffmann et al., 2022) দেখায় আসল optimal ratio ভিন্ন — Kaplan-দের মূল সুপারিশে data-র তুলনায় parameter-কে বেশি গুরুত্ব দেওয়া হয়েছিল। একটা “law” সংশোধিত হয়েছে নতুন পরীক্ষায়।

Automata / Complexity theoryML generalization theory
জ্ঞানের ধরনDeductive proofমূলত empirical observation
স্থায়িত্বচিরকাল সত্য, একবার প্রমাণিত হলেনতুন data/architecture-এ বদলাতে পারে
উদাহরণHalting problem undecidable“বড় model ভালো generalize করে”
“কেন” প্রশ্নের উত্তরসম্পূর্ণ, প্রমাণ আকারেআংশিক — অনেক কিছু এখনো অজানা
একটা counter-example পেলেপুরো তত্ত্ব ভুল প্রমাণিত হয়সাধারণত regime/scale-এর শর্ত যোগ হয়
একই module, দুই ধরনের নিশ্চয়তা — পার্থক্যটা স্পষ্টভাবে দেখা দরকার।

নিজে চালিয়ে দেখুন

EXPERIMENT

Gradient descent বনাম closed-form সমাধান — নিজের চোখে

Python 3, numpy· ২০ মিনিট
import numpy as np

rng = np.random.default_rng(42)

# সত্যিকার সম্পর্ক: y = 3x + 2 + noise
n = 200
x = rng.uniform(-5, 5, n)
y = 3 * x + 2 + rng.normal(0, 1, n)

# ── Closed-form (normal equation) ──
X = np.column_stack([x, np.ones(n)])
w_closed, b_closed = np.linalg.lstsq(X, y, rcond=None)[0]
print(f"Closed-form : w={w_closed:.4f}  b={b_closed:.4f}")

# ── Gradient descent ──
w, b = 0.0, 0.0
lr = 0.01
history = []

for step in range(1000):
    y_pred = w * x + b
    error = y_pred - y
    grad_w = (2 / n) * np.sum(error * x)
    grad_b = (2 / n) * np.sum(error)
    w -= lr * grad_w
    b -= lr * grad_b
    if step % 200 == 0:
        loss = np.mean(error ** 2)
        history.append((step, w, b, loss))
        print(f"step={step:4d}  w={w:.4f}  b={b:.4f}  loss={loss:.4f}")

print(f"\nGradient descent চূড়ান্ত: w={w:.4f}  b={b:.4f}")

Illustrative output:

Closed-form : w=2.9847  b=2.0231

step=   0  w=0.9847  b=0.0793  loss=15.2103
step= 200  w=2.9621  b=1.8934  loss=1.0492
step= 400  w=2.9838  b=2.0142  loss=1.0187
step= 600  w=2.9846  b=2.0227  loss=1.0184
step= 800  w=2.9847  b=2.0231  loss=1.0184

Gradient descent চূড়ান্ত: w=2.9847  b=2.0231

লক্ষ্য করুন — ১০০০ ধাপের পর gradient descent প্রায় হুবহু closed-form-এর সংখ্যায় পৌঁছেছে (2.9847 বনাম 2.9847)। দুইটাই একই loss surface-এর একই global minimum খুঁজে পেয়েছে, কারণ loss convex। loss কখনো 0-তে পৌঁছায় না কারণ data-তে যোগ করা random noise-ই সেই σ² (irreducible error) — কোনো model দিয়েই এটা কমানো যায় না।

এটা কী প্রমাণ করে

Gradient descent ধাপে ধাপে ঠিক সেই সমাধানের দিকে convergence করে যা closed-form normal equation একবারেই দেয় — এই দুই পদ্ধতিই একই optimization সমস্যার দুই সমাধান-পথ, দুইটা ভিন্ন জিনিস না।

নিজে বানান

BUILD IT

Polynomial Regression দিয়ে Bias-Variance সরাসরি দেখা

Python · ●●●○○
  1. একটা non-linear সত্যিকার function (যেমন sin) থেকে noisy data generate করুন
  2. বিভিন্ন degree-র polynomial fit করুন — 1, 3, 5, 9, 15
  3. প্রতিটার জন্য আলাদা train/test split-এ MSE মাপুন
  4. Train MSE বনাম Test MSE-র বক্ররেখা তুলনা করে underfitting/overfitting-এর সীমানা খুঁজে বের করুন
import numpy as np

rng = np.random.default_rng(0)

def true_fn(x):
    return np.sin(x)

n_train, n_test = 25, 200
x_train = rng.uniform(-3, 3, n_train)
y_train = true_fn(x_train) + rng.normal(0, 0.3, n_train)
x_test = rng.uniform(-3, 3, n_test)
y_test = true_fn(x_test) + rng.normal(0, 0.3, n_test)


def fit_and_eval(degree):
    # Polynomial feature বানানো: [x^0, x^1, ..., x^degree]
    X_train = np.vander(x_train, degree + 1, increasing=True)
    X_test = np.vander(x_test, degree + 1, increasing=True)

    # Closed-form least squares (regularization ছাড়া, ইচ্ছাকৃতভাবে)
    coeffs, *_ = np.linalg.lstsq(X_train, y_train, rcond=None)

    train_pred = X_train @ coeffs
    test_pred = X_test @ coeffs

    train_mse = np.mean((train_pred - y_train) ** 2)
    test_mse = np.mean((test_pred - y_test) ** 2)
    return train_mse, test_mse


print(f"{'degree':>7} {'train_mse':>11} {'test_mse':>10}  verdict")
for d in [1, 3, 5, 9, 15]:
    tr, te = fit_and_eval(d)
    verdict = "underfit" if tr > 0.3 else ("overfit" if te > tr * 3 else "ভালো fit")
    print(f"{d:>7} {tr:>11.4f} {te:>10.4f}  {verdict}")

Illustrative output:

 degree   train_mse   test_mse  verdict
      1      0.8734     0.9012  underfit
      3      0.0891     0.1204  ভালো fit
      5      0.0743     0.1389  ভালো fit
      9      0.0298     0.4127  overfit
     15      0.0071     2.8834  overfit

নিজে বাড়ান:

  1. degree=15-এ একটা L2 regularization term (λ Σ coeffs²) যোগ করে দেখুন — বেশি জটিল model-ও কি নিয়ন্ত্রণে রাখা যায়?
  2. n_train বাড়িয়ে ১০০ করুন — একই degree=15 model-এর test MSE কতটা কমে? (এটাই “বেশি data variance কমায়” দাবিটার সরাসরি প্রমাণ)
  3. Noise-এর মাত্রা (0.3 থেকে 1.0) বাড়িয়ে দেখুন — irreducible error σ² কীভাবে সবচেয়ে ভালো model-এর test MSE-কেও একটা মেঝের নিচে যেতে দেয় না
  4. Double descent দেখার চেষ্টা করুন — degree-কে n_train-এর কাছাকাছি বা তার বেশি নিয়ে যান (যেমন degree=25 যখন n_train=25); সতর্কতা — numerical instability দেখা দিতে পারে, যা নিজেই একটা শিক্ষণীয় ব্যর্থতা

বাস্তব সিস্টেমে

এই ধারণাগুলো কোথায় প্রতিদিন ব্যবহৃত হয়

A/B testing ও recommendation system। যেকোনো product-এ “কোন feature দেখালে user বেশি click করবে” — এটাও একটা function approximation সমস্যা, x-এ user feature, y-এ click probability। Linear/logistic regression আজও production-এ সবচেয়ে বেশি ব্যবহৃত model, কারণ এর bias-variance আচরণ পুরোপুরি predictable আর interpretable।

Large Language Model-এর training curve। OpenAI, Anthropic, Google-এর মতো কোম্পানি একটা নতুন বড় model train করার আগে ছোট model-এ scaling law fit করে খরচ (compute budget) অনুমান করে — ঠিক এই লেসনে আলোচিত Kaplan/Chinchilla curve-ই সেই সিদ্ধান্তের ভিত্তি। বিলিয়ন ডলারের সিদ্ধান্ত একটা empirical curve-fit-এর উপর দাঁড়িয়ে, প্রমাণিত উপপাদ্যের উপর না — এটাই field-টার বর্তমান বাস্তবতা।

Regularization প্রতিটা production ML system-এ। Overfitting ঠেকাতে L1/L2 penalty, dropout, early stopping — সবগুলোই bias-variance tradeoff-কে ইচ্ছাকৃতভাবে নিয়ন্ত্রণ করার কৌশল। যখনই একটা ML engineer “validation loss বাড়তে শুরু করেছে, training থামাও” বলেন, তিনি আসলে উপরের U-shaped curve-এর তলানি খুঁজছেন।

Model card-এ limitation section। দায়িত্বশীল ML deployment (Google, Hugging Face model card standard) explicit ভাবে লেখে কোন distribution-এ model test করা হয়নি — কারণ generalization theory পূর্ণাঙ্গ না হওয়ায়, “কোথায় model ব্যর্থ হবে” প্রমাণ করে বলা যায় না, শুধু পরীক্ষা করে বলা যায়। পরের লেসনগুলোতে (experiment design, reproducibility) ঠিক এই ধরনের সীমাবদ্ধতা সততার সাথে লেখার নিয়ম শিখব।

যে ভুলগুলো সবাই করে

“Neural network একটা 'black box' — ভেতরে কী হচ্ছে কেউ জানে না, তাই বোঝারও চেষ্টা অর্থহীন।”

আংশিক সত্য, কিন্তু বিভ্রান্তিকরভাবে বলা।

প্রতিটা individual গণনা সম্পূর্ণ transparent — matrix multiply, addition, একটা non-linear function। এই লেসনেই আমরা সেই গণনার একদম মূল একক (linear regression-এর একটা layer) হাতে derive করেছি। কোনো রহস্য নেই সেখানে।

“Black box” বলতে আসলে বোঝানো হয় — লক্ষ কোটি parameter-এর সম্মিলিত আচরণ মানুষের পক্ষে intuition দিয়ে ব্যাখ্যা করা কঠিন, ঠিক যেমন একটা mole পরিমাণ (~10²³) বায়ুর অণুর গতিবিদ্যা individually predict করা কঠিন — যদিও প্রতিটা অণুর গতি নিউটনের সূত্র মেনে চলে, সম্পূর্ণ deterministic।

Interpretability research (attention visualization, probing classifiers, mechanistic interpretability) সক্রিয়ভাবে এই ফাঁক পূরণের চেষ্টা করছে — “বোঝা অসম্ভব” না, “বোঝা এখনো অসম্পূর্ণ, আর সক্রিয় গবেষণার বিষয়” এটাই সঠিক অবস্থান।

“Model-এ যত বেশি parameter, তত বেশি overfitting হবে — তাই সবসময় ছোট model ব্যবহার করা নিরাপদ।”

ক্লাসিক bias-variance তত্ত্ব (এই লেসনের প্রথমার্ধ) এটাই predict করে — আর ছোট, কম-data সমস্যায় এটা সাধারণত সত্যিও। কিন্তু এটাই সেই জায়গা যেখানে আধুনিক deep learning ক্লাসিক তত্ত্বের সীমানা অতিক্রম করে।

Double descent দেখায় — যথেষ্ট বড় model, যথেষ্ট data, আর সঠিক training কৌশল (regularization, early stopping) দিয়ে, একটা অতি-বড় (overparameterized) model প্রায়ই একটা মাঝারি-জটিলতার model-এর চেয়ে ভালো generalize করে, খারাপ না। এই কারণেই আধুনিক LLM-গুলো বিলিয়ন-বিলিয়ন parameter ব্যবহার করে, আর তারপরও তুলনামূলকভাবে ভালো generalize করে (যদিও তাদের training data-ও বিশাল)।

সঠিক শিক্ষা: “বড় model = বেশি overfit” একটা নিয়ম না, একটা regime-নির্ভর পর্যবেক্ষণ। ছোট data-তে সত্যি; পর্যাপ্ত data ও সঠিক regularization-এ প্রায়ই মিথ্যা। এটাই এই লেসনের কেন্দ্রীয় বার্তার আরেকটা উদাহরণ — ML-এর “নিয়ম”গুলো শর্তসাপেক্ষ, প্রমাণিত উপপাদ্যের মতো নিঃশর্ত না।

বুঝেছেন কি না দেখুন

1

Data: x = [0, 1, 2], y = [1, 3, 5] (সত্যিকার সম্পর্ক y = 2x + 1)। w = 0, b = 0, η = 0.1 থেকে শুরু করে একটা gradient descent ধাপ হাতে হিসাব করুন।

প্রয়োগ

Prediction: ŷ = [0, 0, 0]

Error (ŷ - y): [-1, -3, -5]

Gradient (w): ∂L∂w=23[(−1)(0)+(−3)(1)+(−5)(2)]=23(−13)=−8.67\frac{\partial L}{\partial w} = \frac{2}{3}\big[(-1)(0) + (-3)(1) + (-5)(2)\big] = \frac{2}{3}(-13) = -8.67

Gradient (b): ∂L∂b=23[−1−3−5]=23(−9)=−6.0\frac{\partial L}{\partial b} = \frac{2}{3}\big[-1 -3 -5\big] = \frac{2}{3}(-9) = -6.0

নতুন মান: w←0−0.1×(−8.67)=0.867b←0−0.1×(−6.0)=0.6w \leftarrow 0 - 0.1 \times (-8.67) = 0.867 \qquad b \leftarrow 0 - 0.1 \times (-6.0) = 0.6

একটা মাত্র ধাপেই w = 0.867 — সঠিক উত্তর w = 2-এর দিকে এগোচ্ছে, আর b = 0.6 সঠিক b = 1-এর দিকে। আরো কয়েক ধাপ চালালে দুটোই কাছে পৌঁছাবে।

2

একটা model-এর training accuracy 99%, কিন্তু test accuracy 62%। এটা বায়াস না ভ্যারিয়েন্স সমস্যা? কী করবেন?

যুক্তি

এটা high variance (overfitting) — model training data প্রায় নিখুঁতভাবে মুখস্থ করেছে (low training error = low bias) কিন্তু নতুন data-তে ভয়ানকভাবে ব্যর্থ হচ্ছে (high test error)।

সমাধান দুই দিক থেকে:

Variance কমান: আরো training data সংগ্রহ করুন; L1/L2 regularization যোগ করুন; dropout ব্যবহার করুন (neural network-এ); model-এর জটিলতা কমান (কম layer/parameter); early stopping করুন (validation loss বাড়া শুরু করলেই থামান)।

যা করবেন না: শুধু model আরো জটিল করবেন না — সেটা training accuracy-কে 99% থেকে 99.9%-এ নেবে, কিন্তু test accuracy আরো খারাপ করতে পারে।

একটা diagnostic টিপ: যদি training accuracy-ও কম হতো (যেমন 65%), সেটা bias সমস্যা হতো — তখন উল্টো, বেশি জটিল model বা বেশি feature দরকার হতো। এই দুইটা রোগের চিকিৎসা বিপরীত — তাই আগে সঠিক নির্ণয় জরুরি।

3

“আমাদের নতুন paper দেখায় বড় model সবসময় ভালো — তাই এই সিদ্ধান্তটা চিরকাল সত্য থাকবে” — এই দাবির সমস্যা কী, এই module-এর প্রথমার্ধের (halting problem, NP-completeness) দাবির সাথে তুলনা করে ব্যাখ্যা করুন।

যুক্তি

সমস্যাটা জ্ঞানতাত্ত্বিক (epistemological)।

Halting problem-এর undecidability একটা deductive proof — diagonalization যুক্তি দিয়ে দেখানো হয়েছে যে এমন কোনো algorithm থাকতেই পারে না যা সব প্রোগ্রামের জন্য halting নির্ণয় করে। এই দাবি নতুন কোনো observation দিয়ে বাতিল হতে পারে না, কারণ এটা logic-এর উপর দাঁড়ানো, experience-এর উপর না।

“বড় model সবসময় ভালো” একটা empirical observation — একটা নির্দিষ্ট সময়ে, নির্দিষ্ট architecture-এ, নির্দিষ্ট data distribution-এ পরীক্ষা করে পাওয়া pattern। এটা কোনো axiom থেকে deduce করা হয়নি। Scaling law-র ইতিহাসই প্রমাণ — Kaplan et al. (2020)-এর মূল সুপারিশ মাত্র দুই বছর পরে Chinchilla (2022) সংশোধন করে দেখায় যে optimal parameter/data ratio ভিন্ন ছিল।

তাই সঠিক ভাষা: “আমাদের experiment-এ, এই regime-এ, বড় model ভালো কাজ করেছে” — একটা conditional, সময়-নির্ভর দাবি, চিরন্তন সত্য না। এই পার্থক্যটা মনে রাখা গবেষণায় critical — একটা ML paper-এর claim-কে proof-এর মতো নিঃশর্ত ভাষায় উপস্থাপন করা একটা সাধারণ, বিপজ্জনক ভুল, যা পরের লেসনে (paper পড়া) আমরা আরো বিস্তারিত দেখব চিনতে।

এরপর কী

আমরা দেখলাম ML-এর claim গুলো — এমনকি সবচেয়ে বিখ্যাত scaling law-ও — মূলত paper আকারে প্রকাশিত observation, প্রমাণিত theorem না। এর মানে এই দাবিগুলো মূল্যায়ন করার দক্ষতা একটা আলাদা, শেখার-যোগ্য দক্ষতা — শুধু গণিত বোঝা যথেষ্ট না, কীভাবে একটা paper পড়তে হয় সেটাও জানতে হয়।

পরের লেসনে আমরা ঠিক এই দক্ষতায় ঢুকব — কীভাবে একজন practitioner আসলে একটা paper পড়েন (linearly না), একটা systems paper থেকে কী বের করে আনতে হয়, আর reading-to-learn বনাম reading-to-review-এর পার্থক্য।

আরও পড়ুন

  • Pattern Recognition and Machine Learning, Chapter 1, 3 — Christopher Bishop · Linear regression ও bias-variance decomposition-এর ক্লাসিক গাণিতিক উপস্থাপনা
  • Reconciling modern machine-learning practice and the classical bias–variance trade-off — Mikhail Belkin, Daniel Hsu, Siyuan Ma, Soumik Mandal · PNAS 2019 — 'double descent' প্রথম স্পষ্টভাবে দেখানো পেপার
  • Scaling Laws for Neural Language Models — Jared Kaplan et al. · OpenAI, 2020 — পরে Chinchilla (Hoffmann et al., 2022) যা সংশোধন করে, দেখায় empirical 'law'-ও বদলাতে পারে
  • Understanding deep learning requires rethinking generalization — Chiyuan Zhang et al. · ICLR 2017 — দেখায় classical generalization theory (VC dimension) দিয়ে deep network-এর আচরণ ব্যাখ্যা করা যায় না