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

গ্রেডিয়েন্ট ডিসেন্ট (Gradient Descent)

সবচেয়ে নিচু পয়েন্ট বা বিন্দুটি খুঁজে পেতে পাহাড়ের ঢাল বেয়ে নিচে নামুন
per step:ব্যাচ (batch)-এর জন্য O(n * d), স্টোকাসটিক (stochastic)-এর জন্য O(d)convergence: এটি মূলত লার্নিং রেট (learning rate) এবং ল্যান্ডস্কেপের আকারের (landscape shape) ওপর নির্ভর করেvariants:ব্যাচ (Batch), মিনি-ব্যাচ (Mini-batch), স্টোকাসটিক বা এসজিডি (Stochastic (SGD))

ভাবুন তো আপনি চোখ বেঁধে একটি পাহাড়ি রাস্তায় দাঁড়িয়ে আছেন। আপনি কিছুই দেখতে পাচ্ছেন না, কিন্তু আপনি পায়ের নিচের ঢালটি খুব ভালোভাবে অনুভব করতে পারছেন। এক্ষেত্রে আপনার লক্ষ্য হলো: পাহাড়ের সবচেয়ে নিচু উপত্যকা বা জায়গাটি খুঁজে বের করা।

এক্ষেত্রে আপনি কী করবেন? খুব সহজ — আপনি অনুভব করবেন যে পাহাড়ের কোন দিকটি নিচের দিকে ঢালু হয়ে গেছে, এবং সেদিকে এক পা এক পা করে এগোতে থাকবেন। এরপর আপনি আবার অনুভব করবেন, আবার পা ফেলবেন। আর এভাবেই চলতে চলতে, অবশেষে আপনি উপত্যকার সবচেয়ে নিচু জায়গায় গিয়ে পৌঁছাবেন।

আর এটিই হলো গ্রেডিয়েন্ট ডিসেন্ট (gradient descent)। এখানকার "ল্যান্ডস্কেপ (landscape) বা দৃশ্যপট"-টি হলো মডেলের লস ফাংশন (loss function) — একটি বিশাল পৃষ্ঠদেশ বা সারফেস, যেখানে এর উচ্চতা হলো মডেলটি ঠিক কতটা ভুল করছে তার মাপকাঠি। আর এখানকার "স্লোপ (slope) বা ঢাল" হলো এর গ্রেডিয়েন্ট (gradient) — অর্থাৎ গাণিতিকভাবে আপনার মডেলের ভুল ঠিক কোন দিকে সবচেয়ে বেশি হারে বাড়ছে। তাই ভুল বা এরর কমানোর জন্য আপনাকে মূলত এর বিপরীত দিকে (অর্থাৎ নিচের দিকে বা downhill) পা বাড়াতে হবে।

গ্রেডিয়েন্ট (The gradient): আপনার কম্পাস

গ্রেডিয়েন্ট (Gradient) হলো মূলত কোনো জিনিসের সবচেয়ে খাড়া বা উঁচু দিকটি বোঝানোর একটি একটু কঠিন ও গাণিতিক নাম। আপনি যদি কোনো পাহাড়ের ওপর থাকেন এবং সেখানকার গ্রেডিয়েন্ট যদি উত্তর-পূর্ব (northeast) এবং ওপরের দিকে হয়, তবে এটি থেকে সবচেয়ে দ্রুত নিচে নামার জন্য আপনাকে মূলত এর ঠিক উল্টোদিকে অর্থাৎ দক্ষিণ-পশ্চিম এবং নিচের দিকে (যা হলো নেগেটিভ গ্রেডিয়েন্ট) পা বাড়াতে হবে।

অঙ্কের হিসাবে, একটি নেটওয়ার্কের ভেতরে থাকা প্রতিটি ওয়েট (w)-এর ক্ষেত্রে:

w_new = w_old - learning_rate * (dLoss/dw)

এখানকার লার্নিং রেট (learning rate) নির্ধারণ করে যে আপনার নেওয়া প্রতিটি স্টেপ বা পদক্ষেপ ঠিক কতটা বড় হবে। এটি অনেকটা চোখ বাঁধা অবস্থায় পাহাড় থেকে নামার সময় আপনার এক পায়ের সাথে অন্য পায়ের দূরত্বের (stride length) মতো কাজ করে।

লার্নিং রেট বা শেখার হার (The learning rate): গোল্ডিলক্স সমস্যা (Goldilocks problem)

