পাঠ ০৩ · ৪০-এর মধ্যে · মডিউল ১

MLP — Multi-Layer Perceptron

Multi-layer perceptron — stacking neurons
৭ মিনিট পড়া মাঝারি · Intermediate PyTorch

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

  • Multi-Layer Perceptron-এর architecture — input, hidden, output layer
  • একই ইনপুটে অনেক neuron — feature learning কীভাবে কাজ করে
  • XOR-এর সমাধান — হাতে-কলমে ২ hidden neuron দিয়ে
  • PyTorch-এ nn.Sequential দিয়ে একটি MLP বানানো

১ · MLP-র গঠন

একটি Multi-Layer Perceptron — তিন ধরনের স্তরের সমষ্টি:

তিন স্তর

১) Input layer: ডেটা যেমন আছে — পিক্সেল, শব্দ, সংখ্যা।
২) Hidden layer (এক বা একাধিক): ভেতরের গণনা — যেখানে representation শেখা হয়।
৩) Output layer: চূড়ান্ত উত্তর — class probability বা regression value।

প্রতিটি স্তর = একগুচ্ছ neuron। প্রতিটি neuron-এ — পূর্ববর্তী স্তরের প্রতিটি neuron থেকে connection (একে বলে fully connectedFully Connectedএকটি স্তরের প্রতিটি neuron — পরবর্তী স্তরের প্রতিটি neuron-এর সাথে যুক্ত। PyTorch-এ nn.Linear। MLP-র চারিত্রিক বৈশিষ্ট্য।)। প্রতিটি connection-এ একটি ওজন ($w$)।

২ · গাণিতিক রূপ

একটি ২-স্তরের MLP (input + hidden + output)-এর সূত্র:

$$\mathbf{h} = f(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1)$$ $$\mathbf{y} = g(\mathbf{W}_2 \mathbf{h} + \mathbf{b}_2)$$

যেখানে:

  • $\mathbf{x}$ = input ভেক্টর (যেমন size $n$)
  • $\mathbf{W}_1$ = প্রথম ওজন matrix (size $h \times n$, $h$ = hidden neuron সংখ্যা)
  • $\mathbf{b}_1, \mathbf{b}_2$ = bias ভেক্টর
  • $f, g$ = activation function (যেমন ReLU বা sigmoid)
  • $\mathbf{h}$ = hidden representation
  • $\mathbf{y}$ = চূড়ান্ত আউটপুট
Hidden layer ছাড়া — দু'টি consecutive linear operation একসাথে = এখনও linear। Activation function $f$ non-linear হওয়া অপরিহার্য — না হলে যত স্তরই থাকুক, পুরো network = single perceptron-এর সমান।

৩ · XOR সমাধান — হাতে-কলমে

২ hidden neuron দিয়ে XOR সমাধান। নির্দিষ্ট ওজন (নিচের mapping):

  • $h_1 = \text{step}(x_1 + x_2 - 0.5)$ — OR-এর মতো
  • $h_2 = \text{step}(x_1 + x_2 - 1.5)$ — AND-এর মতো
  • $y = \text{step}(h_1 - h_2 - 0.5)$ — "OR কিন্তু AND নয়"
$x_1$ $x_2$ $h_1$ $h_2$ $y$
00000
01101
10101
11110

মূল trick: Hidden layer XOR-এর data-কে এমন একটি space-এ project করে — যেখানে XOR linearly separable। Output layer সেই নতুন space-এ একটি linear decision। L02-এর "feature transformation" idea-র গাণিতিক বাস্তবায়ন।

MLP — তিন স্তর Input → Hidden → Output Input Layer x₁ x₂ x₃ Hidden Layer h₁ h₂ h₃ h₄ Output Layer y₁ y₂ W₁, b₁ + activation W₂, b₂ + activation
একটি 3→4→2 MLP — fully connected। প্রতিটি neuron পূর্ববর্তী সবার সাথে যুক্ত। Hidden layer হলো "feature factory"।

