Neural Networksপড়তে ৮ মিনিট লাগবে

নিউরাল নেটওয়ার্ক বেসিকস (Neural Network Basics)

লজিকের মতো নিউরনগুলো একে অপরের সাথে স্তরে স্তরে যুক্ত থাকে
forward pass:O(sum of w_i) — মোট ওজনের সমানুপাতিক (proportional to total weights)parameters:হাজার হাজার থেকে শত শত কোটিতে বা বিলিয়নে (billions) পৌঁছাতে পারেexpressiveness:যেকোনো চলমান বা কন্টিনিউয়াস (continuous) ফাংশনকে প্রায় নিখুঁতভাবে অনুমান বা মেলাতে পারে (approximate)

ভাবুন তো, কোনো কারখানার অ্যাসেম্বলি লাইনের (assembly line) কথা। এর একপ্রান্ত দিয়ে স্টিল বা লোহার পাত, রাবার, কাচের মতো কাঁচামালগুলো (raw materials) আসে। এরแรก স্টেশনে (station), কর্মীরা এগুলোকে কেটে নির্দিষ্ট আকার বা শেইপ (shape) দেয়। দ্বিতীয় স্টেশনে, অন্যরা জিনিসগুলোকে একসাথে জোড়া লাগায়। তৃতীয়টিতে বসে, কেউ হয়তো সেগুলোতে রঙ করে এবং পলিশ করে। আর একেবারে শেষ প্রান্ত দিয়ে একটি সম্পূর্ণ প্রস্তুত বা তৈরি করা গাড়ি বের হয়ে আসে।

একটি নিউরাল নেটওয়ার্কও (neural network) ঠিক এই একই নিয়মে কাজ করে। এর ইনপুট স্তরে (input layer) একেবারে র বা কাঁচা ডেটাগুলো (raw data) প্রবেশ করে। এরপর সেগুলো এক বা একাধিক হিডেন লেয়ার (hidden layers) বা লুকায়িত স্তরগুলোর মধ্য দিয়ে যায়, যেখানে প্রতিটি স্তরই ডেটাগুলোর ওপর দরকারি কোনো না কোনো কাজ করে বা এগুলোকে পরিবর্তন করে। সবশেষে, আউটপুট লেয়ার (output layer) বা একেবারে শেষ স্তরটি সম্পূর্ণ প্রস্তুত ফলাফল বা প্রেডিকশন (prediction) তৈরি করে।

এখানকার প্রতিটি স্টেশনের একেকজন ওই "কর্মী" আসলে কী? এটিই হলো মূলত একেকটি নিউরন (neuron) — যা হলো অতি ক্ষুদ্র বা ছোট একেকটি পারসেপ্ট্রন (perceptron), যেগুলো মূলত গুণ করে, যোগ করে এবং সবশেষে এর ওপর একটি অ্যাক্টিভেশন ফাংশন (activation function) প্রয়োগ করে কাজ করে।

৩টি ভিন্ন ধরণের লেয়ার বা স্তর (The three types of layers)

ইনপুট লেয়ার (Input layer)

এটি মূলত আপনার কাঁচা ডেটা (raw data)। আপনি যদি একটি ২৮x২৮ (28x28) পিক্সেলের (pixel) কোনো ছবিকে ক্লাসিফাই (classify) বা শ্রেণীবদ্ধ করতে চান, তবে আপনার ইনপুট লেয়ারে মোট ৭৮৪টি নিউরন (প্রতি পিক্সেলের জন্য একটি করে) থাকবে। এগুলো মূলত নিজেদের মধ্যে কোনো হিসাব-নিকাশ করে না — বরং এরা শুধুমাত্র এই ডেটাগুলোকে সামনের দিকে পরের স্তরে পাঠিয়ে দেয়।

হিডেন লেয়ার (Hidden layers)

এখান থেকেই মূলত আসল জাদু শুরু হয়। একটি হিডেন বা লুকানো লেয়ারের প্রতিটি নিউরন:

  1. আগের লেয়ারের বা স্তরের প্রতিটি নিউরন থেকেই ইনপুট ভ্যালু বা মান গ্রহণ করে
  2. তার প্রত্যেকটিকে একটি নির্দিষ্ট গুণাঙ্ক বা ওজন (weight) দিয়ে গুণ করে
  3. এরপর সেই মানগুলোকে একসাথে যোগ করে এবং সবশেষে এর সাথে একটি বায়াস (bias) যুক্ত করে
  4. আর সবশেষে এই ফলাফলটিকে একটি অ্যাক্টিভেশন ফাংশন (activation function)-এর মধ্য দিয়ে পাঠিয়ে দেয়