এটি হলো সুর বা টিউন মেলানোর জন্য সবচেয়ে গুরুত্বপূর্ণ একটি নচ বা কাঁটা:

  • অনেক বেশি বড় (Too large): আপনি অনেক বড় বড় পা ফেলছেন এবং বারবার উপত্যকার এক পাহাড় থেকে অন্য পাহাড়ের দিকে লাফিয়ে চলে যাচ্ছেন, কিন্তু একেবারেই নিচে নামতে পারছেন না। এর ফলে এখানকার লসগুলো মারাত্মকভাবে এদিক-ওদিক ওঠানামা করে কিংবা একেবারে বোমার মতো ফেটে যায় বা এক্সপ্লোড করে (explodes)।
  • অনেক বেশি ছোট (Too small): আপনি খুব সাবধানে ছোট ছোট বাচ্চার মতো পা ফেলছেন। হয়তো এভাবেই আপনি একসময় না একসময় ঠিকই নিচে পৌঁছাবেন, কিন্তু সেখানে যেতে আপনার হয়তো জন্ম পার হয়ে যাবে। আর এই ধরনের ছোট লার্নিং রেটের কারণে একটি মডেল ট্রেইন হতে কয়েক ঘণ্টার বদলে কয়েক সপ্তাহ পর্যন্ত সময় লেগে যেতে পারে।
  • একেবারে পারফেক্ট (Just right): আপনি খুব সুন্দরভাবে একেবারে নিচে পৌঁছে গেছেন। এটির জন্য শুরুতে বড় লার্নিং রেট দিয়ে শুরু করতে হয় এবং এরপর ধীরে ধীরে তা কমাতে হয় (আর এই পদ্ধতিকে লার্নিং রেট শিডিউল বা learning rate schedule বলা হয়)।

গ্রেডিয়েন্ট ডিসেন্টের তিনটি ধরন (Three flavors of gradient descent)

ব্যাচ গ্রেডিয়েন্ট ডিসেন্ট (Batch Gradient Descent)

এক্ষেত্রে কেবল একটি স্টেপ বা পদক্ষেপ নেওয়ার আগেই সবগুলো ট্রেইনিং উদাহরণ বা এক্সাম্পল ব্যবহার করে গ্রেডিয়েন্ট হিসাব করা হয়। এর দিক বা ডিরেকশনগুলো অনেক নিখুঁত হলেও, বড় ডেটাসেটের ক্ষেত্রে এটি বেশ ব্যয়বহুল একটি পদ্ধতি। একে তুলনা করা যায় প্রতিটি পদক্ষেপ ফেলার আগে চারপাশের পুরো দৃশ্যপট বা পাহাড়টি খুব ভালোভাবে মেপে দেখার সাথে।

স্টোকাসটিক গ্রেডিয়েন্ট ডিসেন্ট (Stochastic Gradient Descent বা SGD)

যেকোনো একটি রেন্ডম বা দৈব উদাহরণ ব্যবহার করে গ্রেডিয়েন্ট হিসাব করে আর এরপর সাথে সাথেই একটি পদক্ষেপ নেওয়া হয়। এর প্রতিটি স্টেপ অনেক দ্রুত (fast) হলেও এগুলো অনেক বেশি নয়েজি (noisy) বা এলোমেলো হয় — যা অনেকটা রাস্তাঘাটে থাকা অচেনা মানুষের কাছ থেকে ডিরেকশন বা পথ চিনে চলার মতো একটি ব্যাপার। এর পথটি অনেক বেশি আঁকাবাঁকা হলেও, আপনি শেষপর্যন্ত ঠিকই পাহাড়ের নিচে গিয়ে পৌঁছাবেন।

মিনি-ব্যাচ গ্রেডিয়েন্ট ডিসেন্ট (Mini-batch Gradient Descent)

সবচেয়ে পারফেক্ট জিনিস বা সুইট স্পট (sweet spot)। গ্রেডিয়েন্ট অনুমান করার জন্য এটি একটি ছোট ব্যাচ (small batch) (যেমন: ৩২, ৬৪ বা ১২৮টি উদাহরণ) ব্যবহার করে। এটি এসজিডি (SGD)-এর চেয়ে অনেক কম নয়েজি এবং ব্যাচ (batch) জিডির চেয়ে অনেক বেশি ফাস্ট বা দ্রুত কাজ করে। আর বাস্তবে সবাই মূলত এই পদ্ধতিটিই সবচেয়ে বেশি ব্যবহার করে।

গ্রেডিয়েন্ট ডিসেন্ট: সবচেয়ে ভালো লাইনটি খুঁজে বের করা (Gradient Descent: Finding the Best Line)

import numpy as np
# সাধারণ ডেটাসেট (Simple dataset): y ≈ 2x + 1
X = np.array([1, 2, 3, 4, 5], dtype=float)
y = np.array([3, 5, 7, 9, 11], dtype=float)
# দৈব বা রেন্ডম ওয়েট (random weight) এবং বায়াস (bias) দিয়ে শুরু
w = 0.0
b = 0.0
lr = 0.01
for epoch in range(100):
# ফরোয়ার্ড পাস (Forward pass): প্রেডিকশন
y_pred = w * X + b
# লস (Loss): গড় বর্গ ত্রুটি (Mean Squared Error)
loss = np.mean((y - y_pred) ** 2)
# গ্রেডিয়েন্ট (Gradients) (w এবং b-এর সাথে লস বা ভুলের পরিমাণ কীভাবে পরিবর্তিত হয়)
dw = -2 * np.mean(X * (y - y_pred))
db = -2 * np.mean(y - y_pred)
# আপডেট করা (Update) (পাহাড়ের নিচের দিকে পা বাড়ানো)
w -= lr * dw
b -= lr * db
if epoch % 20 == 0:
print(f"ইপক (Epoch) {epoch:3d}: w={w:.3f}, b={b:.3f}, লস (loss)={loss:.4f}")
print(f"\nশেখা বা লার্নড (Learned): y = {w:.2f}x + {b:.2f} (টার্গেট বা লক্ষ্য (target): y = 2x + 1)")
Output
ইপক (Epoch)   0: w=0.140, b=0.040, লস (loss)=65.0000
ইপক (Epoch)  20: w=1.727, b=0.543, লস (loss)=0.4274
ইপক (Epoch)  40: w=1.926, b=0.795, লস (loss)=0.0656
ইপক (Epoch)  60: w=1.970, b=0.899, লস (loss)=0.0149
ইপক (Epoch)  80: w=1.987, b=0.949, লস (loss)=0.0039

