Perceptron — একক নিউরন
এই পাঠে যা শিখবেন
- একটি কৃত্রিম নিউরন কীভাবে গাণিতিকভাবে কাজ করে — ওজন, bias, activation
- Perceptron-এর ইতিহাস ও কেন এটিকে DL-এর ভিত্তি বলা হয়
- Perceptron learning rule — কীভাবে নিজে নিজে ওজন adjust করে
- NumPy ও PyTorch দিয়ে নিজের হাতে একটি perceptron বানানো
১ · কৃত্রিম নিউরন — মস্তিষ্কের অনুপ্রেরণায়
মানুষের মস্তিষ্কে ৮৬ বিলিয়ন নিউরনNeuronমস্তিষ্কের মৌলিক একক — অন্য নিউরন থেকে সংকেত গ্রহণ করে, যোগ করে, ও threshold পেরোলে নিজে fire করে। কৃত্রিম নিউরন এই behavior-এর গাণিতিক রূপ। আছে। প্রতিটি নিউরন অনেকগুলো ইনপুট নেয় (dendrite-এ), যোগ করে, এবং একটা সীমা পেরোলে নিজে fire করে (axon-এ সংকেত পাঠায়)। ১৯৪৩ সালে McCulloch ও Pitts প্রথম এই idea-কে গণিতে রূপ দেন। ১৯৫৮-তে Frank Rosenblatt তা থেকে তৈরি করলেন perceptron — প্রথম "শেখা যায়" এমন কৃত্রিম নিউরন।
১) ইনপুট ভেক্টর: $\mathbf{x} = (x_1, x_2, \ldots, x_n)$ — যেমন একটি ছবির পিক্সেল।
২) ওজন ভেক্টর: $\mathbf{w} = (w_1, w_2, \ldots, w_n)$ — প্রতিটি ইনপুট কতটা গুরুত্বপূর্ণ।
৩) Bias: $b$ — একটি threshold shift। নিউরন সহজে বা কঠিনে fire করবে কিনা তা নিয়ন্ত্রণ করে।
২ · Perceptron-এর সূত্র
একটি perceptron-এর আউটপুট ক্যালকুলেট হয় দু'টি ধাপে।
ধাপ ১ — ওজনযুক্ত যোগফল (linear combination):
$$z = w_1 x_1 + w_2 x_2 + \ldots + w_n x_n + b = \mathbf{w} \cdot \mathbf{x} + b$$
ধাপ ২ — Activation (step function):
$$y = \begin{cases} 1 & \text{যদি } z \geq 0 \\ 0 & \text{যদি } z < 0 \end{cases}$$
৩ · একটি বাস্তব উদাহরণ — AND গেট
Logical AND-এর truth table: দু'টি ইনপুট দু'টোই ১ হলে আউটপুট ১, নাহলে ০। একটি perceptron দিয়ে এটি সমাধান করা যায়। ধরুন $w_1 = 1, w_2 = 1, b = -1.5$।
| $x_1$ | $x_2$ | $z = x_1+x_2-1.5$ | $y$ (step) |
|---|---|---|---|
| 0 | 0 | −1.5 | 0 |
| 0 | 1 | −0.5 | 0 |
| 1 | 0 | −0.5 | 0 |
| 1 | 1 | +0.5 | 1 |
মাত্র তিনটি সংখ্যা ($w_1, w_2, b$) দিয়ে — AND function পুরোপুরি কোডেড।
৪ · Perceptron Learning Rule — কীভাবে শেখে
শুরুতে ওজনগুলো random। প্রতিটি training example দেখে — perceptron নিজের ভুল ঠিক করে। নিয়ম সহজ:
$$w_i \leftarrow w_i + \eta \cdot (y_{\text{true}} - y_{\text{pred}}) \cdot x_i$$
- $\eta$ (eta) = learning rate — কত দ্রুত adjust হবে। সাধারণত ০.১ বা ০.০১।
- যদি prediction সঠিক হয় ($y_{\text{true}} = y_{\text{pred}}$) — ওজন অপরিবর্তিত।
- যদি ভুল হয় — ভুলের দিকে $x_i$-এর মান অনুসারে ওজন adjust হয়।
৫ · NumPy দিয়ে নিজের হাতে Perceptron
import numpy as np
# AND গেট-এর data
X = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([0, 0, 0, 1])
# ওজন ও bias শুরু — random
w = np.random.randn(2) * 0.1
b = 0.0
lr = 0.1
# Perceptron training loop
for epoch in range(10):
for xi, target in zip(X, y):
z = np.dot(w, xi) + b
pred = 1 if z >= 0 else 0
error = target - pred
w += lr * error * xi
b += lr * error
# পরীক্ষা
print("শেষ ওজন:", w)
print("শেষ bias:", b)
for xi in X:
z = np.dot(w, xi) + b
print(f"{xi} -> {1 if z >= 0 else 0}")
৬ · PyTorch দিয়ে আধুনিক রূপ
PyTorch-এ একই perceptron — মাত্র কয়েক লাইনে। nn.Linear হলো ওজন ও bias-এর container, এটি pre-built।
import torch
import torch.nn as nn
# একটি perceptron — 2 ইনপুট, 1 আউটপুট
neuron = nn.Linear(in_features=2, out_features=1)
# input ভেক্টর (batch=1)
x = torch.tensor([[1.0, 1.0]])
# forward pass
z = neuron(x)
y = (z >= 0).float() # step activation
print("ওজন:", neuron.weight)
print("bias:", neuron.bias)
print("z =", z.item())
print("y =", y.item())
nn.Linear(2, 1) মানে — ২টি ইনপুট, ১টি আউটপুট। ভেতরে ২টি ওজন + ১টি bias। আধুনিক DL-এর প্রতিটি neuron এই Linear layer-এর উপর গড়া।
৭ · ইতিহাস ও সীমাবদ্ধতা
- ১৯৫৮: Rosenblatt-এর Mark I Perceptron — ৪০০ পিক্সেলের ক্যামেরা থেকে অক্ষর চিনত। NYT-এ "ভবিষ্যতের ইলেকট্রনিক মানুষ" বলা হয়েছিল।
- ১৯৬৯: Minsky ও Papert তাদের বই "Perceptrons"-এ দেখালেন — single perceptron XOR সমাধান করতে পারে না।
- প্রথম AI Winter (১৯৭৪-১৯৮০): এই সমালোচনার পর neural network research-এ funding বন্ধ।
- ১৯৮৬: Multi-layer perceptron + backpropagation-এর reinvention সব বদলে দেয় — যা পরের পাঠগুলোতে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ মস্তিষ্কের জৈবিক নিউরনের সাথে perceptron-এর কী মিল ও কী অমিল? এই metaphor কতটুকু সঠিক, কতটুকু বিভ্রান্তিকর?
এই প্রশ্নটি AI-এর philosophy-র কেন্দ্রে। "Brain-inspired" শব্দটা প্রায়ই overstated।
মিল (যা সত্যিই inspire করেছিল):
- একাধিক ইনপুট, একটি আউটপুট: জৈবিক নিউরন dendrite-এ অনেক সংকেত পায়, axon-এ একটি পাঠায়।
- Threshold behavior: জৈবিক নিউরন সংকেত যোগ করে — একটা electrical threshold (~ -55 mV) পেরোলেই fire করে। Perceptron-এর step function এই idea-র mathematical version।
- Synaptic strength = ওজন: মস্তিষ্কে synapse-গুলো দুর্বল বা শক্তিশালী হতে পারে। শেখা = synapse adjustment। Perceptron-এর ওজনও তাই।
অমিল (যা গভীর ও গুরুত্বপূর্ণ):
- Action potential continuous না: জৈবিক নিউরন spike train পাঠায় — সময়-নির্ভর ০ বা ১। Perceptron continuous সংখ্যা।
- Learning rule সম্পূর্ণ ভিন্ন: মস্তিষ্ক gradient descent করে না। STDP (spike-timing-dependent plasticity), Hebbian rules — সম্পূর্ণ আলাদা।
- জৈবিক নিউরন অসংখ্য জটিল: ৩০+ ধরনের নিউরন, neurotransmitter-এর বিচিত্রতা, glial cells, neuromodulation — এর কিছুই ANN-এ নেই।
- Energy efficiency: মস্তিষ্ক ২০ watt-এ চলে। GPT-৪ training-এ মেগাওয়াট লাগে।
- Backprop জৈবিকভাবে অসম্ভব: Backpropagation-এর জন্য দরকার ওজনের symmetric path — মস্তিষ্কে এমন কাঠামো নেই।
Metaphor কতটুকু সঠিক?
- "নিউরাল নেটওয়ার্ক" = "মস্তিষ্কের simulation" — এটা marketing হাইপ। বাস্তবে এটি একটি function approximator যার গাণিতিক structure মস্তিষ্কের আসল mechanism থেকে বহু দূরে।
- Yann LeCun, Geoffrey Hinton-রাও স্বীকার করেন — DL শব্দ "neural" বরং historic accident।
- Neuroscience গবেষণায় ANN-এর সাহায্য আছে — কিন্তু একটি ANN সঠিকভাবে মস্তিষ্ক বুঝায় না।
মূল উপলব্ধি: Inspiration ছিল মস্তিষ্ক, কিন্তু DL এখন স্বাধীন ক্ষেত্র। মেটাফর-এ আটকে না থেকে — গণিতই deep learning বুঝতে যথেষ্ট।
প্র ০২ OR ও NAND গেট-এর জন্য $w_1, w_2, b$ কী হতে পারে? AND/OR/NAND সব সম্ভব হলেও XOR কেন একটি perceptron দিয়ে অসম্ভব?
এই প্রশ্নই Minsky-Papert-এর বিখ্যাত সমালোচনার সারমর্ম — এবং multi-layer-এর প্রয়োজনীয়তার বীজ।
সমাধানগুলো:
- OR: $w_1 = 1, w_2 = 1, b = -0.5$ — যেকোনো একটি ১ হলেই $z \geq 0$, আউটপুট ১।
- NAND: $w_1 = -1, w_2 = -1, b = 1.5$ — শুধু (১,১)-তে $z = -0.5 < 0$, আউটপুট ০। বাকি সব ১।
- NOT: $w_1 = -1, b = 0.5$ — single-input perceptron।
কেন এগুলো সম্ভব?
- একটি perceptron হলো একটি linear separator — ২-D-তে একটি সরল রেখা যা space-কে দু'ভাগে ভাগ করে।
- AND-এ — (১,১) point একদিকে, বাকি তিন point আরেকদিকে। একটি রেখা টানলেই হয়।
- OR-এ — (০,০) একদিকে, বাকি তিনটি অন্যদিকে। আবার সম্ভব।
XOR-এ কী ঘটে?
- Truth table: (০,০)→০, (০,১)→১, (১,০)→১, (১,১)→০।
- Plot করলে — ০ ক্লাসের point দু'টি (০,০) ও (১,১) — diagonal-এ। ১ ক্লাসের point (০,১) ও (১,০) — অন্য diagonal-এ।
- একটি সরল রেখা দিয়ে এদের ভাগ করা অসম্ভব। যা perceptron-এর গাণিতিক ক্ষমতার বাইরে।
প্রমাণ (sketch):
- ধরা যাক $w_1 \cdot 0 + w_2 \cdot 0 + b < 0$ ⇒ $b < 0$।
- $w_1 \cdot 1 + w_2 \cdot 0 + b \geq 0$ ⇒ $w_1 \geq -b > 0$।
- $w_1 \cdot 0 + w_2 \cdot 1 + b \geq 0$ ⇒ $w_2 \geq -b > 0$।
- $w_1 \cdot 1 + w_2 \cdot 1 + b < 0$ ⇒ $w_1 + w_2 < -b$ — কিন্তু আমরা প্রমাণ করেছি $w_1 \geq -b$ এবং $w_2 \geq -b$, তাই $w_1 + w_2 \geq -2b > -b$। Contradiction।
মূল উপলব্ধি: Perceptron-এর সীমা = linear separability। বাস্তব জগতের প্রায় সব সমস্যা non-linear। এই কারণেই multi-layer ও non-linear activation দরকার — যা পরের পাঠ।
প্র ০৩ Learning rate $\eta$ কী ভূমিকা রাখে? অনেক বড় বা অনেক ছোট $\eta$-এ কী সমস্যা হয়? Perceptron training-এ সঠিক value কীভাবে বাছবেন?
Learning rate — DL-এর সবচেয়ে গুরুত্বপূর্ণ hyperparameterHyperparameterমডেলের সেই parameters যা training-এর আগে set করা হয় (learning rate, batch size, layer count) — model নিজে শিখে না। ভাল hyperparameter বাছাই = ভাল মডেল।। ভুল মান নিলে — train একদমই হবে না।
$\eta$ অনেক বড় (যেমন ১০):
- প্রতিটি step-এ ওজন বিশাল লাফ দেয়।
- সমাধান-এর কাছে গিয়ে — পেরিয়ে অন্যদিকে চলে যায়।
- Oscillation বা divergence — ওজন infinity-তে স্ফীত হতে পারে।
- Loss curve এলোমেলো — কখনো converge না।
$\eta$ অনেক ছোট (যেমন ০.০০০১):
- প্রতিটি step অতি সামান্য।
- হাজার হাজার epoch লাগে — যা compute-এ ব্যয়বহুল।
- Local minimum-এ আটকে যাওয়ার ঝুঁকি বেশি।
- Practical-এ usable নয়।
Perceptron-এর বিশেষত্ব:
- Perceptron Convergence Theorem অনুযায়ী — যদি ডেটা linearly separable হয়, যেকোনো $\eta > 0$-এ একদিন সমাধান পাবে।
- $\eta$ শুধু কতদ্রুত পাবে তা নির্ধারণ করে।
- Practical-এ ০.০১ থেকে ০.১ ভাল starting point।
$\eta$ বাছাইয়ের কৌশল:
- LR Range Test (Smith ২০১৭): ছোট থেকে বড় $\eta$-এ training run — যেখানে loss দ্রুত কমে কিন্তু diverge করেনি, তার সামান্য নিচে।
- Grid search: [0.001, 0.01, 0.1, 1.0] try করুন।
- Learning rate scheduler: শুরুতে বড়, পরে ছোট — Adam/AdamW automatic এটি করে।
- Validation loss দেখা: training loss না, validation loss-এ ভিত্তি করে decide।
আধুনিক DL-এ:
- Transformer (BERT, GPT) — $\eta$ সাধারণত ১e-৪ থেকে ৫e-৪।
- CNN — সাধারণত ১e-৩ থেকে ১e-২।
- Fine-tuning — মূল pretraining-এর তুলনায় ১০-১০০x ছোট।
মূল উপলব্ধি: $\eta$ একটি art + science combo। ভাল ML engineer "feel" develop করেন কোন domain-এ কী range কাজ করে। এটাই অভিজ্ঞতা।
প্র ০৪ Perceptron-এর step function-এর বদলে continuous activation (যেমন sigmoid) ব্যবহার করলে কী লাভ? কেন আজকের DL-এ step function প্রায় কখনোই ব্যবহার হয় না?
এই প্রশ্নটি modern DL-এর একটি ঐতিহাসিক turning point। উত্তরের কেন্দ্রে — differentiability।
Step function-এর সমস্যা:
- Derivative প্রায় সর্বত্র শূন্য: step function-এর $z = 0$ ছাড়া সব জায়গায় derivative = ০। ০-এ undefined।
- Backpropagation কাজ করে না: Gradient descent-এর জন্য দরকার gradient। Gradient = ০ মানে ওজন কখনো update হবে না।
- Multi-layer training অসম্ভব: একটি single perceptron-এ Rosenblatt-এর rule কাজ করে (special case), কিন্তু stacked perceptrons-এ বিকল্প নেই।
- Information loss: $z = 0.001$ ও $z = 1000$ — দু'টোই output ১। Magnitude হারায়।
Sigmoid যা সমাধান করে:
- $\sigma(z) = 1/(1+e^{-z})$ — সর্বত্র differentiable।
- Derivative: $\sigma'(z) = \sigma(z)(1-\sigma(z))$ — সরল ও non-zero।
- Continuous output ০ থেকে ১ — যা probability হিসেবে interpret করা যায়।
- Backprop possible — পুরো DL revolution-এর গাণিতিক ভিত্তি।
কিন্তু sigmoid-ও আজ অপ্রিয়:
- Vanishing gradient: বড় $|z|$-এ derivative শূন্যের কাছে। Deep network-এ gradient প্রায় শূন্যে নামে।
- Not zero-centered: output ০ থেকে ১, sgn ১ থেকে ০ পরিবর্তন অসম।
- Computationally expensive: exponential calculation slow।
আজকের choice — ReLU:
- $\text{ReLU}(z) = \max(0, z)$ — সরল, দ্রুত।
- Positive region-এ gradient = ১ — vanishing gradient সমাধান।
- Sparse activation — অর্ধেক neuron শূন্য, energy efficient।
- Deep network train করা সম্ভব হলো — DL revolution-এর অপরিহার্য অংশ।
Step function কি একদমই ব্যবহার হয় না?
- Inference-এর সময় final output-এ — class prediction-এ argmax বা threshold এক ধরনের step।
- Spiking Neural Networks (SNN) — যেখানে biological accuracy চাই, সেখানে।
- Quantized networks (INT8 inference) — কিছু special case।
- কিন্তু training-এ — কখনোই না।
মূল উপলব্ধি: Activation function-এর evolution = DL-এর evolution। Step → sigmoid → ReLU → GELU/Swish — প্রতিটি ধাপ নতুন capability খুলেছে। পরবর্তী পাঠ L04-এ এই journey বিস্তারিত।
অনুশীলন
-
হিসাব করুন: একটি perceptron-এর $w_1 = 0.5, w_2 = -0.3, b = 0.1$।
- $\mathbf{x} = (2, 1)$ ইনপুটের জন্য $z$ ও $y$ কত?
- $\mathbf{x} = (-1, 4)$ ইনপুটের জন্য $z$ ও $y$ কত?
- $z = 0.5 \times 2 + (-0.3) \times 1 + 0.1 = 1 - 0.3 + 0.1 = 0.8$, $z \geq 0$ তাই $y = 1$।
- $z = 0.5 \times (-1) + (-0.3) \times 4 + 0.1 = -0.5 - 1.2 + 0.1 = -1.6$, $z < 0$ তাই $y = 0$।
-
NumPy-তে চেষ্টা: উপরের NumPy কোডটি OR গেটের জন্য পরিবর্তন করুন। একই কোড — শুধু target $y = [0, 1, 1, 1]$।
X = np.array([[0,0],[0,1],[1,0],[1,1]]) y = np.array([0, 1, 1, 1]) # OR # বাকি কোড একই # শেষে w1 ≈ w2 ≈ 0.1+, b ≈ -0.05 আশা করুন -
ভাবুন: একটি email spam classifier তৈরিতে — ৩টি input ও তাদের ওজন কী হতে পারে?
উদাহরণ:
- $x_1$ = "ফ্রি" শব্দের সংখ্যা, $w_1 = 1.5$ (positive — spam indicator)
- $x_2$ = sender পরিচিত? (0/1), $w_2 = -2.0$ (পরিচিত হলে spam কম)
- $x_3$ = লিংকের সংখ্যা, $w_3 = 0.8$ (অনেক লিংক spammy)
- $b = -1.0$ (default — spam নয়)
বাস্তবে — production spam filter-এ হাজার হাজার feature ও deep network। কিন্তু idea একই।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ০২ · XOR সমস্যা — কেন এক স্তর যথেষ্ট না পরবর্তী পাঠ Perceptron-এর সীমা — যা multi-layer network-এর জন্ম দেয়।
- AI Foundations · ভেক্টর কী পূর্বশর্ত Perceptron-এ ইনপুট ও ওজন — দু'টোই ভেক্টর। ভিত্তি দুর্বল মনে হলে।
- পাঠ ০৩ · MLP — Multi-Layer Perceptron একাধিক perceptron stack করে — universal function approximator।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।