এখানে প্রথম হিডেন লেয়ারটি হয়তো এর ধার বা প্রান্তগুলো (edges) শনাক্ত করা শিখতে পারে। আর এর দ্বিতীয় লেয়ারটি হয়তো ওই প্রান্তগুলোকে একসাথে যুক্ত করে কোনো নির্দিষ্ট আকার বা শেইপ (shapes) তৈরি করতে পারে। একইভাবে তৃতীয় স্তরটি হয়তো সেই আকারগুলোকে "বিড়ালের কান" বা "কুকুরের নাক" হিসেবে চিনতে বা শনাক্ত করতে পারবে। এখানকার প্রতিটি স্তর মূলত তার আগের স্তরের ওপরে ভিত্তি করেই কাজ করে এবং এই ডেটাগুলোর অ্যাবস্ট্রাক্ট ফিচারগুলো (abstract features) বা মূল বৈশিষ্ট্যগুলোকে ধাপে ধাপে আরও ভালোভাবে শিখে নেয়।

আউটপুট লেয়ার (Output layer)

এটিই হলো এখানকার একেবারে শেষ স্তর যা আপনাকে চূড়ান্ত উত্তরটি (answer) বা ফলাফলটি দেয়। ক্লাসিফিকেশনের (classification) ক্ষেত্রে, আপনার কাছে হয়তো প্রতিটি ক্লাসের জন্য আলাদা আলাদা একেকটি নিউরন (যেমন: বিড়াল, কুকুর, পাখি ইত্যাদি) থাকতে পারে, আর এর মাঝে যে নিউরনটি সবচেয়ে বেশি সক্রিয় বা ফায়ার (fires strongest) করবে, সেটিই হবে আপনার কাঙ্ক্ষিত উত্তর বা প্রেডিকশন।

এটিকে কেন "ডিপ (deep)" লার্নিং বলা হয়? (Why "deep" learning?)

দুই বা ততোধিক হিডেন লেয়ার (hidden layers) থাকা কোনো নেটওয়ার্ককেই মূলত "ডিপ (deep)" বা গভীর নিউরাল নেটওয়ার্ক বলা হয়। এর আসল মানে আসলে এটাই — "ডিপ (deep)" বলতে মূলত এখানে "আরও বেশি স্তর বা লেয়ার থাকা"-কেই বোঝানো হয়।

কিন্তু এতগুলো স্তর কেন দরকার হয়? ব্যাপারটিকে এভাবে চিন্তা করুন। শুধুমাত্র একটি হিডেন লেয়ার (hidden layer) দিয়ে একটি নেটওয়ার্ক হয়তো সাধারণ বা খুব সিম্পল (simple) কিছু প্যাটার্ন শিখতে পারবে। কিন্তু অনেকগুলো স্তর পরপর জোড়া লাগানোর ফলে, এটি সাধারণ প্যাটার্নগুলোকে একত্রিত করে অনেক বেশি জটিল বা কমপ্লেক্স (complex) কোনো প্যাটার্নে রূপ দিতে পারে:

  • প্রথম স্তর (Layer 1): এটি বিভিন্ন প্রান্তগুলো (edges) (যেমন: অনুভূমিক, উলম্ব, বা কোণাকুণি রেখা) শনাক্ত করতে পারে
  • দ্বিতীয় স্তর (Layer 2): এটি এই প্রান্তগুলোকে একত্রিত করে বিভিন্ন টেক্সচার এবং আকার বা শেইপ (shapes) (যেমন: বৃত্ত, কোণা) তৈরি করে
  • তৃতীয় স্তর (Layer 3): এই স্তরটি বিভিন্ন আকারগুলোকে একত্রিত করে বিভিন্ন অংশ বা পার্টস (parts) (যেমন: চোখ, নাক, চাকা) তৈরি করে
  • চতুর্থ স্তর (Layer 4): আর এই স্তরটি সবশেষে বিভিন্ন অংশগুলোকে একত্রিত করে সম্পূর্ণ নতুন কোনো বস্তু বা অবজেক্ট (objects) (যেমন: মানুষের চেহারা, গাড়ি, বিড়াল) তৈরি করে যাচাই করে

এখানকার প্রতিটি স্তরই মূলত অ্যাবস্ট্রাকশনের (abstraction) একেকটি লেভেল হিসেবে কাজ করে। আপনি যত গভীরে বা ভেতরে যাবেন, এই ফিচার বা বৈশিষ্ট্যগুলো ঠিক ততটাই অত্যাধুনিক ও সোফিস্টিকেটেড (sophisticated) হতে থাকবে।

কোডে একদম শুরু থেকে একটি ছোট নিউরাল নেটওয়ার্ক (A Tiny Neural Network from Scratch)

