সরাসরি পর্বে যান
পর্ব ৮৯ · ৯১-এর মধ্যে · মডিউল ১৪

লিখিত ও মৌখিক (ভাইভা) প্রশ্ন — Deep Learning, NLP আর Generative AI

Deep Learning, NLP and Generative AI Written and Viva Questions — Derivations, Comparisons, Design Answers and Follow-ups

Taught in Bangla, this practice page trains written and oral answers with a claim, assumption, steps, evidence and limits structure. It has 16 written questions in six groups, from backprop and residual Jacobians through CNN versus ViT, fine-tuning versus RAG, RLHF and DPO, hallucination and agents, generative models and serving trade-offs, each with a practice mark split. A viva section adds 24 short questions with follow-ups, and six in-page Python checks use the course's own measured results.

এই পর্বে যা শিখবেন

  • Backprop, softmax-CE-র gradient আর residual-এর Jacobian derive করা
  • CNN বনাম ViT, RNN বনাম Transformer, VAE বনাম GAN বনাম diffusion: একই মাপকাঠির ছকে তুলনা করে “কখন কোনটি” দিয়ে শেষ করা
  • Fine-tuning, LoRA, prompting আর RAG-এর মধ্যে বাছাই, আর RLHF ও DPO-র যুক্তি লেখা
  • Hallucination, RAG মূল্যায়ন, agent আর serving-এর নকশার উত্তর স্তর ধরে সাজানো
  • উত্তরে বানানো সংখ্যার বদলে মাপা ফল দেওয়া, আর ভাইভায় শর্ত ও সীমা নিজে থেকে বলা

১ · উত্তরের কাঠামো — দাবি, অনুমান, ধাপ, প্রমাণ, সীমা

Deep learning-এর লিখিত প্রশ্ন সাধারণত তিন ধরনের: “derive করুন” (backprop, DPO-র loss), “তুলনা করুন” (RNN বনাম Transformer), আর “নকশা করুন” (RAG-এর মূল্যায়ন, serving). ডাক্তারের রোগনির্ণয়ের খাতার মতো: লক্ষণ, পরীক্ষা, সিদ্ধান্ত আর সীমা, সব লেখা থাকে। মৌলিক সংজ্ঞার প্রশ্ন (neuron, overfitting, metric) AI-এর ভিত্তি কোর্সের লিখিত ও ভাইভা পাতায়, আর derivation-এর গণিত (Adam, ELBO, matrix calculus) মেশিন লার্নিং কোর্সের লিখিত ও ভাইভা পাতায় আছে; এখানে সেগুলো ধরে নেওয়া হয়েছে।

পাঁচ অংশের কাঠামো
দাবি → অনুমান ও চিহ্ন → ধাপ (প্রতিটির কারণসহ) → প্রমাণ (ছোট সংখ্যা বা মাপা ফল) → সীমা ও সিদ্ধান্ত
  1. দাবি: এক লাইনে কী দেখাবেন। যেমন “residual block-এর Jacobian I + J, তাই gradient-এর একটি সরাসরি পথ থাকে”.
  2. অনুমান ও চিহ্ন: shape (B × d), activation, loss. Shape ছাড়া matrix-এর derivation মেলানো যায় না।
  3. ধাপ: প্রতিটি সমান-চিহ্নের পাশে এক শব্দের কারণ: “chain rule”, “∑y = ১”.
  4. প্রমাণ: ছোট সংখ্যায় যাচাই, বা এই কোর্সের একটি মাপা ফল, পর্বসহ; “একটি run, সাধারণ নিয়ম নয়”.
  5. সীমা: কোথায় খাটে না, আর বাজারঘরে (কোর্সের কাল্পনিক অনলাইন দোকান) কী করতেন।
প্রশ্নের ধরনদাবি ও অনুমানধাপ বা ছকপ্রমাণসীমা
৫ নম্বর (তুলনা বা ছোট ব্যাখ্যা)১২১১
১০ নম্বর (derivation বা নকশা)২৪২২

এই ভাগ কোনো পরীক্ষার নিয়ম নয়; নিজের পরীক্ষার নির্দেশনা মানুন। ১৮০ মিনিটে ৯০ নম্বর হলে ১০ নম্বরে কুড়ি মিনিট। নিচের stepper-এ ক-০১-এর (backprop) উত্তর ধাপে ধাপে গড়া হয়েছে।

প্রতিটি অংশ যোগ করার পর
যোগ হলো
খাতায় যা লিখলেন
জমা নম্বর
খরচ হওয়া সময়
  1. দাবি — ১ নম্বর। Backprop কী দেয় আর কেন দক্ষ, প্রথম লাইনেই।
  2. চিহ্ন — আরও ১। প্রতিটি matrix-এর shape; পরে প্রতিটি gradient-এর shape তার parameter-এর সমান কি না, এটিই আপনার নিজের যাচাই।
  3. শেষ স্তর — আরও ২। Softmax আর cross-entropy মিলে সবচেয়ে সরল রূপ p − y; B দিয়ে ভাগ, কারণ loss গড়।
  4. পেছনের স্তর — আরও ২। Chain rule-এর matrix রূপ; ⊙ মানে ঘরে ঘরে গুণ। মোট ৬ নম্বর, ১৩ মিনিট।
  5. যাচাই — আরও ২। একটি ছোট gradient check-এর ফল, বা পর্ব ৪-এর মাপা relative error.
  6. সীমা — শেষ ২। খরচ, memory, আর gradient ঠিক হলেও শেখা ব্যর্থ হতে পারে (vanishing gradient, ক-০২)।
বিষয়পর্বলিখিতভাইভা
Network-এর ভিত্তি, PyTorch, training১–১৯অংশ ২ (ক-০১–ক-০৩)ভ-০১–ভ-০৪
CNN, sequence, attention২০–৩৮অংশ ৩ (খ-০১–খ-০৩)ভ-০৫–ভ-০৯
NLP, LLM, LLM-কে খাপ খাওয়ানো৩৯–৫৯অংশ ৪ (গ-০১–গ-০৪)ভ-১০–ভ-১৪
Prompt, RAG, agent, নিরাপত্তা৬০–৭৩অংশ ৫ (ঘ-০১–ঘ-০৩)ভ-১৫–ভ-১৮
Generative model৭৪–৮১অংশ ৬ (ঙ-০১–ঙ-০২)ভ-১৯–ভ-২১
Multimodal, serving, deploy৮২–৮৬অংশ ৭ (চ-০১)ভ-২২–ভ-২৪

এই পাতার কোনো প্রশ্ন কোনো নির্দিষ্ট পরীক্ষা, বিশ্ববিদ্যালয়, প্রতিষ্ঠান বা কোম্পানির ইন্টারভিউ থেকে নেওয়া নয়; এ ধরনের প্রশ্ন বিশ্ববিদ্যালয়ের কোর্স, চাকরির পরীক্ষা আর ইন্টারভিউতে প্রায়ই আসে। উদ্ধৃত প্রতিটি মাপা সংখ্যা এই কোর্সের কোনো পর্বের একটি run-এর ফল (ছোট model, ছোট ডেটা), সাধারণ নিয়ম নয়। ছয়টি যাচাই-ব্লক পাতাতেই চলে (ব্রাউজারের Python 3.14, NumPy 2.4.6). হাতে-কলমে হিসাব পর্ব ৮৭ (Numerical সমস্যার অনুশীলন)-এ, MCQ পর্ব ৮৮ (MCQ প্রশ্নব্যাংক)-এ, আর ইন্টারভিউ পর্ব ৯০ (Deep learning coding ইন্টারভিউ) ও পর্ব ৯১ (ধারণা ও system design ইন্টারভিউ)-এ।

২ · অংশ ক — Backprop, gradient-এর সমস্যা আর residual (মডিউল ১–৩)

রিভিশন: পর্ব ৪ (backprop হাতে-কলমে), পর্ব ৫ (autograd), পর্ব ১৪ (initialization, normalization), পর্ব ১৭ (vanishing, residual, clipping). Chain rule আর Jacobian-এর গণিত মেশিন লার্নিং কোর্সের পর্ব ১১-এ।

ক-০১একটি hidden layer (activation f) আর softmax output-এর network-এ গড় cross-entropy loss-এর সাপেক্ষে সব parameter-এর gradient matrix রূপে derive করুন। দেখান ∂L/∂z = p − y. Finite difference-এর তুলনায় backprop কেন দক্ষ, আর তার খরচ কোথায়? — ১০ নম্বর (মাঝারি)

চিহ্ন: X (B × d), Z1 = XW1 + b1 (B × h), H = f(Z1), Z2 = HW2 + b2 (B × k), P = softmax(Z2) সারি ধরে, Y one-hot, L = −(১/B)∑ log Pi,yi.

শেষ স্তর: একটি সারিতে L = −∑cyc log pc আর ∂pc/∂zj = pc(δcj − pj). তাই ∂L/∂zj = −∑cyc(δcj − pj) = pj∑yc − yj = pj − yj, কারণ ∑yc = ১. গড়ের জন্য δ2 = (P − Y)/B.

dW2 = Hᵀδ2, db2 = ∑সারিδ2, δ1 = (δ2W2ᵀ) ⊙ f′(Z1), dW1 = Xᵀδ1

প্রতিটি সূত্র chain rule-এর matrix রূপ: Z2 = HW2-এ W2-এর gradient আসে বাঁ দিকের H-এর transpose দিয়ে, আর H-এর gradient ডান দিকের W2-এর transpose দিয়ে। Shape মিলিয়ে নিন: Hᵀδ2 হলো (h × B)(B × k) = h × k, ঠিক W2-এর shape. B-এর মাত্রা গুণের ভেতরেই যোগ হয়ে যায়। tanh-এ f′ = ১ − H², ReLU-তে Z1 > ০-এর দরজা।

import numpy as np

rng = np.random.default_rng(89)
B, d, h, k = 4, 3, 5, 3
X, y = rng.normal(size=(B, d)), np.array([0, 2, 1, 2])
P = {"W1": rng.normal(0, 0.5, (d, h)), "b1": np.zeros(h),
     "W2": rng.normal(0, 0.5, (h, k)), "b2": np.zeros(k)}

def loss(P, back=False):
    H = np.tanh(X @ P["W1"] + P["b1"])               # (B, h)
    Z = H @ P["W2"] + P["b2"]                        # (B, k) logits
    E = np.exp(Z - Z.max(1, keepdims=True))          # stable softmax
    p = E / E.sum(1, keepdims=True)
    if not back:
        return -np.log(p[np.arange(B), y]).mean()
    D2 = p.copy(); D2[np.arange(B), y] -= 1; D2 /= B  # dL/dZ = (p - y)/B
    D1 = (D2 @ P["W2"].T) * (1 - H**2)               # tanh' = 1 - h^2
    return {"W1": X.T @ D1, "b1": D1.sum(0), "W2": H.T @ D2, "b2": D2.sum(0)}

G, eps, fwd = loss(P, back=True), 1e-6, 0
for name, W in P.items():
    num = np.zeros_like(W)
    for i in np.ndindex(W.shape):
        old = W[i]
        W[i] = old + eps; up = loss(P)
        W[i] = old - eps; dn = loss(P)
        W[i] = old; num[i] = (up - dn) / (2 * eps); fwd += 2
    rel = np.linalg.norm(G[name] - num) / (np.linalg.norm(G[name]) + np.linalg.norm(num))
    print(f"{name}: shape {W.shape}, grad {G[name].shape}, rel error {rel:.1e}")
print("finite differences:", fwd, "forward passes | backprop: 1 forward + 1 backward")

আসল আউটপুট (ব্রাউজারের Python):

W1: shape (3, 5), grad (3, 5), rel error 1.8e-10
b1: shape (5,), grad (5,), rel error 6.1e-10
W2: shape (5, 3), grad (5, 3), rel error 6.1e-10
b2: shape (3,), grad (3,), rel error 4.5e-10
finite differences: 76 forward passes | backprop: 1 forward + 1 backward