শেখা বা লার্নড (Learned): y = 1.99x + 0.97  (টার্গেট বা লক্ষ্য (target): y = 2x + 1)
Note: গ্রেডিয়েন্ট ডিসেন্ট (Gradient descent) যে আপনাকে সব সময় গ্লোবাল মিনিমাম (global minimum) বা সবচেয়ে নিচু জায়গাটি খুঁজে দেবে তার কোনো নিশ্চয়তা বা গ্যারান্টি নেই — অনেক সময় আপনি হয়তো একটি লোকাল মিনিমাম বা local minimum (যা সবচেয়ে নিচু জায়গা নয়) এমন কোনো উপত্যকায় গিয়েও আটকে পড়তে পারেন। তবে বাস্তবে, লক্ষ লক্ষ প্যারামিটার থাকা নিউরাল নেটওয়ার্কগুলোর ক্ষেত্রে এই লোকাল মিনিমা বা local minima নিয়ে খুব একটা ভাবতে হয় না, কারণ এখানকার লস ল্যান্ডস্কেপগুলোতে (loss landscape) এমনিতেই সব সময় সঠিক দিকে যাওয়ার জন্য অনেক পথ থাকে। আমাদের সবচেয়ে বড় শত্রু বা ভয়ের কারণটি হলো স্যাডল পয়েন্ট (saddle points) এবং প্লেটাস বা সমতল ভূমি (plateaus)।

Key Metrics

ব্যাচ জিডি (Batch GD)
সবগুলো অর্থাৎ n সংখ্যক উদাহরণ ব্যবহার করে — এটি একেবারে নিখুঁত, তবে অনেক ব্যয়বহুল
প্রতিটি স্টেপে অনেক ধীরগতির (Slow per step) O(n * d) per step
স্টোকাসটিক জিডি (Stochastic GD)
১টি উদাহরণ ব্যবহার করে — এটি বেশ নয়েজি (noisy) বা এলোমেলো হলেও অনেক ফাস্ট
প্রতিটি স্টেপে অনেক দ্রুত (Fast per step) O(d) per step
মিনি-ব্যাচ জিডি (Mini-batch GD)
দুটো জগতেরই সেরা জিনিস — বাস্তবে এটাই হলো স্ট্যান্ডার্ড বা নিয়ম
ব্যালেন্সড বা ভারসাম্যপূর্ণ (Balanced) O(batch * d) per step
কনভার্জেন্স (Convergence)
অনেক বেশি (Too high) → লাফিয়ে অন্যদিকে চলে যায় (diverge), অনেক কম (too low) → হামাগুড়ি দেওয়া বা ক্রলিং (crawl) করে, একেবারে পারফেক্ট (just right) → খুব মসৃণভাবে (smooth) চলে
মান অনুযায়ী ভিন্ন হয় (Varies) লার্নিং রেট বা শেখার হারের ওপর নির্ভর করে (Depends on learning rate)

ছোট কুইজ

চোখ বাঁধা হাইকার (blindfolded hiker) বা পাহাড়ি অভিযাত্রীর উদাহরণে, 'লার্নিং রেট (learning rate)' বলতে মূলত কী বোঝানো হয়েছে?
Challenge

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

ব্যাকপ্রোপাগেশন (Backpropagation)
এরর বা ভুলগুলো পেছনের দিকে প্রবাহিত হয় যাতে নেটওয়ার্কটি শিখতে পারে
লিনিয়ার রিগ্রেশন (Linear Regression)
আপনার ডেটাগুলোর মাঝখান দিয়ে সবচেয়ে ভালো বা পারফেক্ট একটি সোজা লাইন টানুন
নিউরাল নেটওয়ার্ক বেসিকস (Neural Network Basics)
লজিকের মতো নিউরনগুলো একে অপরের সাথে স্তরে স্তরে যুক্ত থাকে
অ্যাক্টিভেশন ফাংশন (Activation Functions)
ReLU, সিগময়েড (sigmoid), ট্যানএইচ (tanh) — অর্থাৎ নিউরনগুলোর অন/অফ (on/off) সুইচ