Neuron, Activation, Forward Propagation: একটা network ভেতরে কী করে

একটা layer কীভাবে কাজ করে (Series 06, Episode 02)

🟡 INTERMEDIATE Series 06 — Deep Learning with PyTorch Episode 02 / 08

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "layer-এর ভেতরে আসলে কী হয়?"

গত পর্বে Rahim বুঝেছে neural network কখন লাগে। কিন্তু এখন তার মাথায় একটাই প্রশ্ন ঘুরছে — সবাই বলে "layer", "neuron", "activation"; এগুলো শুনতে অনেকটা ম্যাজিকের মতো। ভেতরে আসলে কী গণনা হয়?

Rahim: "আপা, PyTorch-এ nn.Linear(10, 5) লিখলে একটা layer হয়ে যায়। কিন্তু এই layer-টা ভেতরে কী করছে সেটা না বুঝলে আমার মনে হয় আমি শুধু copy-paste করছি।"

Arif: "একদম ঠিক ধরেছ। যে engineer শুধু API জানে আর যে ভেতরের গণিতটা বোঝে — দুজনের পার্থক্য তখনই বোঝা যায় যখন model কাজ করে না, debug করতে হয়। চলো, আজ আমরা PyTorch ছাড়াই, শুধু NumPy দিয়ে একটা layer হাতে বানাই। তারপর তুমি আর কখনো ভুলবে না ভেতরে কী হয়।"

🔵 ২. একটা Neuron আসলে কী করে?

🌟 চলো, আজ একটা ছোট্ট গল্প বলি... 📖✨

একটা বড় বাগানে থাকত মিঠু নামে একটা ছোট্ট পিঁপড়ে। 🐜🌳 মিঠু ছিল খুব বুদ্ধিমান। প্রতিদিন সে খাবার খুঁজতে বের হতো। 🍪🌽

একদিন হাঁটতে হাঁটতে মিঠু একটা জায়গায় এসে থামল। সামনে তিনটা রাস্তা! 🛣️🐜

মিঠুকে ঠিক করতে হবে— কোন রাস্তা দিয়ে গেলে খাবার পাওয়ার সম্ভাবনা বেশি? 🤔

তাই মিঠু তিনটা বিষয় খেয়াল করল। 🔍

কিন্তু মিঠু জানে, সব তথ্য সমান গুরুত্বপূর্ণ নয়। তাই সে প্রতিটি তথ্যের জন্য একটা করে Weight ঠিক করল। ⚖️

যেমন, খাবারের গন্ধ তার কাছে সবচেয়ে গুরুত্বপূর্ণ। তাই x2-এর Weight বেশি। 🍪❤️

✖️ মিঠু এবার হিসাব শুরু করল!

মিঠু প্রতিটি তথ্যকে তার Weight দিয়ে গুণ করল। কারণ সে জানতে চায়, কোন তথ্য তার সিদ্ধান্তে কতটা প্রভাব ফেলছে

🌸 x1 × w1
🍪 x2 × w2
🐜 x3 × w3

এবার মিঠু সব হিসাব একসাথে যোগ করল। ➕

"সবগুলো যোগ করলে বুঝতে পারব কোন রাস্তা আমার জন্য ভালো!" 🐜💭

➕ তারপর এলো Bias!

কিন্তু মিঠুর কাছে আরও একটা ছোট্ট অতিরিক্ত সংখ্যা আছে— Bias (b)। ✨

Bias মিঠুর সিদ্ধান্তকে একটু সামঞ্জস্য করতে সাহায্য করে। তাই সব হিসাবের সাথে Bias-ও যোগ হলো।

z = (x1 × w1 + x2 × w2 + x3 × w3) + b

পুরো হিসাব শেষ করে মিঠু একটা সংখ্যা পেল। এই সংখ্যাটার নাম হলো z। 🔢

🚪 এবার মিঠু গেল শেষ দরজার সামনে!

কিন্তু z পাওয়ার পরও মিঠু সরাসরি সিদ্ধান্ত নিল না। সে সংখ্যাটাকে একটা বিশেষ দরজার মধ্যে দিয়ে পাঠাল। 🚪✨

সেই দরজার নাম হলো Activation Function

Activation Function z-কে দেখে মিঠুকে সাহায্য করল শেষ সিদ্ধান্ত নিতে

🐜 "হুমম... হিসাব বলছে এই রাস্তা দিয়ে গেলে খাবার পাওয়ার সম্ভাবনা বেশি!" 🍪🎉