প্রতিটি gradient-এর shape তার parameter-এর সমান, আর relative error ১০⁻¹⁰-এর ঘরে, central difference-এর নিজের ভুলের মাপে: সূত্র ঠিক। মাত্র ৩৮টি সংখ্যার জন্য ৭৬টি forward লাগল; লাখো parameter-এ তা অচল, আর backprop একটি forward আর একটি backward-এ সব দেয় (reverse mode).

খরচ আর সীমা: পর্ব ৪-এর মাপে backward-এর FLOP forward-এর ১.৮১ গুণ (ব্রাউজারে সময়ে ১.৯৭ গুণ), আর B = ২৫৬-এ জমা রাখা activation ১,০৪৪ KB, parameter-এর ১৭২ KB-এর প্রায় ছয় গুণ: backprop-এর আসল দাম memory. সেখানেই দুটি ইচ্ছাকৃত বাগ দেখা গিয়েছিল: ÷B ভুললে loss একই থাকে কিন্তু সব relative error ০.৯৭; তাই loss দেখে backward-এর ভুল ধরা যায় না, gradient check লাগে। সূত্র ঠিক হলেও গভীর network-এ gradient মিলিয়ে যেতে পারে (ক-০২)। Neural network-এ backprop জনপ্রিয় হয় ১৯৮৬ সালে (Rumelhart, Hinton, Williams).

পরীক্ষক যা খোঁজেন: shape-সহ চিহ্ন (১); p − y-এর derivation (২); তিনটি recursion-সূত্র (৩); যাচাই (২); খরচ ও সীমা (২)। পর্ব ৪ · পর্ব ৫ · পর্ব ১৩

যেখানে নম্বর কাটে: transpose ভুল দিকে; ÷B বাদ; f′ ভুল স্তরে; backprop আর gradient descent-কে এক বলা (একটি gradient হিসাব করে, অন্যটি ধাপ নেয়)।

ক-০২গভীর network-এ vanishing আর exploding gradient কেন হয়, Jacobian-এর গুণফল দিয়ে ব্যাখ্যা করুন। পাঁচটি প্রতিকার লিখুন, প্রতিটি কোন কারণে কাজ করে তা বলুন। — ১০ নম্বর (মাঝারি)

কারণ: hl = f(Wlhl−1) হলে ∂hl/∂hl−1 = Jl = diag(f′)Wl, আর chain rule-এ ∂L/∂h০ = J1ᵀJ2ᵀ⋯JLᵀ ∂L/∂hL. গুণফলের norm ≤ ∏‖Jl‖. প্রতিটি গুণক গড়ে ১-এর নিচে হলে সূচকীয় ক্ষয় (vanishing), ওপরে হলে সূচকীয় বৃদ্ধি (exploding). Sigmoid-এ f′ ≤ ০.২৫, তাই ক্ষয় প্রায় নিশ্চিত। RNN-এ একই W প্রতি ধাপে গুণ হয়, তাই সমস্যাটি সময়ের দৈর্ঘ্যে আরও তীব্র (BPTT).

মাপা প্রমাণ: পর্ব ১৭-এ ৩০ স্তরের sigmoid network-এ প্রথম স্তরের gradient ছিল ১০⁻¹⁷, শেষ স্তরে ১৫; ReLU-তে He init (variance ২/n) দিলে সব স্তরে প্রায় সমান, আর He-এর দেড় গুণ weight-এ ৩০ স্তরে প্রায় ৩৭,০০০ গুণ বৃদ্ধি। একই ReLU, শুধু weight-এর মাপ বদলে তিন ভিন্ন ভাগ্য। পর্ব ২৮-এ tanh RNN-এ (ρ = ০.৮) ৫৯ ধাপে gradient ১.৬ × ১০⁻¹¹.

প্রতিকারকেন কাজ করে
ReLU/GELUসক্রিয় অংশে f′ = ১, sigmoid-এর ০.২৫-এর ছাদ নেই
Xavier/He initপ্রতি স্তরে signal-এর variance প্রায় স্থির রাখে
LayerNorm/BatchNormপ্রতি স্তরে মাপ নতুন করে ঠিক করে
ResidualJacobian I + J: একটি সরাসরি পথ (ক-০৩)
Gradient clippingশুধু exploding-এ: norm সীমায় কাটে, দিক রাখে
LSTM/GRU-এর gateCell state-এ যোগের পথ; forget gate ≈ ১ হলে তথ্য টেকে

নির্ণয় আগে: প্রতিটি স্তরের gradient norm log-scale-এ আঁকুন (পর্ব ১৮); warmup বা ছোট lr শুধু উপসর্গ সামলায়।

পরীক্ষক যা খোঁজেন: Jacobian-এর গুণফল আর norm-এর সীমা (৩); sigmoid′ ≤ ০.২৫ বা RNN-এ একই W (১); পাঁচটি প্রতিকার, কারণসহ (৫); নির্ণয়ের পথ (১)। পর্ব ১৭ · পর্ব ১৪ · পর্ব ২৯

যেখানে নম্বর কাটে: clipping-কে vanishing-এর প্রতিকার বলা; “ReLU-তে vanishing হয় না” (ভুল init-এ পর্ব ১৭-এ প্রায় ৩১,০০০ গুণ ক্ষয়)।

ক-০৩Residual connection কেন গভীর network শেখাতে সাহায্য করে? Block-এর Jacobian লিখে দেখান, আর একটি সীমা বলুন। — ৫ নম্বর (মাঝারি)

যুক্তি: hl = hl−1 + F(hl−1) হলে ∂hl/∂hl−1 = I + JF. গুণফল ∏(I + Jl) খুললে I + ∑Jl + … আসে, অর্থাৎ শেষ থেকে প্রথম স্তরে gradient-এর একটি সরাসরি identity পথ থাকে, যা ছোট J-এর গুণে মরে না। Block-কে শুধু পরিবর্তনটুকু শিখতে হয়; F = ০ হলেই identity. He ও সহলেখকেরা (২০১৫) দেখিয়েছিলেন, plain network-এ গভীরতা বাড়ালে training ভুলও বাড়ে (degradation problem), residual-এ তা হয় না।

import numpy as np

rng = np.random.default_rng(89)
n, L = 16, 30
Ws = [rng.normal(0, 1 / np.sqrt(n), (n, n)) for _ in range(L)]
h0, sig = rng.normal(size=n), lambda z: 1 / (1 + np.exp(-z))

def backward_norms(act, residual):
    h, Js = h0.copy(), []
    for W in Ws:
        z = W @ h
        a = sig(z) if act == "sigmoid" else np.tanh(z)
        J = (a * (1 - a) if act == "sigmoid" else 1 - a**2)[:, None] * W
        Js.append(np.eye(n) + J if residual else J)
        h = h + a if residual else a
    g, out = np.ones(n) / np.sqrt(n), {}          # dL/dh_30, norm 1
    for l in range(L, 0, -1):
        out[l] = np.linalg.norm(g)
        g = Js[l - 1].T @ g                       # chain rule, one layer back
    out[0] = np.linalg.norm(g)
    return out, Js[0]

print("model               h30      h20      h10      h0 (input)")
for act, res in [("sigmoid", False), ("tanh", False), ("sigmoid", True)]:
    o, J0 = backward_norms(act, res)
    name = f"{act} {'residual' if res else 'plain'}"
    print(f"{name:17s} " + "  ".join(f"{o[l]:.1e}" for l in (30, 20, 10, 0)))
sJ, sR = (np.linalg.svd(M, compute_uv=False) for M in (J0 - np.eye(n), J0))
print(f"one sigmoid block: J singular values {sJ.max():.3f} .. {sJ.min():.4f}")
print(f"with skip, I + J : singular values {sR.max():.3f} .. {sR.min():.3f}")

আসল আউটপুট (ব্রাউজারের Python):

model               h30      h20      h10      h0 (input)
sigmoid plain     1.0e+00  4.2e-07  2.0e-13  1.5e-19
tanh plain        1.0e+00  5.2e-01  2.2e-01  8.8e-02
sigmoid residual  1.0e+00  1.1e+00  1.1e+00  1.1e+00
one sigmoid block: J singular values 0.328 .. 0.0106
with skip, I + J : singular values 1.305 .. 0.778

একই ৩০টি weight. Plain sigmoid-এ ইনপুটে gradient ১০⁻¹⁹; tanh-এ ক্ষয় ধীর (০.০৮৮), ছোট weight-এ tanh প্রায় সরলরেখা বলে। Residual sigmoid-এ সব স্তরে প্রায় ১.১. কারণ: J-এর singular value ০.০১১ থেকে ০.৩২৮, তাই গুণে গুণে মরে; I + J-এর ০.৭৭৮ থেকে ১.৩০৫, ১-এর চারপাশে।

সীমা: Residual forward-এর মাপ নিয়ন্ত্রণ করে না। পর্ব ১৭-এ ReLU residual-এ প্রথম স্তরের gradient প্রায় ৮ লাখে আর ‖h৩০‖ প্রায় ৩৭ লাখে উঠেছিল; তাই normalization (Transformer-এ pre-norm) বা ছোট init লাগে। Shape বদলালে 1×1 projection shortcut (পর্ব ২২)।

পরীক্ষক যা খোঁজেন: I + J আর সরাসরি পথ (২); শুধু পরিবর্তন শেখা বা degradation (১); প্রমাণ (১); সীমা (১)। পর্ব ১৭ · পর্ব ২২ · পর্ব ৩৫

যেখানে নম্বর কাটে: “residual overfitting কমায়” লেখা; “gradient সবসময় ১” দাবি; normalization-এর প্রয়োজন বাদ।

৩ · অংশ খ — CNN, sequence আর attention (মডিউল ৪–৬)

রিভিশন: পর্ব ২০ (convolution), পর্ব ২৮ আর পর্ব ২৯ (RNN, LSTM), পর্ব ৩৩ (self-attention), পর্ব ৩৭ (দক্ষ attention), পর্ব ৩৮ (ViT).

খ-০১CNN আর Vision Transformer-এর inductive bias-এর তুলনা করুন। অল্প ডেটায় কোনটি ভালো করবে বলে আশা করেন, আর কেন? — ৫ নম্বর (মাঝারি)

Inductive bias: ডেটা দেখার আগেই model-এর ধরে নেওয়া অনুমান। CNN দুটি জোরালো অনুমান করে: locality (ছোট kernel পাশের pixel দেখে) আর weight sharing (একই filter সব জায়গায়), যার ফল translation equivariance. ViT ছবিকে patch-এর sequence ধরে, প্রথম স্তর থেকেই সব patch সব patch-কে দেখে; জ্যামিতির খবর আসে শুধু position embedding থেকে।

মাপা প্রমাণ (পর্ব ৩৮, Fashion-MNIST, প্রায় সমান parameter, ৩ seed): ১,০০০টি ছবিতে CNN ৮৩.২%, ViT ৭৪.৫%; পুরো ৬০,০০০-এ ফারাক কমে ২.৮ পয়েন্ট। ২ pixel সরানো test-এ ViT ৬৩.৯%, CNN ৮৫.৫%. আর position ছাড়া patch এলোমেলো করলে ViT-এর output কার্যত বদলায় না (পার্থক্য ১০⁻¹⁵): তার কাছে ছবি patch-এর থলে।

সিদ্ধান্ত: অল্প ডেটায় CNN, কারণ অনুমানগুলো ডেটার কাজ আগেই করে দেয় (data hunger). মূল প্রবন্ধের (Dosovitskiy ও সহলেখক, ২০২০) দাবি, বড় ডেটায় pretrain করলে ViT CNN-এর সমান বা ভালো। Attention-এর খরচ token-এ দ্বিঘাত: ছবি ২২৪ থেকে ৩৮৪ হলে জোড়া ৮.৬ গুণ।

