Deep Learning/Neural Network-এর ভিত্তি/Lesson 03
Forward propagation
Layer = X @ W + b, তারপর activation — shape মিলিয়ে একটা পুরো neural network-এর forward pass NumPy দিয়ে, parameter গোনা, আর দুই layer দিয়ে XOR সমাধান — যা একটা perceptron পারেনি।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
একটা layer = অনেকগুলো neuron পাশাপাশি। প্রতিটা neuron-এর নিজের weight আর bias — সবগুলো একসাথে একটা matrix:
X: (batch, n_in) W: (n_in, n_out) b: (n_out,)
──► Z = X @ W + b ──► A = g(Z): (batch, n_out)
Forward propagation মানে input থেকে শুরু করে layer-এর পর layer এই হিসাব, যতক্ষণ না output আসে:
X ──► [Linear → ReLU] ──► H ──► [Linear → sigmoid] ──► p
layer 1 layer 2
কেন দরকার?
Prediction মানেই forward pass। ChatGPT প্রতিটা শব্দ লেখার আগে একটা forward pass করে — শুধু অনেক বড় network দিয়ে। আর training-এর প্রতিটা ধাপ শুরু হয় forward pass দিয়ে (তারপর backward pass)।
Shape-ই সব
Deep learning-এর বেশিরভাগ bug আসলে shape-এর ভুল। প্রতিটা ধাপে shape লিখে রাখার অভ্যাস করো:
একটা MNIST-আকারের network: ৩২টা 28×28 ছবি (784 pixel), ১২৮টা hidden neuron, ১০টা digit-এর probability। Weight random, তাই prediction এখনো অর্থহীন — training-এর পর অর্থবহ হবে।
Parameter গোনা
প্রতিটা layer-এ weight আর bias:
GPT-3-এর 175 billion parameter মানে ঠিক এই — সব layer-এর সব weight আর bias যোগ করলে।
XOR সমাধান: দুই layer-এর শক্তি
Perceptron lesson-এ দেখেছি একটা neuron XOR পারে না। দুই layer দিয়ে — হাতে weight বসিয়ে:
প্রথম layer-এর দুটো neuron আলাদা আলাদা "রেখা" টানে — একটা OR, একটা AND। দ্বিতীয় layer মেলায়: "OR কিন্তু AND না" = XOR। একটা রেখা যা পারে না, দুটো রেখা মিলে পারে। এটাই layer-এর শক্তি — প্রতিটা layer আগের layer-এর তৈরি করা feature থেকে আরও জটিল feature বানায়।
Exercise
Exercise
একটা dense layer
একটা batch-এ 4টা sample, প্রতিটার 3টা feature: X shape (4, 3)। Layer-এ 5টা neuron।
W— shape (3, 5)-এর weight (দেওয়া আছে),b— shape (5,)Z= X · W + bA= ReLU(Z)
Z আর A হিসাব করো, loop ছাড়া। A-এর shape কী হওয়ার কথা — নিজে আগে ভাবো।
Quiz
Challenge
Challenge
পুরো network-এর forward pass
দুটো function লেখো:
1. forward(X, params) — একটা 2-layer network:
- hidden: H = ReLU(X · W1 + b1)
- output: p = sigmoid(H · W2 + b2)
- params একটা dict: {"W1", "b1", "W2", "b2"}
- Return: p (shape: sample সংখ্যা × output সংখ্যা)
count_params(sizes)— layer-এর মাপের list (যেমন[784, 128, 10]) থেকে মোট parameter (সব weight + bias) সংখ্যা,int।
বাস্তবে কোথায় ব্যবহার হয়?
PyTorch-এ তোমার challenge-এর network:
import torch
from torch import nn
model = nn.Sequential(
nn.Linear(4, 8), # W1, b1
nn.ReLU(),
nn.Linear(8, 1), # W2, b2
nn.Sigmoid(),
)
p = model(torch.randn(10, 4)) # forward pass: shape (10, 1)
print(sum(param.numel() for param in model.parameters())) # 49 = (4·8 + 8) + (8·1 + 1)
(এই code তোমার computer-এ বা Google Colab-এ চালাবে — pip install torch।) তুমি যা NumPy-তে লিখলে, PyTorch ঠিক তাই করে — সাথে GPU-তে চালানো আর gradient নিজে থেকে হিসাব করা।
Interview প্রশ্ন
- Beginner: Forward propagation কী?
- Intermediate: একটা (64, 100) input আর (100, 32) → (32, 10) দুই layer-এর network-এ প্রতিটা ধাপের shape আর parameter সংখ্যা বলো।
- Advanced: Weight-গুলো সব শূন্য দিয়ে শুরু করলে কী সমস্যা? (Symmetry — সব neuron একই জিনিস শেখে।)
এরপর কী?
XOR-এর weight আমি হাতে বসালাম। কিন্তু ১ লাখ weight হাতে বসানো অসম্ভব। Network নিজে কীভাবে শেখে — প্রতিটা weight কোন দিকে কতটা সরাবে? Module-এর শেষ lesson: Backpropagation।