মিঠু আনন্দে সেই রাস্তা ধরে দৌড়ে গেল। 🐜💨 আর কিছুদূর যেতেই সে সত্যিই একটা বিশাল খাবারের টুকরো পেয়ে গেল! 🍪😍

এই যে মিঠু সব তথ্য নিয়ে হিসাব করে একটা শেষ সিদ্ধান্ত নিল— এটাই neuron-এর কাজের মতো। 🧠✨

🧠 তাহলে মিঠুর গল্প থেকে Neuron-কে বুঝি

  1. 📥 Input: তথ্য সংগ্রহ করে
  2. ✖️ Weight: কোন তথ্য কতটা গুরুত্বপূর্ণ তা ঠিক করে
  3. Sum + Bias: সব হিসাব যোগ করে z তৈরি করে
  4. 🚪 Activation: z দেখে সিদ্ধান্তের জন্য output তৈরি করে
  5. 🎯 Output: শেষ ফলাফল দেয়
🐜 Input ↓ ⚖️ Weight দিয়ে গুরুত্ব নির্ধারণ ↓ ➕ সব যোগ + Bias ↓ 🔢 z ↓ 🚪 Activation Function ↓ 🎯 Output

আর এমন হাজার হাজার "মিঠু" 🐜🧠 একসাথে কাজ করলেই তৈরি হয় একটা Neural Network! 🤖✨

⚙️ ৩. Weight ও Bias — কেন এই দুটো সংখ্যা

Weight (w): প্রতিটা input কতটা গুরুত্বপূর্ণ সেটা ঠিক করে। বড় weight মানে সেই input-এর প্রভাব বেশি। Bias (b): একটা "shift" — activation কখন চালু হবে সেই থ্রেশহোল্ড সরায়।

Training-এর পুরো লক্ষ্যই হলো এই weight আর bias-এর সঠিক মান খুঁজে বের করা, যাতে model-এর prediction সত্যিকারের উত্তরের কাছাকাছি হয়। শুরুতে এগুলো random থাকে, ধীরে ধীরে ঠিক হয় (পরের পর্বে দেখব কীভাবে)।

🎚️ ৪. Activation Function কেন লাগে?

ধরুন activation ছাড়া শুধু z = w·x + b রাখলাম। তাহলে যতগুলো layer-ই জুড়ি না কেন, পুরো network শেষ পর্যন্ত একটা সরল linear function-এই থেকে যাবে (linear-এর উপর linear আবার linear)। মানে জটিল, বাঁকা (non-linear) pattern কখনো শিখতে পারবে না।

এক লাইনে: activation function network-এ non-linearity আনে। এটাই network-কে জটিল সম্পর্ক (যেমন XOR, ছবির pattern) শেখার ক্ষমতা দেয়। activation না থাকলে deep network আর একটা logistic/linear regression-এর মধ্যে পার্থক্য থাকত না।

📈 ৫. জনপ্রিয় activation: Sigmoid, ReLU, Softmax

Activation কী করে কোথায় ব্যবহার
ReLU max(0, z) ঋণাত্মক হলে 0, ধনাত্মক হলে যেমন আছে hidden layer-এর ডিফল্ট পছন্দ (দ্রুত, ভালো কাজ করে)
Sigmoid 1/(1+e⁻ᶻ) ০ থেকে ১-এর মধ্যে চাপায় binary classification-এর output (probability)
Softmax একাধিক class-এর probability, যোগফল ১ multi-class classification-এর output
Tanh -১ থেকে ১-এর মধ্যে কিছু পুরোনো/RNN network
Engineer টিপ: hidden layer-এ সন্দেহ হলে ReLU দিয়ে শুরু করুন — এটা সবচেয়ে নিরাপদ ডিফল্ট। output layer-এ সমস্যা অনুযায়ী: binary → Sigmoid, multi-class → Softmax, regression → কোনো activation না (raw number)।

🔗 ৬. Layer ও Forward Propagation

একটা layer মানে সমান্তরালে বসানো একগুচ্ছ neuron। Forward propagation মানে input থেকে শুরু করে layer-এর পর layer গণনা করতে করতে output পর্যন্ত পৌঁছানো — শুধু সামনের দিকে, কোনো শেখা এখানে হয় না, শুধু prediction তৈরি হয়।