পরীক্ষক যা খোঁজেন: দুই bias-এর নাম আর ফল (২); ViT-এ জ্যামিতি কোথা থেকে (১); অল্প বনাম বেশি ডেটার যুক্তি, প্রমাণসহ (২)। পর্ব ৩৮ · পর্ব ২০

যেখানে নম্বর কাটে: “ViT সবসময় ভালো” লেখা; convolution-কে invariant বলা (সে equivariant; pooling আংশিক invariance দেয়)।

খ-০২RNN (LSTM সহ) আর Transformer-এর তুলনা করুন: training-এ সমান্তরালতা, দীর্ঘ নির্ভরতা, স্তরপ্রতি খরচ, inference-এর memory আর অবস্থানের তথ্য। কোন কাজে এখনো RNN-ধাঁচের model যুক্তিসঙ্গত? — ১০ নম্বর (মাঝারি)
মাপকাঠিRNN/LSTMTransformer
Training-এ সমান্তরালনা: ht-এর জন্য ht−1 লাগেহ্যাঁ: সব অবস্থান একসঙ্গে, causal mask দিয়ে
দুই token-এর মাঝের পথO(T) ধাপ; gradient প্রতি ধাপে গুণ হয়O(১): সরাসরি attention
স্তরপ্রতি খরচO(T·d²)O(T²·d) + O(T·d²)
Inference-এ memoryস্থির আকারের hidden stateKV cache, T-এর সঙ্গে বাড়ে
প্রতি নতুন tokenO(d²), T-নিরপেক্ষCache-সহ O(T·d)
অবস্থানক্রমেই নিহিতPositional encoding লাগে

দীর্ঘ নির্ভরতা, মাপা: পর্ব ২৯-এ ১০০ ধাপ পেছনের gradient সাধারণ tanh RNN-এ ২.১ × ১০⁻⁶, forget-gate bias ১ দেওয়া LSTM-এ ২.৬ × ১০⁻³, প্রায় হাজার গুণ বেশি; কিন্তু bias ০ দিলে LSTM RNN-এর চেয়েও খারাপ। অর্থাৎ gate সাহায্য করে, তবু পথ লম্বাই থাকে। Transformer-এ পথ এক ধাপ; দামটি দ্বিঘাত খরচ (খ-০৩)। সমান্তরালতার জন্য একই GPU সময়ে Transformer অনেক বেশি token দেখে, যা বড় pretraining-এর প্রধান সুবিধা (Vaswani ও সহলেখক, ২০১৭)।

কখন RNN-ধাঁচ: ছোট ডিভাইসে streaming (প্রতি token-এ স্থির memory), ছোট time series আর অল্প ডেটা; 1D convolution-ও শক্ত বিকল্প (পর্ব ৩১)। নতুন recurrent স্থাপত্যের দাবি নিজের কাজে যাচাই করে নেওয়া ভালো।

পরীক্ষক যা খোঁজেন: অন্তত পাঁচ সারির ছক (৫); দীর্ঘ নির্ভরতার কারণ, gradient-এর ভাষায় (২); প্রমাণ (১); কখন কোনটি (২)। পর্ব ২৮ · পর্ব ২৯ · পর্ব ৩৫ · পর্ব ৩৭

যেখানে নম্বর কাটে: “LSTM vanishing পুরো সারায়”; Transformer-এর inference-কেও পুরো সমান্তরাল বলা (decoding এক token করে); positional encoding বাদ।

খ-০৩Self-attention-এর সময় আর memory-র জটিলতা sequence-দৈর্ঘ্য T-এর সাপেক্ষে লিখুন। KV cache, FlashAttention, sliding-window আর grouped-query attention কোন খরচ কমায়, আর কোনটি model-এর ফল বদলায়? — ১০ নম্বর (কঠিন)

খরচ: S = QKᵀ/√dk হলো T × T; তাই সময় O(T²·d), আর সোজা পথে প্রতি head-এ T² score-এর memory. Projection-এর O(T·d²) আলাদা। Decoding-এ প্রতি নতুন token-এর জন্য আগের সব K, V আবার হিসাব করলে মোট কাজ প্রায় T³-এর মতো বাড়ে।

import numpy as np

d, W = 64, 256                       # head size, sliding-window width
print("T      full scores   window scores   fp16 T*T per head")
for T in (512, 2048, 8192, 32768):
    full, win = T * T, T * W - W * (W - 1) // 2
    print(f"{T:<6} {full:>12,}  {win:>13,}   {full * 2 / 2**20:>9.1f} MiB")

# decoding T new tokens: recompute all keys every step vs reuse a KV cache
for T in (100, 200):
    no_cache = sum(t * t * d for t in range(1, T + 1))   # t queries x t keys
    cache = sum(t * d for t in range(1, T + 1))          # 1 query x t keys
    print(f"decode {T}: no cache {no_cache:,} | cache {cache:,} | ratio {no_cache / cache:.0f}")

# online softmax (the FlashAttention idea): same answer, tile by tile
rng = np.random.default_rng(89)
q, K, V = rng.normal(size=d), rng.normal(size=(1000, d)), rng.normal(size=(1000, 4))
s = K @ q / np.sqrt(d)
full = np.exp(s - s.max()) @ V / np.exp(s - s.max()).sum()
m, z, acc = -np.inf, 0.0, np.zeros(4)
for i in range(0, 1000, 128):                        # one tile at a time
    st = s[i:i + 128]
    m_new = max(m, st.max())
    z = z * np.exp(m - m_new) + np.exp(st - m_new).sum()
    acc = acc * np.exp(m - m_new) + np.exp(st - m_new) @ V[i:i + 128]
    m = m_new
print("max |full - online| =", f"{np.abs(full - acc / z).max():.1e}")

আসল আউটপুট (ব্রাউজারের Python):

T      full scores   window scores   fp16 T*T per head
512         262,144         98,432         0.5 MiB
2048      4,194,304        491,648         8.0 MiB
8192     67,108,864      2,064,512       128.0 MiB
32768  1,073,741,824      8,355,968      2048.0 MiB
decode 100: no cache 21,654,400 | cache 323,200 | ratio 67
decode 200: no cache 171,948,800 | cache 1,286,400 | ratio 134
max |full - online| = 4.2e-17

T চার গুণ হলে score ষোলো গুণ; ৩২,৭৬৮ token-এ একটি head-এর fp16 score matrix-ই ২ GiB; window-এ বৃদ্ধি প্রায় রৈখিক। Decoding-এ ১০০ থেকে ২০০ token-এ কাজ cache ছাড়া প্রায় আট গুণ, cache-সহ প্রায় চার গুণ। টুকরো ধরে online softmax আর পুরো softmax-এর পার্থক্য ১০⁻¹⁷-এর ঘরে, শুধু rounding.

কৌশলকী কমায়ফল বদলায়?
KV cacheDecoding-এ পুনরায় হিসাব; প্রতি ধাপ O(T·d)না (float-এর rounding ছাড়া)
FlashAttentionT² matrix memory-তে না রেখে tile ধরে online softmax; memory-র আসা-যাওয়ানা, exact; FLOP প্রায় একই
Sliding windowসময় আর memory O(T·W)হ্যাঁ: ভিন্ন model; দূরের তথ্য স্তরে স্তরে আসে
GQAKV cache-এর memory (K, V head কম)হ্যাঁ, স্থাপত্য বদল; প্রবন্ধের দাবি মান কাছাকাছি
Linformer, Performerদ্বিঘাতকে প্রায় রৈখিক করেহ্যাঁ, আনুমানিক

মাপা প্রমাণ (পর্ব ৩৭): ৩২ স্তর, d = ৪,০৯৬-এর একটি model-এ একজন ব্যবহারকারীর KV cache ৮,১৯২ token-এ ৪ GiB, ১,২৮,০০০ token-এ ৬২.৫ GiB, আর ৮টি KV head-এর GQA-তে ১৫.৬ GiB. পর্ব ৫২-এ CPU-তে ২৫০ token-এর prompt-এ ৬০টি নতুন token: cache-সহ ৪.৯৮ সেকেন্ড, ছাড়া ৫০.১৫.

পরীক্ষক যা খোঁজেন: O(T²d) আর T² memory (২); চারটি কৌশল, কী কমায় (৪); exact বনাম ফল-বদলানো আলাদা করা (২); সংখ্যা বা উদাহরণ (২)। পর্ব ৩৩ · পর্ব ৩৭ · পর্ব ৮৩

যেখানে নম্বর কাটে: FlashAttention-কে “approximate” বা “FLOP কমায়” বলা; KV cache-কে training-এর কৌশল বলা; GQA আর multi-head-কে একই memory-র ধরা।

৪ · অংশ গ — NLP, pretraining আর LLM-কে খাপ খাওয়ানো (মডিউল ৭–৯)

রিভিশন: পর্ব ৩৯ (বাংলার চ্যালেঞ্জ), পর্ব ৪০ (tokenization), পর্ব ৪৭ (pretraining-এর লক্ষ্য), পর্ব ৫৫ (LoRA), পর্ব ৫৭ (RLHF, DPO). LLM-এর প্রাথমিক ধারণা AI-এর ভিত্তি কোর্সের পর্ব ৭০-এ।

গ-০১Masked language modeling, causal language modeling আর span corruption-এর তুলনা করুন: লক্ষ্য, কোন অবস্থানে loss, স্থাপত্য আর কোন কাজে ভালো। — ৫ নম্বর (মাঝারি)
মাপকাঠিMLM (BERT)Causal (GPT)Span corruption (T5)
লক্ষ্যলুকানো token দুই দিকের প্রসঙ্গ থেকেপরের token, শুধু বাঁ দিক দেখেমুছে ফেলা টুকরোগুলো sentinel ধরে লেখা
Loss কোথায়বাছা প্রায় ১৫% অবস্থানেপ্রতিটি অবস্থানেশুধু target-এর ছোট sequence-এ
স্থাপত্যEncoderDecoder-onlyEncoder–decoder
ভালো কাজClassification, NER, embeddingGeneration, chatঅনুবাদ, সারাংশ, text-to-text

মাপা খুঁটিনাটি (পর্ব ৪৭): BERT-এর ৮০/১০/১০ নিয়মে বাছা অবস্থানের ৮০% [MASK], ১০% এলোমেলো, ১০% অপরিবর্তিত। T5-এর হিসাবে ৫০০ token-এ ৭৫টি নষ্ট, ২৫টি টুকরো; input ৪৫০, target ১০১: target ছোট বলে training সস্তা।

পরীক্ষক যা খোঁজেন: তিনটি লক্ষ্য (২); loss-এর অবস্থান আর তার দক্ষতা (১); স্থাপত্য ও কাজ (২)। পর্ব ৪৭ · পর্ব ৪৮ · পর্ব ৪৯

যেখানে নম্বর কাটে: “BERT দিয়ে সাবলীল লেখা বানানো যায়” লেখা; causal model-এ ভবিষ্যৎ দেখার mask ভুলে যাওয়া।

গ-০২বাজারঘর একটি বাংলা সহায়ক চায়, যা দোকানের নীতি জেনে উত্তর দেবে আর অভিযোগকে শ্রেণিতে ভাগ করবে। Prompting, RAG, LoRA আর full fine-tuning-এর তুলনা করুন, আর কোন অংশে কোনটি বাছবেন যুক্তিসহ লিখুন। — ১০ নম্বর (মাঝারি)
মাপকাঠিPromptingRAGLoRAFull FT
কী বদলায়শুধু inputInput-এ খুঁজে আনা নথিছোট adapter weightসব weight
নতুন জ্ঞানContext-এ যতটুকু আঁটেহ্যাঁ, নথি বদলালেই হালনাগাদ, উৎসসহদুর্বল; তথ্য মুখস্থ করানো ঝুঁকিপূর্ণদুর্বল, একই কারণে
আচরণ, ফরম্যাট, শ্রেণিবিভাগআংশিকনাহ্যাঁহ্যাঁ
ঝুঁকিPrompt-এর প্রতি সংবেদনশীলখোঁজা ভুল হলে ভুল উত্তরOverfitCatastrophic forgetting