৪ · Hidden Layer = Feature Factory

MLP-র সবচেয়ে গুরুত্বপূর্ণ insight: hidden layer-এ প্রতিটি neuron — input-এর একটি learned feature। Manual feature engineering-এর দরকার নেই — network নিজে শেখে।

  • Image-এ: hidden neuron edge, corner, texture detect করে।
  • Text-এ: hidden neuron syntax pattern, sentiment cue ধরে।
  • Tabular-এ: feature interaction (যেমন age × income) auto-শেখে।
ভাবুন একজন কারিগর তার সাহায্যকারী team-কে শিখাচ্ছেন। প্রতিটি সাহায্যকারী একটি specialized কাজ — কেউ কাঠ কাটে, কেউ পালিশ করে, কেউ assemble করে। কারিগর শুধু সিদ্ধান্ত নেন — কোন output কেমন। Hidden neurons = সাহায্যকারী, output neuron = কারিগর।

৫ · PyTorch-এ MLP — XOR সমাধান

Python · PyTorch
import torch
import torch.nn as nn

# XOR data
X = torch.tensor([[0.,0.],[0.,1.],[1.,0.],[1.,1.]])
y = torch.tensor([[0.],[1.],[1.],[0.]])

# MLP: 2 input -> 4 hidden -> 1 output
model = nn.Sequential(
    nn.Linear(2, 4),
    nn.ReLU(),
    nn.Linear(4, 1),
    nn.Sigmoid()
)

loss_fn = nn.BCELoss()
optim = torch.optim.Adam(model.parameters(), lr=0.05)

# Train
for epoch in range(2000):
    pred = model(X)
    loss = loss_fn(pred, y)
    optim.zero_grad()
    loss.backward()
    optim.step()
    if epoch % 400 == 0:
        print(f"epoch {epoch}: loss = {loss.item():.4f}")

# Test
with torch.no_grad():
    print("\nFinal predictions:")
    for xi, target in zip(X, y):
        p = model(xi).item()
        print(f"{xi.tolist()} -> {p:.3f} (target {target.item()})")

    
Loss দ্রুত কমে — মাত্র ৪ hidden neuron দিয়ে XOR পুরোপুরি শেখে। এটাই multi-layer-এর শক্তি — যা single perceptron কখনোই পারে না।

৬ · MLP-র বহুমুখী রূপ

  • Classification: output layer-এ softmax — class probability।
  • Regression: output layer-এ activation নেই — সরাসরি real number।
  • Auto-encoder: input-এর আকারে output — middle hidden layer = compressed representation।
  • Embedding model: hidden layer = এক ধরনের "concept space"।

৭ · Depth ও Width-এর সিদ্ধান্ত

  • Width বেশি, depth কম: প্রচুর parameter, overfitting risk। Easier training।
  • Depth বেশি, width কম: hierarchical feature, সাশ্রয়ী, কিন্তু vanishing gradient সমস্যা।
  • Practical rule: দু'টোই ধাপে ধাপে বাড়ান — validation loss দেখে।
  • Tabular data: ২-৩ hidden layer যথেষ্ট, প্রতিটিতে ৬৪-২৫৬ neuron।
  • আজকের LLM (Transformer): ৯৬+ স্তর, প্রতিটিতে hidden dim ৪০৯৬-১৬৩৮৪।
MLP DL-এর সবচেয়ে মৌলিক ভবন। CNN, Transformer-ও — internally MLP component-এ ভর্তি। তাই এই পাঠ মাস্টার করলে — পরের সব পাঠ অনেক সহজ।

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

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

প্র ০১ একটি MLP-তে hidden neuron কতগুলো রাখবেন কীভাবে ঠিক করবেন? "Rule of thumb" আছে কি, নাকি শুধু trial-and-error?

এটি practical ML-এর সবচেয়ে ঘনঘন আসা প্রশ্ন। Theory কম, heuristic বেশি।

