Deep Learning/Neural Network-এর ভিত্তি/Lesson 04
Backpropagation
Network কীভাবে শেখে — loss, gradient আর chain rule; numerical gradient দিয়ে যাচাই; আর একটা neuron-কে gradient descent দিয়ে নিজে হাতে train করা, প্রতিটা ধাপ দেখে।
- সময়
- 28 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Network শেখে তিন ধাপে, বারবার:
1. Forward: input ──► prediction
2. Loss: prediction আর আসল উত্তর কতটা দূরে?
3. Backward: প্রতিটা weight কোন দিকে সরালে loss কমবে? সেদিকে একটু সরাও
└─────────────── আবার ১ ───────────────┘
তৃতীয় ধাপের প্রশ্ন — "প্রতিটা weight কোন দিকে?" — উত্তর দেয় gradient, আর সেটা হিসাব করার পদ্ধতির নাম backpropagation।
কেন দরকার?
এটাই deep learning-এর ইঞ্জিন। ১৯৮৬-এ Rumelhart, Hinton আর Williams দেখালেন backprop দিয়ে বহু-layer network train করা যায় — perceptron-এর XOR সমস্যার সমাধান। আজ PyTorch-এর loss.backward() এক লাইনে এটা করে — কিন্তু ভেতরে কী হয় না জানলে training-এর সমস্যা (loss nan, শেখে না, vanishing gradient) debug করা অসম্ভব।
Gradient: ঢাল
একটা weight আর loss । Derivative বলে: সামান্য বাড়ালে কতটা বদলায়।
- → বাড়ালে loss বাড়ে → কমাও
- → বাড়ালে loss কমে → বাড়াও
তাই সবসময় ঢালের উল্টো দিকে:
এটাই gradient descent — কুয়াশায় ঢাকা পাহাড় থেকে নামা: চারপাশ দেখা যায় না, কিন্তু পায়ের নিচের ঢাল বোঝা যায় — সেই ঢাল ধরে নিচে নামো।
Numerical gradient: যাচাইয়ের অস্ত্র
যেকোনো function-এর ঢাল সংখ্যা দিয়ে অনুমান করা যায় — দুই পাশে সামান্য সরে দেখো:
সহজ, কিন্তু প্রতিটা weight-এর জন্য দুটো আলাদা forward pass লাগে। ১০ লাখ weight-এ ২০ লাখ forward pass — অসম্ভব ধীর। তাই training-এ backprop, আর backprop ঠিক আছে কিনা যাচাইয়ে (gradient check) numerical gradient।
Chain rule: backprop-এর হৃদয়
একটা neuron: , , । আমরা চাই । এটা একটা শিকল:
প্রতিটা টুকরো আলাদাভাবে সহজ। আর sigmoid + cross-entropy একসাথে নিলে একটা সুন্দর সরলীকরণ হয়:
অর্থাৎ ভুল = prediction − আসল। তারপর:
forward: X ──► z = Xw + b ──► p = σ(z) ──► L
backward: dw = Xᵀ·dz/n ◄── dz = p − y ◄────── শুরু
চলো numerical gradient দিয়ে যাচাই করি যে এই সূত্রগুলো ঠিক:
দুটো প্রায় হুবহু এক। গভীর network-এ একই chain rule layer-এর পর layer উল্টো দিকে চলতে থাকে — তাই নাম backpropagation।
Exercise
Exercise
Numerical gradient
যেকোনো function-এর ঢাল (derivative) সংখ্যা দিয়ে অনুমান করা যায়:
f'(x) ≈ ( f(x + h) − f(x − h) ) ÷ 2h, যেখানে h খুব ছোট (যেমন 1e-5)
numerical_grad(f, x, h=1e-5) লেখো। তারপর f(x) = x³ − 2x-এর জন্য x = 2-তে ঢাল slope-এ রাখো। (আসল উত্তর 3x² − 2 = 10 — কাছাকাছি আসা উচিত।)
Quiz
Challenge
Challenge
একটা neuron gradient descent দিয়ে train করো
Logistic neuron: p = sigmoid(X · w + b), loss = binary cross-entropy।
Backpropagation-এর ফলাফল (chain rule দিয়ে বের করা, lesson-এ ব্যাখ্যা আছে): - dz = p − y - dw = Xᵀ · dz ÷ n - db = mean(dz)
train(X, y, lr=0.5, steps=500) লেখো: w শূন্য (shape: feature সংখ্যা), b = 0 দিয়ে শুরু; প্রতি step-এ forward → gradient → w ← w − lr·dw, b ← b − lr·db। Return (w, b, losses) — losses প্রতিটা step-এর loss-এর list (update-এর আগের loss)।
বাস্তবে কোথায় ব্যবহার হয়?
Challenge-এ যা লিখলে — forward, loss, backward, update — PyTorch-এ এর প্রতিটা ধাপের নিজস্ব লাইন:
import torch
model = torch.nn.Sequential(torch.nn.Linear(2, 1), torch.nn.Sigmoid())
optimizer = torch.optim.SGD(model.parameters(), lr=0.5)
loss_fn = torch.nn.BCELoss()
for step in range(500):
p = model(X).squeeze() # 1. forward
loss = loss_fn(p, y) # 2. loss
optimizer.zero_grad()
loss.backward() # 3. backward — সব gradient নিজে থেকে (autograd)
optimizer.step() # 4. update: w ← w − lr · grad
loss.backward() হলো তোমার dz = p − y, dw = Xᵀ·dz/n — শুধু যেকোনো জটিল network-এর জন্য নিজে থেকে (autograd)। এই চার লাইনের loop-টা — GPT train করা থেকে শুরু করে image classifier পর্যন্ত — প্রায় সব deep learning code-এর হৃদয়।
Interview প্রশ্ন
- Beginner: Gradient descent কী? Learning rate কী করে?
- Intermediate: Backpropagation কী? Chain rule-এর ভূমিকা কী?
- Advanced: Sigmoid + cross-entropy-তে gradient কেন p − y হয়ে যায়? Gradient check কীভাবে করবে আর কেন training-এ ব্যবহার করবে না?
এরপর কী?
🎉 Neural Network-এর ভিত্তি module শেষ — neuron, activation, forward pass আর backpropagation। তুমি এখন জানো একটা neural network ভেতরে আসলে কী করে।
পরের module: Network train করা — বিভিন্ন loss আর optimizer (Adam), পূর্ণ training loop, overfitting আটকানো (dropout), আর PyTorch-এ এই সবকিছু।