মাপা প্রমাণ: পর্ব ৫৫-এ Qwen2.5-0.5B-এর full fine-tuning-এ (fp32, AdamW) শুধু weight, gradient আর optimizer state-এ ৭.৯০ GB, যার অর্ধেক Adam-এর m আর v; q, v-তে r = ৮-এর LoRA শেখে ৫,৪০,৬৭২টি parameter, মোটের ০.১১%. বাংলা রিভিউ শ্রেণিবিভাগে (bangla-bert-base): full test macro-F1 ০.৯৪২৫, LoRA r = ৮ ০.৯৩৩২, peak memory ৩,৯৬৯ থেকে ১,৭৬৭ MiB; adapter ১.১৪ MiB বনাম পুরো model ৬২৭.২ MiB. কিন্তু একই split-এ TF-IDF + logistic regression পেয়েছিল ০.৯৪১২. পর্ব ৫২-এ system বার্তায় তথ্য দিতেই বানানো উত্তর ঠিক হয়েছিল।

সিদ্ধান্ত: নীতির প্রশ্নে RAG (নীতি বদলায়, উৎস দেখাতে হয়), সাথে system prompt আর উত্তর না পেলে “জানি না”। অভিযোগের শ্রেণিতে আগে সস্তা baseline, তারপর দরকার হলে LoRA; full FT শুধু মাপা ফাঁক গুরুত্বপূর্ণ হলে। পর্ব ৮৬-এ ঠিক এই ভাগ, আর সেখানেও router-এ TF-IDF (০.৮৩৩) BERT-এর (০.৮১৬) চেয়ে পিছিয়ে ছিল না।

পরীক্ষক যা খোঁজেন: চার পথের ছক (৪); জ্ঞান বনাম আচরণ আলাদা করা (২); baseline আর মাপা প্রমাণ (২); কাজভেদে সিদ্ধান্ত (২)। পর্ব ৫৫ · পর্ব ৬৯ · পর্ব ৮৫

যেখানে নম্বর কাটে: “fine-tune করলে model নতুন নীতি জানবে” লেখা; baseline ছাড়া সিদ্ধান্ত; LoRA-কে “memory প্রায় শূন্য” বলা (frozen base আর activation থেকেই যায়)।

গ-০৩RLHF-এর তিন ধাপ লিখুন। KL-শাস্তিসহ লক্ষ্যের সর্বোত্তম policy থেকে DPO-র loss derive করুন, আর ব্যাখ্যা করুন কেন reward model বা DPO-র ভালো accuracy মানেই ভালো উত্তর নয়। — ১০ নম্বর (কঠিন)

RLHF: (১) SFT: নির্দেশ-উত্তরের ডেটায় fine-tune. (২) Reward model: একই প্রশ্নের দুটি উত্তরের কোনটি মানুষ বেছেছেন, Bradley–Terry loss −log σ(rw − rl) দিয়ে শেখা। (৩) PPO দিয়ে policy-কে reward বাড়াতে শেখানো, reference model থেকে বেশি না সরতে KL শাস্তিসহ: max E[r(x, y)] − β·KL(π ‖ πref). এই ধারা জনপ্রিয় হয় InstructGPT-এর (Ouyang ও সহলেখক, ২০২২) পরে।

DPO-র derivation: এই লক্ষ্যের সর্বোত্তম সমাধান π*(y ∣ x) = πref(y ∣ x)·exp(r(x, y)/β)/Z(x). উল্টে লিখলে r = β log(π*/πref) + β log Z(x). Bradley–Terry-তে শুধু rw − rl লাগে, তাই Z(x) কেটে যায়:

LDPO = −log σ(β[(log π(yw) − log πref(yw)) − (log π(yl) − log πref(yl))])

Reward model আর RL-এর লুপ লাগে না; policy নিজেই একটি implicit reward (Rafailov ও সহলেখক, ২০২৩)।

import numpy as np

sig = lambda x: 1 / (1 + np.exp(-x))
# summed log-probabilities of chosen (w) and rejected (l) answers, 4 pairs
pi_w  = np.array([-11.0, -16.0, -9.5, -20.0])   # policy being trained
pi_l  = np.array([-14.0, -13.0, -12.0, -21.0])
ref_w = np.array([-12.0, -14.5, -10.0, -20.0])  # frozen reference (SFT)
ref_l = np.array([-13.0, -13.5, -11.0, -20.5])

def dpo(beta, pw=pi_w, pl=pi_l):
    h = (pw - ref_w) - (pl - ref_l)              # log-ratio margin
    return h, -np.log(sig(beta * h)).mean(), sig(-beta * h)

for beta in (0.1, 0.5):
    h, L, wt = dpo(beta)
    print(f"beta={beta}: h={h} loss={L:.4f} push={wt.round(3)}")
print("policy = reference:", round(dpo(0.1, ref_w, ref_l)[1], 4),
      "| ln 2 =", round(np.log(2), 4))

beta = 0.1                                       # DPO = Bradley-Terry on
r_w, r_l = beta * (pi_w - ref_w), beta * (pi_l - ref_l)   # implicit rewards
print("BT on implicit rewards:", round(-np.log(sig(r_w - r_l)).mean(), 4))

# chosen gets LESS likely (-2 nats) but rejected drops more (-8 nats)
h2, L2, _ = dpo(beta, pi_w - 2, pi_l - 8)
print(f"chosen -2, rejected -8: loss {dpo(beta)[1]:.4f} -> {L2:.4f}")

আসল আউটপুট (ব্রাউজারের Python):

beta=0.1: h=[ 2.  -2.   1.5  0.5] loss=0.6714 push=[0.45  0.55  0.463 0.488]
beta=0.5: h=[ 2.  -2.   1.5  0.5] loss=0.6473 push=[0.269 0.731 0.321 0.438]
policy = reference: 0.6931 | ln 2 = 0.6931
BT on implicit rewards: 0.6714
chosen -2, rejected -8: loss 0.6714 -> 0.4228

দ্বিতীয় জোড়ায় h = −২: policy ভুলটিকেই বেশি তুলেছে, তাই তার ধাক্কা σ(−βh) সবচেয়ে বড়। Policy = reference হলে loss ঠিক ln ২; implicit reward-এর Bradley–Terry আর DPO একই, ০.৬৭১৪. শেষ লাইনটি ফাঁদ: chosen-এর সম্ভাবনা কমলেও (−২ nat) rejected বেশি কমলে loss ০.৪২২৮-এ নামে।

কেন accuracy যথেষ্ট নয়, মাপা (পর্ব ৫৭): ছোট reward model আলাদা test-এ ১০০% ঠিক, অথচ উত্তরে ভুল সংখ্যা বসালে ১১% থেকে ৩৬% ক্ষেত্রে ভুলটিকে সমান বা বেশি score দিয়েছে: সে তথ্য নয়, বাক্যের ছাঁচ শিখেছিল। সত্যিকারের DPO run-এ implicit reward accuracy ১.০০, কিন্তু policy-র নিজের লেখা ৪০টি উত্তরের বড়জোর ২টিতে তথ্য ঠিক; margin বেড়েছিল মূলত rejected-কে চাপা দিয়ে (chosen +২৩, rejected −৮১ nat), আর β = ০.০২-এ ভাষাই ভেঙে যায়। Proxy বেশি চাপলে আসল মান কমে (reward hacking).

পরীক্ষক যা খোঁজেন: তিন ধাপ আর KL-এর ভূমিকা (২); π* আর r-এর উল্টানো রূপ (৩); Z(x) কাটা আর চূড়ান্ত loss (২); accuracy বনাম আসল মানের যুক্তি (২); β-এর প্রভাব (১)। পর্ব ৫৭ · পর্ব ৫৬ · পর্ব ৫৮

যেখানে নম্বর কাটে: DPO-তে “reward model শেখানো হয়” লেখা; β-এর দিক উল্টো (ছোট β মানে বেশি সরে যাওয়ার সুযোগ); “DPO chosen-এর সম্ভাবনা বাড়ায়” নিশ্চিত বলে ধরা।

গ-০৪বাংলা ভাষার NLP-তে পাঁচটি বিশেষ সমস্যা লিখুন, প্রতিটির মাপা উদাহরণ আর প্রতিকারসহ। — ৫ নম্বর (মাঝারি)
  1. Token-এর দাম: একই লেখায় Qwen2.5-এর tokenizer-এ বাংলা ইংরেজির ৩.৮৬ গুণ token, SmolLM2-এ ৬.৪৯ গুণ, BanglaBERT-এ ০.৫২ গুণ (পর্ব ৬৫): বেশি খরচ, latency, ছোট কার্যকর context (token fertility). প্রতিকার: model বাছাইয়ের আগে নিজের লেখায় token গোনা।
  2. Byte আর যুক্তাক্ষর: UTF-8-এ বাংলার প্রতিটি code point ৩ byte, আর merge ছাড়া BPE-র ৬০টি সীমার ২৪টি অক্ষরের ভেতরে পড়েছিল (পর্ব ৪০)। প্রতিকার: grapheme cluster মেনে টুকরো, বাংলায় যথেষ্ট ডেটায় tokenizer.
  3. Unicode-এর একাধিক রূপ: “য়” এক চিহ্নে বা দুই চিহ্নে; NFC ছাড়া “শাড়ি”-র দুই রূপ সমান নয়। প্রতিকার: NFC, তবে NFKC সাবধানে (½ বদলে 1⁄2).
  4. Banglish আর code-mixing: বাংলিশ প্রশ্নে বাংলা নথি খুঁজে পাওয়া যায়নি (পর্ব ৭৩); অভিধান-ভিত্তিক রূপান্তরে “product bad” হয়ে গেল “বাদ”, মতটাই উল্টো (পর্ব ৩৯)। প্রতিকার: Banglish প্রশ্ন eval set-এ রাখা, multilingual embedding.
  5. সমৃদ্ধ রূপতত্ত্ব: held-out লেখায় ৩৩.৬% token আগে দেখা যায়নি (OOV); নিয়মভিত্তিক stemming “মানে”-কে “মান” বানায়। প্রতিকার: subword, BLEU-র বদলে chrF.

আরও একটি: log-probability ইংরেজিতে বানানো উত্তর আলাদা করেছিল (AUC ০.৯৮), বাংলায় কোনো সংকেত মেলেনি (পর্ব ৫২)।

পরীক্ষক যা খোঁজেন: পাঁচটি সমস্যা, প্রতিটিতে উদাহরণ আর প্রতিকার (৫)। পর্ব ৩৯ · পর্ব ৪০ · পর্ব ৬৫

যেখানে নম্বর কাটে: “বাংলায় ডেটা কম” এক লাইনে থামা; সমস্যা লিখে প্রতিকার বাদ।

৫ · অংশ ঘ — Hallucination, RAG আর agent (মডিউল ১০–১১)

রিভিশন: পর্ব ৫২ (hallucination), পর্ব ৬৯ আর পর্ব ৭০ (RAG ও মূল্যায়ন), পর্ব ৭১ আর পর্ব ৭২ (tool, agent), পর্ব ৭৩ (নিরাপত্তা).

ঘ-০১LLM-এর hallucination-এর অন্তত পাঁচটি কারণ লিখুন, আর প্রতিটির বিপরীতে একটি প্রতিকার দিন। কেন একে পুরো দূর করা যায় না? — ১০ নম্বর (মাঝারি)

সংজ্ঞা: Hallucination মানে সাবলীল কিন্তু উৎস বা বাস্তবের সঙ্গে না-মেলা লেখা। Model-এর লক্ষ্য পরের token-এর সম্ভাবনা, সত্য নয়।