ঐতিহাসিক rule of thumb:

  • Hidden = (input + output) / 2 — Heaton-এর ১৯৯৭ সালের textbook।
  • Hidden = √(input × output) — geometric mean।
  • Hidden = ২/৩ × input + output — broadly cited।
  • এসব starting point — final answer না।

সঠিক approach:

  • Validation loss-এর ভিত্তিতে: ছোট থেকে বড় size try — যেখানে validation loss সর্বনিম্ন।
  • Capacity ও data-র অনুপাত: ১০০০ training sample-এ ১০,০০০ parameter — overfit guarantee।
  • Width before depth: প্রথম একটি wide layer try করুন, পরে depth যোগ করুন।
  • Bayesian Optimization: Optuna, Ray Tune দিয়ে automatic search।

Modern guidelines:

  • Tabular data: ৩২-৫১২ hidden, ২-৪ স্তর।
  • Image (small): CNN preferable, MLP-এ ১২৮-৫১২।
  • Embedding head: input dim-এর সমান বা ২x।
  • Transformer FFN: hidden dim = ৪x model dim (e.g., 4096 → 16384)।

Overfitting indicator:

  • Training loss কমছে, validation loss বাড়ছে → too many neurons।
  • Both stuck high → too few।
  • Gap বড় → regularization (dropout, weight decay) দরকার।

Bangladesh context:

  • Limited GPU? — start small (৩২-৬৪)।
  • Tabular fintech (bKash) — ১২৮-২৫৬ usually যথেষ্ট।
  • Bangla NLP — pretrained embedding (BanglaBERT) + small MLP head।

মূল উপলব্ধি: Magic number নেই। Validation set + grid search + judgment। ML practitioner-এর core skill।

প্র ০২ "একটি hidden layer-ই যথেষ্ট" — Universal Approximation Theorem এই দাবি করে। তাহলে আজকের ১০০+ স্তরের network-এর প্রয়োজন কেন?

DL-এর গাণিতিক ভিত্তি ও practical reality-র মধ্যে দ্বন্দ্ব। দু'টোই সত্য — কিন্তু পৃথক কারণে।

Universal Approximation Theorem (Cybenko ১৯৮৯, Hornik ১৯৯১):

  • একটি hidden layer-এ যথেষ্ট neuron থাকলে — যেকোনো continuous function arbitrary precision-এ approximate করা যায়।
  • গাণিতিক existence proof — কীভাবে train করবেন তা বলে না।
  • "যথেষ্ট neuron" — কখনো কখনো exponentially বেশি।

Practical সীমা — কেন shallow যথেষ্ট না:

  • (১) Sample efficiency: Deep network-এ কিছু function exponentially কম sample-এ শেখে। Bengio & Delalleau (২০১১)-র প্রমাণ।
  • (২) Hierarchical structure: বাস্তব ডেটার natural hierarchy — image-এ pixel→edge→shape→object। Single layer এই compositional structure পাবে না সহজে।
  • (৩) Parameter efficiency: shallow & wide — billions of parameters। Deep & narrow — millions।
  • (৪) Generalization: Empirical observation — deeper networks better generalize (when trainable)।

উদাহরণ:

  • Parity function ($n$ bit-এর XOR-এর extension): shallow-এ $2^n$ neuron, deep-এ $O(\log n)$।
  • ImageNet classification: shallow MLP-এ ৭০%+ accuracy অসম্ভব। ResNet-152-এ ৭৫%+।
  • Language modeling: BERT (১২ স্তর) → GPT-3 (৯৬ স্তর) → GPT-4 (১২০+) — প্রতিটি যুগে depth বেড়েছে।

Depth-এর সমস্যা ও সমাধান:

  • Vanishing gradient: backprop-এ gradient deep network-এ শূন্য।
  • সমাধান:
    • ResNet (২০১৫): skip connection — gradient highway।
    • Batch normalization — activation distribution stable।
    • Better initialization (He, Xavier)।
    • Better optimizer (Adam, AdamW)।