import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# নেটওয়ার্ক: ২টি ইনপুট → ২টি হিডেন নিউরন → ১টি আউটপুট (2 inputs → 2 hidden neurons → 1 output)
np.random.seed(42)
W1 = np.random.randn(2, 2) # ইনপুট→হিডেন ওয়েটগুলো (input→hidden weights)
b1 = np.zeros(2) # হিডেন বায়াসগুলো (hidden biases)
W2 = np.random.randn(2, 1) # হিডেন→আউটপুট ওয়েটগুলো (hidden→output weights)
b2 = np.zeros(1) # আউটপুট বায়াস (output bias)
def forward(x):
# হিডেন লেয়ার (Hidden layer)
hidden = sigmoid(np.dot(x, W1) + b1)
# আউটপুট লেয়ার (Output layer)
output = sigmoid(np.dot(hidden, W2) + b2)
return output, hidden
# নেটওয়ার্কের ভেতরে একটি ইনপুট পাঠানো বা ফিড (Feed) করা
x = np.array([0.5, 0.8])
output, hidden = forward(x)
print(f"ইনপুট (Input): {x}")
print(f"হিডেন (Hidden): [{hidden[0]:.3f}, {hidden[1]:.3f}]")
print(f"আউটপুট (Output): {output[0]:.3f}")
Output
ইনপুট (Input):  [0.5 0.8]
হিডেন (Hidden): [0.545, 0.442]
আউটপুট (Output): 0.488
Note: মাত্র একটি হিডেন লেয়ার (hidden layer) থাকা কোনো নিউরাল নেটওয়ার্ক তাত্ত্বিক বা থিওরিটিক্যালি (theoretically) যেকোনো কন্টিনিউয়াস ফাংশনকে (Universal Approximation Theorem) সফলভাবে অনুমান করতে পারে। কিন্তু বাস্তব জীবনে, অতি চওড়া ও অগভীর (wide shallow) কোনো নেটওয়ার্কের তুলনায়, একটি ডিপ বা গভীর নেটওয়ার্ক (deep network) এখানকার জটিল প্যাটার্নগুলোকে আরও দ্রুত এবং অনেক বেশি নিখুঁতভাবে বা এফিশিয়েন্টলি (efficiently) শিখতে পারে। আর ঠিক এই কারণেই এখানকার আধুনিক সব আর্কিটেকচারগুলো মূলত অনেক বেশি গভীর বা ডিপ (deep) হয়ে থাকে।

Key Metrics

ফরোয়ার্ড পাস (Forward Pass)
প্রতিটি লেয়ার বা স্তরের মধ্য দিয়ে ম্যাট্রিক্স গুণ (Matrix multiplications) করা হয়
দ্রুত (Fast) O(মোট ওজন) (O(total weights))
ট্রেইনিং (ব্যাকপ্রপ) (Training (Backprop))
প্রতিটি ওজনের (weight) জন্য গ্র্যাডিয়েন্ট (gradients) বা ঢাল বের করতে হয়
ধীরগতির (Slow) O(total weights * epochs * n)
প্রকাশ বা এক্সপ্রেসিভনেস (Expressiveness)
পর্যাপ্ত সংখ্যক নিউরন (neurons) দেওয়া থাকলে এটি প্রায় যেকোনো প্যাটার্নই শিখতে পারে
অনেক বেশি (Very high) সার্বজনীন বা ইউনিভার্সাল অ্যাপ্রক্সিমেটর (Universal approximator)
ইন্টারপ্রেটেবিলিটি বা বোধগম্যতা (Interpretability)
হিডেন লেয়ারগুলো (hidden layers) আসলে ঠিক কী জিনিস শিখেছে, তা বুঝতে পারাটা বেশ কঠিন
অনেক কম বা নিচু (Low) ব্ল্যাক বক্স (Black box)

ছোট কুইজ

একটি নিউরাল নেটওয়ার্কের প্রতিটি হিডেন লেয়ার (hidden layer) মূলত কী কাজ করে?
Challenge

পড়া চালিয়ে যান

পারসেপ্ট্রন (Perceptron)
একটিমাত্র নিউরন — গুণ করা, যোগ করা আর সিদ্ধান্ত নেওয়া
ব্যাকপ্রোপাগেশন (Backpropagation)
এরর বা ভুলগুলো পেছনের দিকে প্রবাহিত হয় যাতে নেটওয়ার্কটি শিখতে পারে
অ্যাক্টিভেশন ফাংশন (Activation Functions)
ReLU, সিগময়েড (sigmoid), ট্যানএইচ (tanh) — অর্থাৎ নিউরনগুলোর অন/অফ (on/off) সুইচ
গ্রেডিয়েন্ট ডিসেন্ট (Gradient Descent)
সবচেয়ে নিচু পয়েন্ট বা বিন্দুটি খুঁজে পেতে পাহাড়ের ঢাল বেয়ে নিচে নামুন