কারণমাপা উদাহরণপ্রতিকার
জ্ঞান নেই বা পুরোনো (cutoff)২০৩১-এর বিশ্বকাপের সাবলীল “ফল” (পর্ব ৫২)RAG, উৎস দেওয়া
Context কেটে যাওয়াWindow ১২০-এ অর্ডার নম্বর BG417 বাদ, error ছাড়াই (পর্ব ৫২)বার্তা ধরে ছাঁটা, সারাংশ, বাজেট নজরে
Tokenizationঅক্ষর গোনায় ২০-এ ৩টি ঠিক (পর্ব ৫২)গোনা, হিসাব tool বা কোডে
খোঁজার ভুলBanglish প্রশ্নে বাংলা নথি মেলেনি (পর্ব ৭৩)Retrieval-এর মূল্যায়ন, hybrid search
অতি-আত্মবিশ্বাস৯০%-এর বেশি বলা উত্তরের ৭৫% ঠিক, ECE ০.১৮ (পর্ব ৫২)Temperature scaling, abstention

যাচাইয়ের স্তর: সংখ্যা-পরীক্ষা, citation-পরীক্ষা, আর উত্তর না পেলে থামার gate. ক্যাপস্টোনে reranker gate ৪০টি প্রশ্নে সঠিক উত্তর +০.১২৫ বাড়িয়েছিল (৯৫% CI [+০.০২৫, +০.২২৫]), আর উত্তরহীন ৬টির ৬টিতেই “জানি না” (পর্ব ৮৬)। পর্ব ৫২-তে temperature scaling ECE ০.২১ থেকে ০.০৫-এ নামিয়েছিল, নির্ভুলতা না বদলে।

কেন পুরো দূর হয় না: অজানা প্রশ্নেও কিছু একটা লেখা সম্ভব, আর উৎস থাকলেও model ভুল পড়তে পারে। লক্ষ্য তাই মাপা হার কমানো আর ক্ষতি সীমিত রাখা।

পরীক্ষক যা খোঁজেন: সংজ্ঞা আর মূল কারণ (২); পাঁচটি কারণ-প্রতিকার জোড়া (৫); যাচাইয়ের স্তর বা মাপা উদাহরণ (২); কেন শূন্য নয় (১)। পর্ব ৫২ · পর্ব ৭০ · পর্ব ৮৬

যেখানে নম্বর কাটে: “RAG দিলে hallucination শেষ” লেখা; temperature ০ মানেই সত্য ভাবা।

ঘ-০২বাজারঘরের হেল্প সেন্টারের RAG সহায়কের জন্য একটি মূল্যায়ন-পরিকল্পনা নকশা করুন: eval set, retrieval আর generation আলাদা করে কী মাপবেন, দুটি সংস্করণ কীভাবে তুলনা করবেন, আর LLM বিচারকে কতটা ভরসা করবেন। — ১০ নম্বর (কঠিন)

Eval set: প্রশ্নের ধরন আগে: এক নথি, একাধিক নথি, সংখ্যা, Banglish, আর উত্তর নেই। প্রতিটির gold নথি আর gold উত্তর; dev আর test আলাদা।

ছবি ৮৯.১ — RAG-এর তিন স্তরের মূল্যায়ন

প্রতিটি স্তরের আলাদা মাপ; ডট দেওয়া পথ oracle context

Three-level RAG evaluation with an oracle-context path প্রশ্ন + gold নথি Retriever recall@k · MRR · nDCG Generator (LLM) faithfulness · citation উত্তর সঠিকতা · ঠিক “জানি না” end-to-end: পুরো পথ একসঙ্গে top-k নথি oracle

স্তর ধরে মাপ: Retriever: recall@k, MRR, nDCG, gold নথির বিপরীতে। Generator: gold নথি সরাসরি দিয়ে (oracle context) faithfulness আর citation; এতে খোঁজার ভুল আর লেখার ভুল আলাদা হয়। End-to-end: সঠিকতা, আর উত্তরহীন প্রশ্নে থামা। ভুলগুলো শ্রেণিতে ভাগ করুন।

import numpy as np
from math import comb

rng = np.random.default_rng(89)

def paired(both, a_only, b_only, neither, reps=10000):
    a = np.array([1] * both + [1] * a_only + [0] * b_only + [0] * neither)
    b = np.array([1] * both + [0] * a_only + [1] * b_only + [0] * neither)
    n = a.size
    idx = rng.integers(0, n, (reps, n))           # resample questions, keep pairs
    diffs = b[idx].mean(1) - a[idx].mean(1)
    lo, hi = np.percentile(diffs, [2.5, 97.5])
    k, m = min(a_only, b_only), a_only + b_only    # exact McNemar (two-sided)
    p = min(1.0, 2 * sum(comb(m, i) for i in range(k + 1)) / 2**m)
    print(f"n={n} A {a.sum()} B {b.sum()} | better {b_only} worse {a_only} | "
          f"diff {b.mean() - a.mean():+.3f} CI [{lo:+.3f}, {hi:+.3f}] | p {p:.3f}")

paired(both=21, a_only=0, b_only=5, neither=14)   # same +5 net, all one way
paired(both=18, a_only=3, b_only=8, neither=11)   # same +5 net, mixed
paired(both=42, a_only=0, b_only=10, neither=28)  # twice the questions

আসল আউটপুট (ব্রাউজারের Python):

n=40 A 21 B 26 | better 5 worse 0 | diff +0.125 CI [+0.025, +0.225] | p 0.062
n=40 A 21 B 26 | better 8 worse 3 | diff +0.125 CI [-0.025, +0.275] | p 0.227
n=80 A 42 B 52 | better 10 worse 0 | diff +0.125 CI [+0.062, +0.200] | p 0.002

তিনটিতেই মোট পার্থক্য +০.১২৫. প্রথম সারি ক্যাপস্টোনের gate-এর গঠন (৫টি ভালো, ০টি খারাপ), CI সেখানকার মতোই [+০.০২৫, +০.২২৫]. একই +০.১২৫ ৮টি ভালো আর ৩টি খারাপ থেকে এলে CI শূন্য ছোঁয়: উন্নতি প্রমাণিত নয়। প্রশ্ন দ্বিগুণ হলে CI সরু। তাই সিদ্ধান্ত জোড়া তুলনায় (paired bootstrap, McNemar), দুটি আলাদা গড় দেখে নয়।

LLM বিচারক: হাতে লেবেল করা অংশে বিচারকের মিল Cohen's kappa দিয়ে মাপুন। পর্ব ৭০-এ 1.5B বিচারকের kappa মাত্র ০.২৪৯ (৯৫% CI [০.০৫, ০.৪৫]), আর শুধু উৎস ও উত্তরের ক্রম বদলালে ৬৩টির ৩০টি রায় উল্টে যায়; সস্তা সংখ্যা-পরীক্ষার kappa ছিল ০.৩২৪. শেষে release gate আর চালুর পরে নমুনা ধরে হাতে যাচাই।

পরীক্ষক যা খোঁজেন: প্রশ্নের ধরনসহ eval set (২); তিন স্তরের metric আর oracle (৩); জোড়া তুলনা আর CI (২); বিচারকের যাচাই (২); release gate বা নজরদারি (১)। পর্ব ৭০ · পর্ব ৬৬ · পর্ব ৮৬

যেখানে নম্বর কাটে: শুধু end-to-end একটি সংখ্যা; উত্তরহীন প্রশ্ন বাদ; বিচারককে যাচাই ছাড়া মানা।

ঘ-০৩Tool ব্যবহারকারী একটি agent (অর্ডার খোঁজা, রিফান্ড, বার্তা পাঠানো) কোন কোন ভাবে ব্যর্থ হয়? চারটি ব্যর্থতা আর তাদের guardrail লিখুন। — ৫ নম্বর (মাঝারি)
  • লুপ আর লক্ষ্যচ্যুতি: একই tool বারবার। Guardrail: step budget, পুনরাবৃত্তিতে থামা।
  • বানানো argument আর মিথ্যা দাবি: পর্ব ৭৩-এ বৈধ অনুরোধের ২৪টি উত্তরের ৬টিতে কোনো tool call ছাড়াই লেখা “পাঠিয়ে দিয়েছি”, আর প্রস্তাবিত ৮টি send_message-এর সবগুলোয় বানানো নম্বর। Guardrail: schema যাচাই, argument-কে ব্যবহারকারীর নিজের ডেটার সঙ্গে মেলানো, সফলতার দাবি শুধু tool-এর ফল থেকে।
  • Indirect prompt injection: নথি বা tool-এর ফলে লুকানো নির্দেশ। Guardrail: least privilege, বাইরের লেখাকে ডেটা হিসেবে চিহ্নিত করা, output filter, canary test.
  • অতিরিক্ত ক্ষমতা: রিফান্ডের মতো অপরিবর্তনীয় কাজ। Guardrail: human-in-the-loop, idempotency key, audit log.

বাস্তবতার মাপ: পর্ব ৭২-এ একটি ছোট খোলা model-এ ৮৪টি agent run-এর মাত্র ২টি সফল; পরিকল্পনা-প্রথম prompt দরকারি tool ডাকা বাড়িয়েছিল (+০.৪৫, CI [+০.২৩, +০.৬৬]), তবু কাজ শেষ হয়নি। তাই মূল্যায়ন trace ধরে।

পরীক্ষক যা খোঁজেন: চারটি ব্যর্থতা-guardrail জোড়া (৪); মূল্যায়ন বা মাপা প্রমাণ (১)। পর্ব ৭১ · পর্ব ৭২ · পর্ব ৭৩

যেখানে নম্বর কাটে: শুধু prompt-এ “নিয়ম মানো” লেখাকে guardrail বলা; কোডে নয়, model-এর ভরসায় অনুমতি যাচাই।

৬ · অংশ ঙ — Generative model আর তার মূল্যায়ন (মডিউল ১২)

রিভিশন: পর্ব ৭৪ (মানচিত্র), পর্ব ৭৬ (VAE), পর্ব ৭৭ (GAN), পর্ব ৭৯ (diffusion), পর্ব ৮১ (মূল্যায়ন). ELBO আর reparameterization-এর derivation মেশিন লার্নিং কোর্সের পর্ব ৪৮-এ।

ঙ-০১VAE, GAN আর diffusion model-এর তুলনা করুন: training-এর লক্ষ্য, likelihood, নমুনার মান, বৈচিত্র্য, sampling-এর গতি আর training-এর স্থিরতা। একটি ছবির পণ্য-ক্যাটালগের জন্য কোনটি বাছবেন? — ১০ নম্বর (মাঝারি)
মাপকাঠিVAEGANDiffusion
লক্ষ্যELBO: reconstruction − KLGenerator আর discriminator-এর minimax খেলাNoise অনুমান (ε-এর MSE), ধাপে ধাপে denoise
Likelihoodনিম্নসীমা পাওয়া যায়নেই (implicit)ELBO-ধাঁচের সীমা
নমুনার মানপ্রায়ই ঝাপসাতীক্ষ্ণতীক্ষ্ণ
বৈচিত্র্যভালোMode collapse-এর ঝুঁকিভালো
Samplingএক passএক passঅনেক ধাপ; DDIM-এ কম
Trainingস্থিরঅস্থির, সংবেদনশীলস্থির, কিন্তু দীর্ঘ

মাপা প্রমাণ: পর্ব ৭৭-এর run-এ lr ৫ × ১০⁻⁵-এ তিনটি seed-ই মাত্র একটি শ্রেণির ছবি বানিয়েছে, অথচ classifier-এর আত্মবিশ্বাস ০.৯৭১: নিশ্চিত দেখানো মানেই বৈচিত্র্য নয়। পর্ব ৭৯-এ নিখুঁত denoiser-এও ৫০ ধাপের DDIM-এ নমুনার নিকটতম কেন্দ্র থেকে গড় দূরত্ব ০.০৮১ (আসল ডেটায় ০.১০০), ৫ ধাপে ০.৬০১, তবে কোনো mode বাদ পড়েনি। পর্ব ৭৬-এ Fashion-MNIST-এর VAE নমুনায় জিনিস চেনা যায়, নকশা আর কিনারা ঝাপসা।