একটা layer-এর গণনা আসলে matrix multiplication (Series 04 মনে করুন):

Layer output: a = activation( W · x + b ) W = weight matrix (এই layer-এর সব neuron-এর weight একসাথে) x = input vector b = bias vector · = matrix multiplication (dot product)

🎯 ৭. তিন স্তরে বুঝি

Level 1 — intuition: প্রতিটা neuron একটা ছোট "ভোটার" — সে তার input দেখে একটা মতামত (সংখ্যা) দেয়। অনেক ভোটার মিলে layer, অনেক layer মিলে চূড়ান্ত সিদ্ধান্ত।

Level 2 — technical: forward pass হলো ধারাবাহিক W·x + b → activation গণনা। এটা পুরোটাই matrix operation, তাই GPU-তে দ্রুত চলে (parallel)।

Level 3 — engineer: production-এ inference মানেই এই forward pass চালানো। training শেষ, weight fixed — শুধু নতুন input দিয়ে forward pass চালিয়ে উত্তর পাওয়া। তাই inference দ্রুত ও সস্তা, training-এর চেয়ে অনেক হালকা। (মনে রাখবেন: training ≠ inference।)

💻 ৮. NumPy দিয়ে হাতে forward pass

এখানে ইচ্ছাকৃতভাবে PyTorch ব্যবহার করছি না — কারণ আমরা চাই ভেতরের গণিতটা দেখতে। NumPy দিয়ে একটা ২-layer network-এর forward pass:

import numpy as np def relu(z): return np.maximum(0, z) def softmax(z): e = np.exp(z - np.max(z)) # numerical stability return e / e.sum() # input: ৩টা feature (যেমন: job post-এর ৩টা সংখ্যা) x = np.array([0.5, -1.2, 2.0]) # Hidden layer: ৩ input -> ৪ neuron W1 = np.random.randn(4, 3) * 0.1 # (4x3) weight matrix b1 = np.zeros(4) # Output layer: ৪ -> ২ class (যেমন: junior / senior role) W2 = np.random.randn(2, 4) * 0.1 b2 = np.zeros(2) # ---- Forward propagation ---- z1 = W1 @ x + b1 # hidden layer-এর weighted sum a1 = relu(z1) # hidden activation z2 = W2 @ a1 + b2 # output layer-এর weighted sum a2 = softmax(z2) # class probability print("Hidden activation:", np.round(a1, 3)) print("Class probability :", np.round(a2, 3), " (যোগফল =", round(a2.sum(), 3), ")")

চালালে দেখবেন a2-এর দুটো সংখ্যার যোগফল ১ — কারণ softmax এদের probability-তে রূপান্তর করেছে। এই পুরোটাই forward pass। এখনো model শেখেনি (weight random), তাই উত্তর ভুল — কিন্তু pipeline-টা কাজ করছে।

🖼️ ৯. Visual: input → hidden → output

Input (3) Hidden (4, ReLU) Output (2, Softmax) x1 ○ ┐ ─┼──> ○ ┐ x2 ○ ┤ ○ ┼──> ○ P(junior) ─┼──> ○ ┤ ○ P(senior) x3 ○ ┘ ○ ┘ W1,b1 W2,b2 forward: x --(W1·x+b1)--> ReLU --(W2·a1+b2)--> Softmax --> probabilities

🧪 ১০. Experiment: activation বদলে দেখুন

উপরের কোডে a1 = relu(z1)-এর জায়গায় a1 = z1 (মানে কোনো activation না) দিন। তারপর ভাবুন — এখন পুরো network কি একটা linear function হয়ে গেল? হ্যাঁ। এটাই প্রমাণ করে কেন non-linear activation ছাড়া deep network অর্থহীন।

🇧🇩 ১১. বাংলাদেশের বাস্তব উদাহরণ

একটা fintech-এ যখন "এই transaction fraud কিনা" model deploy হয়, production-এ প্রতিটা transaction-এ শুধু এই forward pass চলে — মিলিসেকেন্ডে উত্তর। GP/Robi-র recommendation বা কোনো health-app-এর image scan — সবখানে user যা দেখে সেটা forward pass-এর ফল। Training হয় আগে, offline; user শুধু inference (forward pass) পায়।

💼 ১২. Boss Question

Boss: "এই activation-টেকটিভেশন — এসব theory আমার কাজে কী লাগবে?"

