Python for AI/NumPy/Lesson 37
Broadcasting
ভিন্ন shape-এর array নিয়ে হিসাব — broadcasting-এর নিয়ম, [:, None] দিয়ে column বানানো, আর ML-এর সবচেয়ে common preprocessing ধাপ: feature standardization।
- সময়
- 24 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
একই shape-এর দুটো array যোগ করা সহজ। কিন্তু:
প্রথমটায় একটা সংখ্যা পুরো matrix-এ যোগ হলো। দ্বিতীয়টায় একটা 1D array প্রতিটা row-তে গুণ হলো। কেউ কোনো loop লেখেনি, কেউ copy বানায়নি — NumPy নিজে ছোট array-টাকে "প্রসারিত" করে নিয়েছে। একে বলে broadcasting।
কেন দরকার?
- Bias যোগ — neural network-এর প্রতিটা layer:
X @ W + b(b প্রতিটা sample-এর row-তে যোগ হয়) - Normalization — প্রতিটা column থেকে তার গড় বিয়োগ
- ছবি —
(H, W, 3)ছবির প্রতিটা pixel থেকে RGB গড় বিয়োগ (ImageNet normalization) - Distance — সব point থেকে একটা point-এর দূরত্ব একসাথে
Broadcasting ছাড়া এগুলো লিখতে loop বা বিশাল copy লাগত।
Visual intuition
(2, 3) (3,) (2, 3)
[[100 200 300] + [1 2 3] -> [[101 202 303]
[400 500 600]] ^ প্রতিটা row-এ [401 502 603]]
প্রসারিত হয়
ভেতরে NumPy আসলে copy বানায় না — শুধু এমনভাবে হিসাব করে যেন ছোট array-টা বড়টার মাপে আছে। তাই memory লাগে না।
নিয়ম
দুটো shape ডান দিক থেকে মেলাও। প্রতিটা জোড়া dimension চলবে যদি:
- দুটো সমান, অথবা
- একটা 1, অথবা
- একটা নেই
(4, 3) + (3,) -> 3 = 3 ✓, বাকিটা নেই ✓ -> (4, 3)
(4, 3) + (4, 1) -> 3 vs 1 ✓, 4 = 4 ✓ -> (4, 3)
(4, 3) + (4,) -> 3 vs 4 ✗ -> error!
শেষেরটা দেখো — 4টা row, আর 4টা মান, মনে হয় মেলা উচিত। কিন্তু নিয়ম ডান দিক থেকে মেলায়:
[:, None]: column vector বানানো
প্রতিটা row-তে আলাদা মান যোগ করতে চাইলে array-টাকে column বানাতে হবে — shape (4,) থেকে (4, 1):
দুটো 1D থেকে পুরো table
(3, 1) আর (4,) → (3, 4) — প্রতিটা জোড়ার হিসাব। গুণের table এক লাইনে!
Exercise
Exercise
প্রতিটা row-তে bias যোগ
Neural network-এর একটা layer-এর output: Z হলো 4×3 array (৪টা sample, ৩টা neuron)। প্রতিটা neuron-এর একটা bias আছে — b (৩টা মান)।
out = Z-এর প্রতিটা row-তে b যোগ করা ফলাফল। Loop বা np.tile ছাড়া — broadcasting দিয়ে।
Quiz
Challenge
Challenge
Feature standardization
ML model-এ data দেওয়ার আগে প্রতিটা feature (column) standardize করা হয় — যাতে প্রতিটা column-এর গড় 0 আর standard deviation 1 হয়:
z = (x − column-এর গড়) / column-এর std
standardize(X) function লেখো (X একটা 2D array)। একটা সমস্যা: কোনো column-এর সব মান একই হলে std = 0 — শূন্য দিয়ে ভাগ! সেই column-গুলো 0 হয়ে যাবে। Loop ছাড়া।
বাস্তবে কোথায় ব্যবহার হয়?
k-Nearest Neighbors-এর মূল হিসাব — একটা নতুন point থেকে সব training point-এর দূরত্ব, তারপর সবচেয়ে কাছেরগুলো:
points - query — (5, 2) থেকে (2,) বিয়োগ, broadcasting। এক লাইনে ৫টা দূরত্ব; ১০ লাখ point হলেও একই লাইন। Machine Learning module-এ KNN এভাবেই বানাবো।
Interview প্রশ্ন
- Beginner: Broadcasting কী? একটা উদাহরণ দাও।
- Intermediate:
(5, 3)আর(5,)কেন broadcast হয় না? কীভাবে ঠিক করবে? - Advanced: Training data-র mean/std দিয়ে test data standardize করা হয় কেন, test data-র নিজের mean/std দিয়ে না? (Data leakage — test-এর তথ্য training-এ ঢুকে যায়।)
এরপর কী?
mean(axis=0) আগেই ব্যবহার করেছি — কিন্তু axis আসলে কী? Row ধরে নাকি column ধরে? পরের lesson: Aggregation: sum, mean, axis।