কেন এমন: VAE-র Gaussian decoder গড়ের দিকে টানে, তাই ঝাপসা। GAN-এর generator শুধু discriminator-কে ঠকাতে চায়; কয়েকটি নিশ্চিত mode-এ আটকে থাকলেও তা সফল। Diffusion প্রতিটি ধাপে একটি সরল regression শেখে, তাই স্থির।

সিদ্ধান্ত: ক্যাটালগে মান আর বৈচিত্র্য দুটিই চাই: latent diffusion, কম ধাপের sampler-সহ। ছোট latent বা anomaly score চাইলে VAE; সংকীর্ণ ডোমেইনে real-time-এ GAN.

পরীক্ষক যা খোঁজেন: ছয় সারির ছক (৫); প্রতিটির দুর্বলতার কারণ (২); প্রমাণ (১); সিদ্ধান্ত (২)। পর্ব ৭৪ · পর্ব ৭৬ · পর্ব ৭৭ · পর্ব ৮০

যেখানে নম্বর কাটে: GAN-এর likelihood আছে বলা; diffusion-কে “এক ধাপে ছবি” বলা; mode collapse আর ঝাপসা নমুনা গুলিয়ে ফেলা।

ঙ-০২FID কী মাপে, আর এর তিনটি সীমা লিখুন। একটি সংখ্যার বদলে precision ও recall কেন জরুরি, উদাহরণ দিয়ে দেখান। — ৫ নম্বর (মাঝারি)

সংজ্ঞা: FID আসল আর বানানো ছবির Inception feature-এ দুটি Gaussian বসিয়ে তাদের Fréchet দূরত্ব: ‖μ১ − μ২‖² + tr(Σ১ + Σ২ − ২(Σ১Σ২)½)। কম মানে কাছাকাছি (Heusel ও সহলেখক, ২০১৭)।

import numpy as np

rng = np.random.default_rng(89)
ang = np.arange(8) * np.pi / 4
centres = np.c_[np.cos(ang), np.sin(ang)] * 2          # 8 modes on a circle

def sample(n, modes, sd):
    c = centres[rng.choice(modes, n)]
    return c + sd * rng.normal(size=(n, 2))

def fd(a, b):                                           # Frechet distance
    m1, m2, S1, S2 = a.mean(0), b.mean(0), np.cov(a.T), np.cov(b.T)
    ev = np.linalg.eigvals(S1 @ S2).real.clip(0)
    return np.sum((m1 - m2)**2) + np.trace(S1 + S2) - 2 * np.sqrt(ev).sum()

def coverage(ref, x, k=3):                              # share of x inside ref's k-NN balls
    r = np.sort(np.linalg.norm(ref[:, None] - ref[None], axis=2), 1)[:, k]
    return np.mean((np.linalg.norm(x[:, None] - ref[None], axis=2) <= r).any(1))

real = sample(400, np.arange(8), 0.15)
fakes = {"good copy": sample(400, np.arange(8), 0.15),
         "4 modes only": sample(400, np.arange(4), 0.15),
         "blurry": sample(400, np.arange(8), 0.6)}
print("generator      precision  recall   FD")
for name, g in fakes.items():
    print(f"{name:13s}  {coverage(real, g):.2f}       {coverage(g, real):.2f}     {fd(real, g):.3f}")

আসল আউটপুট (ব্রাউজারের Python):

generator      precision  recall   FD
good copy      0.93       0.96     0.005
4 modes only   0.95       0.48     2.590
blurry         0.30       0.97     0.045

“4 modes only” যা বানায় তা নিখুঁত (precision ০.৯৫), কিন্তু আসল ডেটার অর্ধেক কখনো আসে না (recall ০.৪৮)। “blurry” সব দল ঢাকে (recall ০.৯৭), কিন্তু বেশিরভাগ নমুনা আসল এলাকার বাইরে (precision ০.৩০). FD বলে না কোন ধরনের খারাপ; ঝাপসাটির FD বরং অনেক ছোট।

সীমা: (১) নমুনার আকারে পক্ষপাত: পর্ব ৮১-এ আসল বনাম আসল ছবিতেই n = ২৫০-এ FID ৪৫.৪৭, n = ১০,০০০-এ ২.৫৩; তাই একই n-এ তুলনা। (২) Feature ImageNet-এ শেখা; অন্য ডোমেইনে অর্থ দুর্বল। (৩) মুখস্থ করা ধরে না; নিকটতম training ছবি দেখা লাগে। Prompt-এর সঙ্গে মিলে CLIP score, শেষ বিচারে মানুষ।

পরীক্ষক যা খোঁজেন: সংজ্ঞা আর সূত্র (১); তিনটি সীমা (২); precision/recall-এর যুক্তি, উদাহরণসহ (২)। পর্ব ৮১ · পর্ব ৭৭

যেখানে নম্বর কাটে: ভিন্ন n বা ভিন্ন feature extractor-এর FID তুলনা; “FID কম, তাই বৈচিত্র্য বেশি” লেখা।

৭ · অংশ চ — LLM serving আর deploy-এর trade-off (মডিউল ১৩)

রিভিশন: পর্ব ৬৫ (token, খরচ, latency), পর্ব ৮৩ (serving), পর্ব ৮৪ (deploy), পর্ব ৮৫ (system design). Latency আর সারির সাধারণ তত্ত্ব System Design কোর্সের লিখিত ও ভাইভা পাতায়।

চ-০১একটি LLM chatbot serve করতে latency, throughput, খরচ আর মানের মধ্যে trade-off ব্যাখ্যা করুন: TTFT আর TPOT, batching-এর ধরন, KV cache-এর memory, quantization আর prefix caching. একটি GPU-তে চাপ বাড়লে আপনি কী কী বদলাবেন? — ১০ নম্বর (কঠিন)

দুই ধাপ, দুই সীমা: Prefill (পুরো prompt একসঙ্গে) compute-bound, এটি TTFT ঠিক করে; decode (এক token করে) memory-bound, এটি TPOT. পর্ব ৬৫-এর CPU run-এ prefill প্রায় ১৯৭ token/s, decode প্রায় ১০.৩ token/s. বাংলায় token বেশি (গ-০৪), তাই দুটিই বাড়ে।

কৌশললাভদাম
Continuous batchingশেষ হওয়া অনুরোধের জায়গায় সঙ্গে সঙ্গে নতুন; TTFT অনেক কমজটিল scheduler, memory-র হিসাব
বড় batchThroughput বাড়েপ্রতি অনুরোধের TPOT বাড়ে
KV cache int8, GQA modelএকসঙ্গে বেশি অনুরোধমানের সামান্য ক্ষতি, যাচাই লাগে
Weight quantizationকম memory, প্রায়ই দ্রুত decodeমান কমতে পারে, বাংলায় আলাদা করে মাপা দরকার
Prefix cachingএকই system prompt-এ TTFT অনেক কমCache-এর memory; prefix হুবহু এক হতে হবে
ছোট model-এ routingসস্তা আর দ্রুতকঠিন প্রশ্নে মান কম; fallback লাগে

মাপা প্রমাণ: পর্ব ৮৩-এর simulation-এ যন্ত্রের ক্ষমতার কিনারে (λ = ১.০) TTFT-এর p50 static batching-এ ১৭.৮১ s, continuous-এ ৩.৪৯ s, একই যন্ত্রে শুধু scheduling বদলে; তবু continuous-এর p95 ১২.১০ s. সেখানে ৮ GiB-এর যন্ত্রে Qwen2.5-1.5B-এ ২,০৪৮ token-এর ৭৯টি অনুরোধ আঁটে, ৮,১৯২-এ মাত্র ১৯টি; KV int8-এ দ্বিগুণ। পর্ব ৬৫-এ ২,০৪৭ token-এর একই prefix cache থেকে এলে TTFT ৮.০৫ থেকে ০.৩৭ সেকেন্ড, উত্তর হুবহু এক।

চাপ বাড়লে, ক্রমে: (১) SLO ঠিক করে মাপুন: TTFT আর TPOT-এর p50/p95; Little-এর সূত্র L = λW দিয়ে সারিতে গড় অনুরোধ। (২) Continuous batching আর prefix caching. (৩) Context আর উত্তরের দৈর্ঘ্যে সীমা। (৪) Quantization, মান যাচাই করে। (৫) সহজ প্রশ্ন ছোট model-এ। (৬) তারপর আরও GPU, আর সীমার বাইরে load shedding.

পরীক্ষক যা খোঁজেন: prefill/decode আর দুই metric (২); অন্তত চারটি কৌশল, লাভ ও দামসহ (৪); প্রমাণ বা হিসাব (২); চাপ বাড়লে ক্রমিক পরিকল্পনা (২)। পর্ব ৮৩ · পর্ব ৬৫ · পর্ব ৫৯ · পর্ব ৮৫

যেখানে নম্বর কাটে: শুধু গড় latency (p95 বাদ); throughput বাড়লে latency-ও কমে বলে ধরা; quantization-এর পরে মান না মাপা।

৮ · ভাইভা — কৌশল, ২৪টি প্রশ্ন, ফাঁদ, সৎ উত্তর আর AI

পরীক্ষক আপনার শেষ বাক্য থেকে পরের প্রশ্ন বানান; দুটি প্রায় নিশ্চিত: “এর দাম কী?” আর “কীভাবে মেপেছেন?” তাই প্রথম উত্তরেই একটি দাম আর একটি যাচাইয়ের পথ রাখুন।

কী (এক বাক্য) → কেন কাজ করে (একটি সূত্র বা কারণ) → দাম বা সীমা, আর কীভাবে মাপবেন

“KV cache কী?” — “Decoding-এ আগের token-গুলোর key আর value জমা রাখা, যাতে প্রতি ধাপে আবার হিসাব না লাগে (কী)। প্রতি নতুন token-এ কাজ O(T²d) থেকে O(Td)-তে নামে (কেন)। দাম memory: T আর batch-এর সঙ্গে রৈখিকভাবে বাড়ে, তাই একসঙ্গে কতজনকে serve করা যাবে তা এটিই ঠিক করে (সীমা)।”

প্রতিটি প্রশ্ন-উত্তরের পর
পরীক্ষক
প্রার্থী (মূল কথা)
কেন ভালো উত্তর
জোড়া পর্ব
  1. শুরু। সূত্রের কারণ: variance. মুখস্থ বাক্য নয়।
  2. সংখ্যায়। একটি মাপা ফল বললে পরীক্ষক বোঝেন আপনি নিজে দেখেছেন।
  3. জটিলতা। O(T²) বলার সময় সময় আর memory দুটিই।
  4. সূক্ষ্ম পার্থক্য। FlashAttention exact; sliding window নয়। এখানেই অনেকে নম্বর হারান।
  5. স্তর বদল। Training-এর প্রশ্ন থেকে serving-এর প্রশ্নে যাওয়া স্বাভাবিক; প্রস্তুত থাকুন।
  6. ভারসাম্য। প্রতিটি কৌশলের দাম আর মান যাচাইয়ের কথা নিজে থেকে।

২৪টি ছোট প্রশ্ন — মুখে বলার উত্তর আর পরের প্রশ্ন

জোরে উত্তর বলুন, তারপর প্রশ্নে চেপে মেলান; প্রতিটিতে ৩০ সেকেন্ডের বেশি নয়। “পরের প্রশ্ন”-এর উত্তরও মুখে বলুন।

Network-এর ভিত্তি আর training (পর্ব ১–১৯)