উত্তর: "স্যার, যখন আমাদের model production-এ ভুল প্রায়ই একই রকম ভুল করবে, বা training-এ শেখাই বন্ধ করে দেবে (dead neuron সমস্যা), তখন এই activation-এর বোঝাপড়াই আমাকে দ্রুত সমস্যা খুঁজে ঠিক করতে সাহায্য করবে। মানে এটা কম downtime, দ্রুত fix — সরাসরি খরচ বাঁচায়।"

🔎 ১৩. Job Requirement Decoder

"Understanding of neural network fundamentals (activation functions, forward pass)."
প্রশ্ন উত্তর
কী বোঝায়? আপনি একটা network-এর ভেতরের গণনা (neuron, weight, activation, forward pass) বোঝেন।
কেন চায়? যাতে API-blindly না চালিয়ে model debug ও tune করতে পারেন।
কোন সমস্যা সমাধান করে? "কেন model শিখছে না / সব একই উত্তর দিচ্ছে" — এসব ডিবাগিং।
junior-এর কী জানা লাগে? neuron-এর ৩ ধাপ, ReLU/Sigmoid/Softmax কখন, non-linearity কেন দরকার।
এখনই কী master লাগে না? বিরল activation (GELU, Swish)-এর গাণিতিক প্রমাণ, custom activation।
GitHub-এ কীভাবে দেখাবে? এই NumPy forward-pass demo + একটা ছোট MLP project।
interview-তে কী? "Activation function কেন দরকার?", "ReLU বনাম Sigmoid কখন?"

⚠️ ১৪. সাধারণ ভুল ধারণা

ভুল ১: "activation optional, না দিলেও চলে।" → ঠিক: hidden layer-এ activation ছাড়া পুরো network linear হয়ে অর্থহীন।

ভুল ২: "output layer-এও সবসময় ReLU।" → ঠিক: output activation সমস্যা অনুযায়ী (Sigmoid/Softmax/কিছুই না)।

ভুল ৩: "forward pass-এ model শেখে।" → ঠিক: forward pass শুধু prediction; শেখা হয় backprop-এ (পরের পর্ব)।

ভুল ৪: "bias গুরুত্বহীন।" → ঠিক: bias ছাড়া neuron সবসময় origin দিয়ে যেতে বাধ্য; flexibility কমে।

🎤 ১৫. Interview Prep

প্রশ্ন ১: একটা neuron ভেতরে কী করে?
উত্তর: input × weight-এর যোগফল + bias (z), তারপর activation(z)।

প্রশ্ন ২: Activation function কেন দরকার?
উত্তর: non-linearity আনতে; নাহলে পুরো network একটা linear function হয়ে যায়।

প্রশ্ন ৩: ReLU-এর সুবিধা কী?
উত্তর: গণনায় সস্তা, vanishing gradient কম, বাস্তবে দ্রুত ও ভালো কাজ করে।

প্রশ্ন ৪: Softmax কখন?
উত্তর: multi-class classification-এর output-এ, যাতে সব class-এর probability পাওয়া যায় (যোগফল ১)।

✍️ ১৬. হাতে-কলমে

১. উপরের forward-pass কোডে hidden neuron সংখ্যা ৪ থেকে ৮ করুন — W1-এর shape কী হবে?
২. একটা ৩-layer network বানান (input → hidden → hidden → output)।
৩. Softmax output-এর যোগফল সবসময় ১ কিনা print করে যাচাই করুন।

📌 ১৭. Project Connection ও সারসংক্ষেপ

আমাদের flagship-এ পরে যখন job description-কে embedding-এ রূপান্তর করে classify করব, তার নিচে ঠিক এই forward pass-ই চলবে। ভিত্তিটা এখন হাতে গড়ে নিচ্ছি।

এই পর্বে শিখলাম:
✓ neuron = গুণ → যোগ (+bias) → activation
✓ weight/bias হলো শেখার লক্ষ্য; activation আনে non-linearity
✓ ReLU (hidden), Sigmoid/Softmax (output) কখন ব্যবহার
✓ forward propagation = input থেকে output পর্যন্ত matrix গণনা (শেখা নয়)
✓ NumPy দিয়ে হাতে একটা network-এর forward pass চালালাম
পরবর্তী পর্ব (S06E03): "Backpropagation ও Gradient Descent" — এই random weight-গুলো কীভাবে নিজে নিজে ঠিক হয়, মানে network আসলে কীভাবে শেখে — সেই রহস্য উন্মোচন।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.