Theory ও practice-এর মেলবন্ধন:

  • UAT — what is possible (existence)।
  • Modern DL — what is efficient (sample, compute, generalization)।
  • দু'টো আলাদা প্রশ্ন।

মূল উপলব্ধি: "একটি স্তর যথেষ্ট" — গাণিতিকভাবে সত্য, ব্যবহারিকভাবে useless। Depth = efficiency, not just possibility। Bitter Lesson — যত compute, তত depth, তত performance।

প্র ০৩ "Fully connected" layer অনেক costly। কেন CNN, Transformer ইত্যাদি architecture FC layer-এর বদলে specialized layer ব্যবহার করে?

Architecture design-এর কেন্দ্রীয় প্রশ্ন — যা DL-এর evolution বুঝতে অপরিহার্য।

Fully Connected-এর সমস্যা:

  • Parameter explosion: ২২৪×২২৪×৩ ছবি (১৫০,৫২৮ pixel) → ১০২৪ hidden = ১৫০ million parameter — শুধু প্রথম স্তরে।
  • No spatial awareness: ছবিতে কোনো pixel কোথায় তা ভুলে যায়।
  • No shared structure: "edge detector" feature প্রতিটি location-এ আলাদা শিখতে হয়।
  • Translation sensitive: বিড়ালের ছবি ১০ pixel সরালে — সম্পূর্ণ ভিন্ন input।

CNN-এর সমাধান (image-এ):

  • Local connectivity: প্রতিটি neuron শুধু কাছের patch দেখে।
  • Weight sharing: একই kernel পুরো image-এ slide। Parameter কমে drastically।
  • Translation equivariance: বিড়াল যেখানেই থাকুক — same feature।
  • Inductive bias: "image-এ neighboring pixel-গুলো related" — explicitly এনকোডেড।

RNN/LSTM-এর সমাধান (sequence-এ):

  • Temporal weight sharing: একই weight প্রতিটি timestep-এ।
  • Recurrent state: memory of past।
  • Variable length input: FC-এ যা অসম্ভব।

Transformer (Attention)-এর সমাধান:

  • Content-based connection: token-গুলো বিষয়ভিত্তিক attend করে।
  • Long-range dependencies: RNN-এর বিপরীতে।
  • Parallelizable: RNN sequential, transformer parallel। GPU-ফ্রেন্ডলি।

FC কোথায় এখনো ব্যবহার:

  • CNN-এর শেষ স্তর — feature → class score।
  • Transformer-এর FFN block — প্রতিটি attention block-এর পর।
  • Embedding layers।
  • Tabular data — যেখানে spatial/temporal structure নেই।

Inductive bias-এর সাধারণ নিয়ম:

  • ডেটার structure-এর সাথে architecture match করুন।
  • Image → CNN, Sequence → RNN/Transformer, Graph → GNN।
  • সঠিক bias = কম data, কম compute, ভাল generalization।

আজকের trend (২০২৩-পরে):

  • Vision Transformer (ViT) — image-এও Transformer। Inductive bias কমিয়ে data বাড়িয়ে।
  • "Attention is all you need" — প্রায় সব domain-এ।
  • Specialized layer → general architecture + scale।

মূল উপলব্ধি: FC powerful কিন্তু wasteful। Specialized layer = task-specific efficiency। Architecture engineering — DL-এর creative core।

প্র ০৪ একটি MLP train-এর পর কি বুঝবেন কোন hidden neuron কী "শিখেছে"? Interpretability কেন কঠিন এবং কেন গুরুত্বপূর্ণ?

DL-এর সবচেয়ে গভীর challenge — সব ML-এর "black box" সমস্যা।