ভ-০১Universal approximation থাকলে গভীর network কেন লাগে? (মাঝারি)

উপপাদ্যটি শুধু অস্তিত্ব বলে: এক hidden layer-এ পর্যাপ্ত unit থাকলে যেকোনো continuous function কাছাকাছি আনা যায়, কিন্তু unit-এর সংখ্যা বিশাল হতে পারে। কিছু function গভীর network অনেক কম unit-এ প্রকাশ করে (depth separation). পর্ব ৬

পরের প্রশ্ন: উপপাদ্য কি বলে model সেটি শিখবে? — না; optimization আর generalization আলাদা প্রশ্ন।

ভ-০২Training শুরুর loss দেখে কী বোঝেন? (সহজ)

K শ্রেণির cross-entropy-তে এলোমেলো শুরুতে loss প্রায় ln K (তিন শ্রেণিতে প্রায় ১.০৯৯)। অনেক বেশি হলে init, label বা loss-এর input-এ গোলমাল। পর্ব ১৮

পরের প্রশ্ন: তারপর কোন sanity check? — একটি ছোট batch-কে প্রায় শূন্য loss-এ overfit করানো; না পারলে কোডে বাগ।

ভ-০৩BatchNorm আর LayerNorm-এর পার্থক্য? (মাঝারি)

BatchNorm একটি feature-কে batch জুড়ে normalize করে, training আর eval-এ আচরণ আলাদা (running statistics); LayerNorm প্রতিটি উদাহরণের feature জুড়ে, batch-নিরপেক্ষ, তাই Transformer-এ। পর্ব ১৪

পরের প্রশ্ন: batch ২ হলে BatchNorm? — গড় আর variance অস্থির; GroupNorm বা LayerNorm.

ভ-০৪Dropout eval-এ বন্ধ কেন, আর inverted dropout কী? (সহজ)

Training-এ এলোমেলো unit বন্ধ করে বাকিগুলোকে ১/(১ − p) দিয়ে বড় করা হয়, তাই eval-এ কিছু করতে হয় না। model.eval() ভুললে অনুমান এলোমেলো। পর্ব ১৬

পরের প্রশ্ন: eval-এও dropout রাখলে লাভ? — MC dropout: কয়েকবার চালিয়ে ছড়ানো থেকে অনিশ্চয়তার একটি মোটা আন্দাজ।

CNN, sequence আর attention (পর্ব ২০–৩৮)

ভ-০৫1×1 convolution কী কাজে লাগে? (সহজ)

প্রতিটি pixel-এ channel-গুলোকে একটি matrix দিয়ে মেশায়; channel কমানো বা বাড়ানো যায়। ResNet-50-এর bottleneck-এ এভাবেই parameter ResNet-18-এর মাত্র দ্বিগুণের একটু বেশি। পর্ব ২২

পরের প্রশ্ন: depthwise separable-এর খরচ? — সাধারণ conv-এর প্রায় ১/C + ১/k² ভাগ; পর্ব ২২-এ ১১% থেকে ১৭%.

ভ-০৬Transfer learning-এ কখন শুধু head, কখন পুরো fine-tune? (মাঝারি)

ডেটা কম আর ডোমেইন কাছাকাছি হলে frozen backbone-এ শুধু head; ডেটা বেশি বা ডোমেইন দূরে হলে পুরো network, ছোট lr-এ। পর্ব ২৩

পরের প্রশ্ন: পুরো fine-tune-এর ঝুঁকি? — Catastrophic forgetting আর অল্প ডেটায় overfit; শুরুর weight-এর দিকে টান বা স্তরভেদে lr.

ভ-০৭LSTM-এর forget-gate bias কেন ধনাত্মক দিয়ে শুরু করা হয়? (মাঝারি)

bias ০-এ f প্রায় ০.৫, প্রতি ধাপে স্মৃতি অর্ধেক; পর্ব ২৯-এ তখন LSTM সাধারণ RNN-এর চেয়েও খারাপ ছিল। পর্ব ২৯

পরের প্রশ্ন: খুব বড় bias (৩)? — সংকেত জমে বাড়তে পারে; সেখানে ১০০ ধাপে gradient ২০-এ উঠেছিল।

ভ-০৮Teacher forcing কী, আর exposure bias কেন হয়? (মাঝারি)

Training-এ decoder আগের ধাপের আসল token পায়, নিজের অনুমান নয়; চালানোর সময় নিজের ভুলের ওপর চলতে হয়, যা সে শেখেনি। পর্ব ৩০

পরের প্রশ্ন: প্রতিকার? — Scheduled sampling, বা বড় ডেটা আর ভালো decoding; সমস্যাটি কতটা গুরুতর, তা নিয়ে মতভেদ আছে।

ভ-০৯Positional encoding ছাড়া Transformer কী হারায়? (সহজ)

Self-attention permutation-equivariant: token-এর ক্রম বদলালে output-ও একইভাবে বদলায়, “কোনটি আগে” জানে না। পর্ব ৩৮-এ position ছাড়া ViT-এর কাছে ছবি patch-এর থলে। পর্ব ৩৪

পরের প্রশ্ন: RoPE-এর সুবিধা? — Query আর key ঘুরিয়ে আপেক্ষিক দূরত্ব score-এ আনে; লম্বা context-এ বাড়াতে কৌশল লাগে।

NLP, LLM আর খাপ খাওয়ানো (পর্ব ৩৯–৫৯)

ভ-১০দুটি LLM-এর perplexity কখন সরাসরি তুলনা করা যায় না? (মাঝারি)

Perplexity = exp(প্রতি token-এ গড় negative log-likelihood); tokenizer আলাদা হলে “token”-এর মাপ আলাদা, তাই তুলনা অর্থহীন। তখন bits per byte বা character. পর্ব ৪৬

পরের প্রশ্ন: কম perplexity মানেই ভালো chatbot? — না; নির্দেশ মানা, সত্যতা আর নিরাপত্তা আলাদা করে মাপতে হয়।

ভ-১১বাংলায় BLEU-র বদলে chrF কেন? (সহজ)

বাংলায় বিভক্তি আর সমাস বেশি, পুরো শব্দের n-gram সহজে মেলে না; chrF অক্ষরের n-gram মেলায়, তাই আংশিক মিলও নম্বর পায়। পর্ব ৪৫

পরের প্রশ্ন: তবু কেন মানুষের বিচার? — Metric অর্থ আর সাবলীলতা পুরো ধরে না; বিচারকদের মিল kappa দিয়ে মাপা।

ভ-১২Temperature আর top-p কী বদলায়? (সহজ)

Temperature logit-কে ভাগ করে বণ্টন চ্যাপ্টা বা তীক্ষ্ণ করে; top-p সবচেয়ে ছোট সেট রাখে যার মোট সম্ভাবনা অন্তত p, বাকি কেটে আবার normalize. পর্ব ৫০

পরের প্রশ্ন: greedy-তে temperature-এর প্রভাব? — নেই; argmax একই থাকে। তবে library-র ডিফল্টে sampling চালু থাকতে পারে (পর্ব ৫২).

ভ-১৩Scaling law কী বলে, আর কী বলে না? (মাঝারি)

Loss parameter, ডেটা আর compute-এর সঙ্গে প্রায় power law মেনে কমে। নির্দিষ্ট কাজে কখন কোন ক্ষমতা আসবে তা বলে না; “emergent” লাফের একাংশ metric-এর ফল বলে যুক্তি আছে। পর্ব ৫১

পরের প্রশ্ন: সব বাজেট parameter-এ দিলে? — Compute-optimal বিশ্লেষণে (Chinchilla) parameter আর token একসঙ্গে বাড়ানোই ভালো দেখা গিয়েছিল।

ভ-১৪4-bit quantization-এর পর কী যাচাই করবেন? (মাঝারি)

নিজের eval set-এ আগের আর পরের মান, memory আর গতি। পর্ব ৫৫-এ embedding 4-bit হয়নি বলে memory ৬২৯ থেকে মাত্র ৩৪৪ MiB-এ নেমেছিল। পর্ব ৫৯ · পর্ব ৫৫

পরের প্রশ্ন: per-channel কেন per-tensor-এর চেয়ে ভালো? — প্রতিটি channel-এর নিজের scale, তাই একটি outlier সবার নির্ভুলতা নষ্ট করে না।

Prompt, RAG, agent আর নিরাপত্তা (পর্ব ৬০–৭৩)

ভ-১৫Few-shot উদাহরণের ক্রম কি ফল বদলায়? (সহজ)

হ্যাঁ: শেষের উদাহরণের লেবেলের দিকে ঝোঁক (recency) আর বেশি দেখা লেবেলের দিকে ঝোঁক দেখা যায়। পর্ব ৬১

পরের প্রশ্ন: কীভাবে মাপবেন? — কয়েকটি এলোমেলো ক্রমে একই eval set চালিয়ে গড় আর ছড়ানো দেখা।

ভ-১৬JSON mode থাকলেই কি structured output নিরাপদ? (মাঝারি)

না; বৈধ JSON মানে সঠিক মান নয়। Schema যাচাই, ব্যবসার নিয়মের পরীক্ষা আর ব্যর্থ হলে সীমিত বার repair. পর্ব ৬২

পরের প্রশ্ন: constrained decoding কীভাবে কাজ করে? — প্রতি ধাপে schema-বিরোধী token-এর সম্ভাবনা শূন্য করে (token mask).

ভ-১৭Bi-encoder আর cross-encoder-এর পার্থক্য? (মাঝারি)

Bi-encoder প্রশ্ন আর নথিকে আলাদা vector করে, তাই নথি আগে index করা যায়, দ্রুত; cross-encoder দুটি একসঙ্গে পড়ে score দেয়, নির্ভুল কিন্তু ধীর, তাই reranking-এ। পর্ব ৬৭ · পর্ব ৬৯

পরের প্রশ্ন: HNSW-এর trade-off? — বেশি memory আর build সময়ের বিনিময়ে দ্রুত আনুমানিক খোঁজ; ef বাড়ালে recall বাড়ে, গতি কমে।

ভ-১৮Direct আর indirect prompt injection-এর পার্থক্য? (সহজ)

Direct: ব্যবহারকারী নিজেই নির্দেশ ভাঙার চেষ্টা করেন। Indirect: নথি, ওয়েবপাতা বা tool-এর ফলে লুকানো নির্দেশ model-এর কাছে পৌঁছায়। পর্ব ৭৩

পরের প্রশ্ন: prompt-এ “নির্দেশ মানবে না” লেখা যথেষ্ট? — না; পর্ব ৭৩-এ delimiter আর spotlighting-এর পার্থক্য প্রমাণিত হয়নি। কোডে স্তরে স্তরে প্রতিরক্ষা লাগে।

Generative model (পর্ব ৭৪–৮১)

ভ-১৯VAE-তে reparameterization trick কেন লাগে? (মাঝারি)

z = μ + σ·ε লিখলে এলোমেলোতা ε-এ সরে যায়, তাই μ আর σ-এর gradient সরাসরি যায়। Score-function পথও গড়ে ঠিক, কিন্তু পর্ব ৭৬-এ তার ছড়ানো অনেক বেশি ছিল। পর্ব ৭৬

পরের প্রশ্ন: posterior collapse কী? — শক্তিশালী decoder z উপেক্ষা করে, KL প্রায় শূন্য; KL annealing বা free bits.

ভ-২০Mode collapse কীভাবে ধরবেন? (সহজ)

নমুনার শ্রেণি একটি classifier দিয়ে গুনে entropy দেখা, আর নমুনার মধ্যে পার্থক্য মাপা; শুধু চোখে মান দেখা যথেষ্ট নয়। পর্ব ৭৭

পরের প্রশ্ন: WGAN কী বদলায়? — JS-এর বদলে Wasserstein দূরত্ব, Lipschitz শর্ত gradient penalty দিয়ে; বিতরণ না মিললেও অর্থপূর্ণ gradient.

