মূল content-এ যাও

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:

Z=XW+b,A=g(Z)Z = X W + b, \qquad A = g(Z)
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 লিখে রাখার অভ্যাস করো:

main.py

একটা MNIST-আকারের network: ৩২টা 28×28 ছবি (784 pixel), ১২৮টা hidden neuron, ১০টা digit-এর probability। Weight random, তাই prediction এখনো অর্থহীন — training-এর পর অর্থবহ হবে।

Parameter গোনা

প্রতিটা layer-এ nin×noutn_{in} \times n_{out} weight আর noutn_{out} bias:

main.py

GPT-3-এর 175 billion parameter মানে ঠিক এই — সব layer-এর সব weight আর bias যোগ করলে।

XOR সমাধান: দুই layer-এর শক্তি

Perceptron lesson-এ দেখেছি একটা neuron XOR পারে না। দুই layer দিয়ে — হাতে weight বসিয়ে:

main.py

প্রথম layer-এর দুটো neuron আলাদা আলাদা "রেখা" টানে — একটা OR, একটা AND। দ্বিতীয় layer মেলায়: "OR কিন্তু AND না" = XOR। একটা রেখা যা পারে না, দুটো রেখা মিলে পারে। এটাই layer-এর শক্তি — প্রতিটা layer আগের layer-এর তৈরি করা feature থেকে আরও জটিল feature বানায়।

Exercise

Exercise

একটা dense layer

+20 XP

একটা batch-এ 4টা sample, প্রতিটার 3টা feature: X shape (4, 3)। Layer-এ 5টা neuron।

  • W — shape (3, 5)-এর weight (দেওয়া আছে), b — shape (5,)
  • Z = X · W + b
  • A = ReLU(Z)

Z আর A হিসাব করো, loop ছাড়া। A-এর shape কী হওয়ার কথা — নিজে আগে ভাবো।

solution.py

Quiz

  1. Q1Input X-এর shape (32, 784), প্রথম layer-এর W-এর shape (784, 128)। Output-এর shape কী?
  2. Q2Weight matrix W-এর shape (n_in, n_out) কেন?
  3. Q3Network-এ ১০,০০০ sample একসাথে (batch) দিলে প্রতিটার জন্য আলাদা loop লাগে?
0/3 answered

Challenge

Challenge

পুরো network-এর forward pass

+50 XP

দুটো 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 সংখ্যা)

  1. count_params(sizes) — layer-এর মাপের list (যেমন [784, 128, 10]) থেকে মোট parameter (সব weight + bias) সংখ্যা, int।
solution.py

বাস্তবে কোথায় ব্যবহার হয়?

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।