Interpretability-র সমস্যা:

  • Distributed representation: একটি concept (যেমন "বিড়াল") অনেক neuron-এ ছড়ানো — কোনো একক "বিড়াল neuron" নেই।
  • Polysemanticity: একটি neuron অনেক কিছু represent করে — context-নির্ভর।
  • Non-linearity: শুধু weight দেখে কিছু বোঝা যায় না — interaction matters।
  • Scale: GPT-3-এ ১৭৫ billion parameter। মানুষের পক্ষে inspect করা অসম্ভব।

Interpretation techniques:

  • Activation maximization: কোন input এই neuron সবচেয়ে বেশি fire করায় — visualize।
  • Saliency maps: output gradient relative to input — কোন pixel important।
  • SHAP, LIME: local approximation দিয়ে decision explain।
  • Probing: এই neuron-এর activation দিয়ে কি specific property predict করা যায়?
  • Mechanistic interpretability (Anthropic, ২০২৩+): circuit level — neurons-এর মধ্যে কীভাবে computation ঘটছে।

চমৎকার আবিষ্কার:

  • CNN early layers — edge, texture detector।
  • CNN middle layers — eye, fur, wheel detector।
  • CNN late layers — full object detector।
  • BERT — early layers syntax, middle semantics, late task-specific।
  • GPT — induction heads, early ML circuits (Anthropic)।

কেন interpretability গুরুত্বপূর্ণ:

  • Trust: medical AI, judicial AI — decision কেন বুঝা চাই।
  • Debug: মডেল ভুল করছে — কেন? Bias, spurious feature, data leakage?
  • Compliance: EU AI Act, GDPR — "right to explanation"।
  • Safety: AI alignment — model-এর intention বুঝা।
  • Science: মডেল-এর pattern থেকে নতুন domain knowledge।

Trade-off:

  • Simple model (linear) → interpretable, কিন্তু কম accurate।
  • Deep model → accurate, কম interpretable।
  • "Glass box" methods (decision tree, SHAP) — middle ground।

Bangladesh perspective:

  • Loan default prediction — explainable হওয়া আইনি প্রয়োজন।
  • Medical AI (TB detection, X-ray) — ডাক্তারের validation দরকার।
  • Recommendation — bias audit।

মূল উপলব্ধি: Interpretability শুধু technical না — নৈতিক ও বৈজ্ঞানিক দায়িত্ব। আজকের সবচেয়ে active research area। DL-এর "black box"-এর ভেতরে আলো জ্বালানো — পরবর্তী দশকের মূল চ্যালেঞ্জ।

অনুশীলন

  1. হিসাব: একটি MLP-তে input=10, hidden=20, output=3। মোট ওজন (bias সহ) কতটি?
    • Input → Hidden: $10 \times 20 = 200$ ওজন + $20$ bias = $220$।
    • Hidden → Output: $20 \times 3 = 60$ ওজন + $3$ bias = $63$।
    • মোট: $283$ parameter।
  2. PyTorch: উপরের XOR কোডে hidden neuron সংখ্যা ২ করুন। কী হবে?

    ২ hidden neuron-এ ও XOR সমাধান হবে — কিন্তু training কম stable। কখনো converge করতে বেশি epoch লাগে। অনেক initialization-এ stuck হয়। ৪+ neuron robust।

  3. চিন্তা: Bengali handwritten digit recognition (0-9) — একটি MLP design করুন। Input/hidden/output dimension কত?
    • Input: 28×28 = 784 (flattened)
    • Hidden 1: 256 + ReLU
    • Hidden 2: 128 + ReLU
    • Output: 10 + softmax
    • Loss: CrossEntropy
    • Total parameters ≈ 234K — modest। MNIST-এ ৯৭%+ achievable।
    • আরও ভাল: CNN — যা পরের module।

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

কোড রানার কাজ না করলে? ব্রাউজারে কাজ না করলে Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ, শুধু Gmail অ্যাকাউন্ট লাগে।
পূর্ববর্তী পাঠ
পাঠ ০২ · XOR সমস্যা