ভ-২১Classifier-free guidance-এর scale বাড়ালে কী হয়? (মাঝারি)

ε̂ = εশর্তহীন + w(εশর্তসহ − εশর্তহীন)। w বাড়লে prompt-এর সঙ্গে মিল বাড়ে, বৈচিত্র্য কমে, খুব বড় হলে রং আর গঠন অস্বাভাবিক। পর্ব ৮০

পরের প্রশ্ন: latent-এ diffusion কেন? — VAE-র ছোট latent-এ কাজ করলে প্রতিটি ধাপ অনেক সস্তা।

Multimodal, serving আর deploy (পর্ব ৮২–৮৬)

ভ-২২CLIP কীভাবে শেখে? (মাঝারি)

ছবি আর লেখার জোড়ায় contrastive loss: মেলা জোড়ার embedding কাছে, batch-এর বাকিগুলো দূরে। তাই লেখার prompt দিয়ে zero-shot শ্রেণিবিভাগ সম্ভব। পর্ব ৮২

পরের প্রশ্ন: vision-language model-এর বিশেষ hallucination? — ছবিতে নেই এমন বস্তুর বর্ণনা (object hallucination).

ভ-২৩ONNX-এ export-এর পর কী যাচাই করবেন? (সহজ)

একই input-এ PyTorch আর ONNX Runtime-এর output (সহনসীমাসহ), dynamic shape (ভিন্ন batch আর দৈর্ঘ্য), আর লক্ষ্য যন্ত্রে latency. পর্ব ৮৪

পরের প্রশ্ন: quantize করলে? — Eval set-এ মান আবার মাপা; শুধু output মেলানো যথেষ্ট নয়।

ভ-২৪একটি GenAI app-এ guardrail কোথায় কোথায় বসে? (মাঝারি)

Input যাচাই আর PII মাস্ক, retrieval-এ উৎসের filter, tool-এর অনুমতি, output-এর পরীক্ষা (সংখ্যা, লিংক, canary), rate limit আর log. পর্ব ৮৫ · পর্ব ৮৬

পরের প্রশ্ন: model বা সার্ভিস বন্ধ হলে? — Fallback model বা নির্দিষ্ট বার্তা (graceful degradation), timeout আর সীমিত retry.

সাধারণ ফাঁদ — যেসব কথায় নম্বর কাটে

ফাঁদের কথাকেন ভুলঠিক কথা
“Model বোঝে” বা “চিন্তা করে”দাবিটি যাচাইযোগ্য নয়“পরের token-এর সম্ভাবনা থেকে লেখে”
“FlashAttention আনুমানিক”ফল exactMemory-র পথ বদলায়, গণিত নয়
“Fine-tune করলে নতুন তথ্য জানবে”তথ্য মুখস্থ করানো অনির্ভরযোগ্যজ্ঞানের জন্য RAG
“Reward accuracy ১.০, তাই model ভালো”Proxy আর আসল মান আলাদাউত্তর নিজে মাপা
“৪০টি প্রশ্নে ২ পয়েন্ট জয়”CI শূন্য ছোঁয়জোড়া তুলনা, CI
“FID কম, তাই সব ঠিক”মান আর বৈচিত্র্য মেশানোPrecision আর recall আলাদা
বানানো benchmark-সংখ্যা বা সালএকটি ভুলেই সব উত্তরে সন্দেহউৎস বলুন, না জানলে স্বীকার

না জানলে — সৎভাবে উত্তর

আংশিক জানলে বলুন “পুরো নিশ্চিত নই; যা জানি, GQA-তে কয়েকটি query head একটি K, V জোড়া ভাগ করে; মানের প্রভাব নিজে মাপিনি।” সূত্র ভুলে গেলে সংজ্ঞা থেকে বের করুন। Model-এর আকার বা benchmark-সংখ্যা বানাবেন না; নিজের ফল বললে বলুন কোন model, কোন ডেটা, কয়টি run.

AI-এর যুগে — AI-কে কড়া পরীক্ষক বানান

AI সহকারী প্রশ্ন বানাতে আর উত্তর যাচাই করাতে কাজে লাগে, কিন্তু প্রায়ই পুরোনো বা বানানো API দেয় (transformers, peft, trl-এর বাদ পড়া argument), shape আর dtype গুলিয়ে ফেলে, model.eval() বা zero_grad ভুলে যায়, test ডেটা leak করে, একটি ভাগ্যবান run-কে ফল বলে, LLM “বোঝে” বলে বাড়িয়ে বলে, আর বিশ্বাসযোগ্য কিন্তু ভুল derivation বা citation লেখে। তাই তাকে পরীক্ষক বানান, আর প্রতিটি দাবি official docs আর নিজের ছোট run-এ মেলান; ব্যক্তিগত ডেটা বা key পেস্ট করবেন না।

তুমি একজন কড়া পরীক্ষক, বিষয় Deep Learning, NLP আর Generative AI. আমি torch 2.15 আর transformers 5.22 দিয়ে পড়ছি। নিচে একটি ১০ নম্বরের প্রশ্ন আর আমার উত্তর দিলাম। [প্রশ্ন] [আমার উত্তর — derivation-এর প্রতিটি ধাপ, ছক থাকলে লিখিত বর্ণনা] ১. মার্ক-স্কিম বানাও: দাবি ও অনুমান, ধাপ, প্রমাণ, সীমা — কোনটিতে কত। তারপর নম্বর দাও। ২. প্রতিটি সমান-চিহ্ন আর প্রতিটি matrix-এর shape আলাদা করে যাচাই করো; কোথায় transpose, চিহ্ন বা ভাগ ভুল, লাইন ধরে বলো। ৩. আমার দেওয়া কোনো সংখ্যা বা ফলের উৎস না থাকলে চিহ্নিত করো; নিজে কোনো benchmark-সংখ্যা, paper বা সাল বানাবে না। ৪. একটি ছোট NumPy পরীক্ষার কথা বলো, যা দিয়ে আমি সূত্রটি নিজে মেলাতে পারি; ফলটি নিজে লিখে দিও না। ৫. কোনো library API এই version-এ পুরোনো বা অস্তিত্বহীন হলে বলো, আর কোন official docs-এর পাতায় দেখব তার নাম দাও। ৬. "model বোঝে" ধরনের বাড়িয়ে বলা দাবি, leakage বা একটি run থেকে সাধারণ সিদ্ধান্ত থাকলে ধরো। ৭. নিশ্চিত না হলে "নিশ্চিত নই" লেখো। ৮. শেষে "এর দাম কী?" আর "কীভাবে মেপেছেন?" ধরনের তিনটি ভাইভা প্রশ্ন দাও, উত্তর ছাড়া।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি RAG সহায়কের মূল্যায়নের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. প্রশ্নের ধরন ঠিক করা: উত্তরযোগ্য, উত্তরহীন, বহু নথি, সংখ্যা, Banglish
  2. প্রতিটি প্রশ্নে gold নথি আর gold উত্তর লেখা
  3. Retriever আলাদা করে মাপা: recall@k, MRR
  4. Oracle context দিয়ে generator আলাদা করে মাপা
  5. দুই সংস্করণের জোড়া তুলনা, bootstrap CI-সহ
  6. Release gate আর চালুর পরে নমুনা ধরে নজরদারি

(সহজ) একটি উদাহরণে logits z, softmax সম্ভাবনা p আর one-hot লেবেল y. Cross-entropy loss L = −∑ yc log pc-এর ∂L/∂z কী?

  • p − y
  • y − p
  • p(১ − p)
  • −log p

(মাঝারি) একটি residual block-এর Jacobian I + J. J-এর সব singular value ০.০১ থেকে ০.৩৩-এর মধ্যে। I + J-এর singular value সম্পর্কে কী নিশ্চিত বলা যায়?

  • J-এর মতোই ০.০১ থেকে ০.৩৩
  • ০.৬৭ থেকে ১.৩৩-এর মধ্যে
  • সবগুলো ঠিক ১
  • ১.০১ থেকে ১.৩৩-এর মধ্যে

(মাঝারি) DPO training-এর একদম শুরুতে policy আর reference model হুবহু এক। β = ০.১ হলে যেকোনো একটি preference জোড়ার DPO loss কত?

  • ০
  • β × ln ২ = ০.০৬৯
  • ln ২ ≈ ০.৬৯৩
  • জোড়াটির ওপর নির্ভর করে

(মাঝারি) একই ৪০টি প্রশ্নে RAG-এর দুই সংস্করণ: B ৮টিতে A-এর চেয়ে ভালো, ৩টিতে খারাপ, মোট পার্থক্য +০.১২৫; জোড়া bootstrap-এর ৯৫% CI [−০.০২৫, +০.২৭৫]. কোন সিদ্ধান্ত যুক্তিসঙ্গত?

  • B নিশ্চিতভাবে ১২.৫ পয়েন্ট ভালো
  • A আর B সমান, প্রমাণিত
  • জোড়া তুলনা ভুল, দুটি আলাদা গড় তুলনা করা উচিত
  • উন্নতি প্রমাণিত নয়; আরও প্রশ্নে আবার মাপা দরকার

(মাঝারি) একটি ছবির generator-এর precision ০.৯৫ আর recall ০.৪৮ (k-NN পদ্ধতিতে, আসল ডেটার বিপরীতে)। সবচেয়ে সম্ভাব্য সমস্যা কী?

  • নমুনা ঝাপসা, আসল এলাকার বাইরে
  • কিছু mode বাদ পড়ছে (mode dropping)
  • Training ছবি হুবহু মুখস্থ
  • কোনো সমস্যা নেই

(কঠিন) প্রায় সমান parameter-এর একটি ছোট CNN আর একটি ছোট ViT ১,০০০টি ছবিতে শেখানো হলো; CNN ৮৩%, ViT ৭৫%. পুরো ৬০,০০০ ছবিতে ফারাক ৩ পয়েন্টের নিচে নামে। সবচেয়ে ভালো ব্যাখ্যা কোনটি?

  • CNN-এর inductive bias অল্প ডেটায় ডেটার কাজ করে দেয়
  • ViT-এর parameter বেশি, তাই overfit
  • Attention ছবি মডেল করতে পারে না
  • CNN-এর pooling-ই একমাত্র কারণ

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব শব্দ এখানে একসাথে:

মনে রাখুন

  1. কাঠামোই নম্বর: দাবি → shape-সহ চিহ্ন → কারণসহ ধাপ → ছোট সংখ্যা বা মাপা ফল → সীমা; তুলনায় একই সারির ছক আর “কখন কোনটি”.
  2. Derivation-এর চাবি: softmax-CE-তে p − y; backprop-এ Hᵀδ2 আর (δ2W2ᵀ) ⊙ f′; residual-এ I + J; DPO-তে π*-কে উল্টে Z(x) কাটা।
  3. তুলনায় দাম: Transformer-এর O(১) পথের দাম O(T²); LoRA-র সাশ্রয় memory-র একাংশ; diffusion-এর মানের দাম অনেক ধাপ।
  4. নকশায় স্তর আর প্রমাণ: RAG-এ retriever, generator, end-to-end আলাদা; সিদ্ধান্ত জোড়া তুলনা আর CI দিয়ে; LLM বিচারক kappa দিয়ে যাচাই।
  5. ভাইভায় তিন বাক্য: কী → কেন → দাম বা কীভাবে মাপবেন; মাপা সংখ্যার উৎস বলুন, কিছু বানাবেন না।

পরের পর্বে: পর্ব ৯০ (Deep learning coding ইন্টারভিউ — NumPy আর PyTorch দিয়ে নিজে লেখা)-এ এখানকার derivation-গুলো কোডে নামবে: MLP-এর backward, attention-এর mask, আর training loop-এর বাগ খোঁজা।

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

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান