গ্রেডিয়েন্ট ডিসেন্ট — গাণিতিকভাবে
এই পাঠে যা শিখবেন
- Taylor অনুমান থেকে গ্রেডিয়েন্ট ডিসেন্ট কেন কাজ করে তার সম্পূর্ণ যুক্তি
- আপডেট নিয়ম ও লার্নিং রেটের ভূমিকা
- লার্নিং রেট খুব বড়/ছোট হলে কী ঘটে — ট্রেডঅফ বোঝা
- NumPy দিয়ে একটি quadratic ফাংশনে গ্রেডিয়েন্ট ডিসেন্ট বাস্তবায়ন করে কনভার্জেন্স দেখা
১ · কেন ঋণাত্মক গ্রেডিয়েন্টের দিকে যাওয়া উচিত
পাঠ ১৪-এ আমরা দেখেছি $\nabla f(\mathbf{x})$ সবচেয়ে দ্রুত বৃদ্ধির দিক নির্দেশ করে। তাই স্বাভাবিকভাবেই মনে হয় $-\nabla f(\mathbf{x})$ দিকে গেলে ফাংশনটি কমবে — কিন্তু "মনে হওয়া" যথেষ্ট নয়, এই পাঠে আমরা এটি কঠোরভাবে প্রমাণ করব একটি প্রথম-ক্রম Taylor অনুমান ব্যবহার করে।
একটি বিন্দু $\mathbf{x}$-এর কাছাকাছি একটি ছোট পদক্ষেপ $\Delta\mathbf{x}$ নিলে, ফাংশনের মান আনুমানিকভাবে বদলায় এভাবে (গ্রেডিয়েন্টের সংজ্ঞা থেকেই):
$$ f(\mathbf{x} + \Delta\mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \Delta\mathbf{x} $$
এখন যদি আমরা নির্দিষ্টভাবে $\Delta\mathbf{x} = -\eta \nabla f(\mathbf{x})$ বেছে নিই (কোনো ছোট ধনাত্মক সংখ্যা $\eta > 0$-এর জন্য), তাহলে:
$$ f(\mathbf{x} - \eta \nabla f(\mathbf{x})) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T \big(-\eta \nabla f(\mathbf{x})\big) = f(\mathbf{x}) - \eta \|\nabla f(\mathbf{x})\|^2 $$
লক্ষ করুন $\|\nabla f(\mathbf{x})\|^2 \geq 0$ সবসময়ই (এটি একটি বর্গ-দৈর্ঘ্য, পাঠ ০৫)। তাই যদি $\nabla f(\mathbf{x}) \neq \mathbf{0}$ হয়, তাহলে $\eta\|\nabla f(\mathbf{x})\|^2 > 0$, অর্থাৎ:
$$ f(\mathbf{x} - \eta \nabla f(\mathbf{x})) < f(\mathbf{x}) \quad \text{(যথেষ্ট ছোট } \eta > 0 \text{-এর জন্য)} $$
এটিই সেই গাণিতিক প্রমাণ — ঋণাত্মক গ্রেডিয়েন্টের দিকে একটি যথেষ্ট ছোট পদক্ষেপ নিলে ফাংশনের মান নিশ্চিতভাবে কমে (যতক্ষণ পর্যন্ত গ্রেডিয়েন্ট শূন্য না হয়ে যায়, অর্থাৎ আমরা একটি critical point-এ না পৌঁছাই)। এটি অনুমান-নির্ভর অনুভূতি নয় — সরাসরি Taylor অনুমান থেকে বের করা সিদ্ধান্ত।
২ · আপডেট নিয়ম
এই ফলাফল থেকেই গ্রেডিয়েন্ট ডিসেন্টGradient Descentপ্রতিটি ধাপে ঋণাত্মক গ্রেডিয়েন্টের দিকে ছোট পদক্ষেপ নিয়ে একটি ফাংশনের মিনিমাম খোঁজার পুনরাবৃত্তিমূলক পদ্ধতি। অ্যালগরিদমের আপডেট নিয়ম আসে — প্রতিটি ধাপে বর্তমান অবস্থান থেকে গ্রেডিয়েন্টের বিপরীত দিকে একটি ছোট পদক্ষেপ নেওয়া:
$$ \mathbf{x}_{t+1} = \mathbf{x}_t - \eta \nabla f(\mathbf{x}_t) $$
এখানে $\eta$ (গ্রিক অক্ষর eta) হলো লার্নিং রেটLearning Rateগ্রেডিয়েন্ট ডিসেন্টের প্রতিটি ধাপে কত বড় পদক্ষেপ নেওয়া হবে তা নিয়ন্ত্রণকারী একটি হাইপারপ্যারামিটার। — প্রতিটি পদক্ষেপের আকার নিয়ন্ত্রণকারী একটি হাইপারপ্যারামিটার। এই আপডেট বারবার প্রয়োগ করলে (যতক্ষণ না $\nabla f \approx \mathbf{0}$) ফাংশনটি ক্রমাগত কমতে থাকে এবং একটি critical point-এর দিকে এগিয়ে যায়।
৩ · লার্নিং রেটের ট্রেডঅফ
উপরের প্রমাণে "যথেষ্ট ছোট $\eta$" শর্তটি গুরুত্বপূর্ণ — বাস্তবে $\eta$-এর মান বেছে নেওয়া একটি সূক্ষ্ম ভারসাম্যের কাজ:
- $\eta$ খুব বড় — Taylor অনুমান আর নির্ভরযোগ্য থাকে না (কারণ এটি শুধু ছোট পদক্ষেপের জন্য বৈধ)। বাস্তবে ফাংশনের মান কমার বদলে বেড়ে যেতে পারে, অথবা মিনিমামের চারপাশে দুলতে (oscillate) থাকতে পারে, এমনকি ডাইভার্জও করতে পারে।
- $\eta$ খুব ছোট — প্রতিটি পদক্ষেপ নিরাপদ, কিন্তু কনভার্জেন্স অত্যন্ত ধীর — মিনিমামে পৌঁছাতে অনেক বেশি ইটারেশন লাগে, যা ব্যবহারিকভাবে সময় ও কম্পিউটেশন অপচয় করে।
বাস্তব ট্রেনিংয়ে এই ভারসাম্য ঠিক করতেই মডিউল ৫-এ momentum, RMSProp ও Adam-এর মতো উন্নত অপ্টিমাইজার (পাঠ ২৩) ব্যবহৃত হয়, যা কার্যকরভাবে প্রতিটি প্যারামিটারের জন্য লার্নিং রেট মানিয়ে নেয়।
৪ · কোড দিয়ে দেখুন — একটি quadratic ফাংশনে গ্রেডিয়েন্ট ডিসেন্ট
নিচে $f(x,y) = x^2 + y^2$ (একটি সহজ, উত্তল ফাংশন, গ্রেডিয়েন্ট $\nabla f = (2x, 2y)$) মিনিমাইজ করতে গ্রেডিয়েন্ট ডিসেন্ট প্রয়োগ করা হলো, শুরুর বিন্দু $(4, 3)$ থেকে। প্রতিটি ইটারেশনে ফাংশনের মান কীভাবে দ্রুত কমে $(0,0)$-এর দিকে এগিয়ে যায় তা লক্ষ করুন।
import numpy as np
def f(v):
return v[0]**2 + v[1]**2
def grad_f(v):
return 2 * v # ∇f = (2x, 2y)
x = np.array([4.0, 3.0]) # শুরুর বিন্দু
eta = 0.1 # লার্নিং রেট
n_iters = 20
print(f"শুরু: x = {x}, f(x) = {f(x):.4f}")
for t in range(n_iters):
x = x - eta * grad_f(x)
if (t + 1) % 5 == 0:
print(f"ইটারেশন {t+1:2d}: x = [{x[0]:.4f}, {x[1]:.4f}], f(x) = {f(x):.6f}")
print(f"\nচূড়ান্ত ফলাফল: x ≈ {x}, f(x) ≈ {f(x):.6f} (প্রকৃত মিনিমাম: x=(0,0), f=0)")
eta-কে 1.1-এর মতো বড় মান দিয়ে চালিয়ে দেখুন (নিজে চেষ্টা করুন) —
$f(x)$ প্রতি ইটারেশনে কমার বদলে বাড়তে থাকবে, কারণ পদক্ষেপ এত বড় যে Taylor অনুমান আর বৈধ থাকে না।
এটিই "লার্নিং রেট খুব বড়" সমস্যার একটি প্রত্যক্ষ প্রদর্শন।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ Taylor অনুমানের প্রমাণে "যথেষ্ট ছোট $\eta$" শর্তটি ঠিক কেন প্রয়োজন?
কারণ $f(\mathbf{x}+\Delta\mathbf{x}) \approx f(\mathbf{x}) + \nabla f(\mathbf{x})^T\Delta\mathbf{x}$ একটি অনুমান, প্রকৃত সমীকরণ নয় — এটি শুধু $\Delta\mathbf{x}$ ছোট হলে নির্ভরযোগ্য (উচ্চতর-ক্রম পদ, যেমন হেসিয়ান-সম্পর্কিত পদ, উপেক্ষা করা হয়েছে)। $\Delta\mathbf{x} = -\eta\nabla f(\mathbf{x})$ বড় হলে (অর্থাৎ $\eta$ বড় হলে) এই উপেক্ষিত পদগুলো আর নগণ্য থাকে না, এবং প্রমাণটি আর বৈধ থাকে না।
প্র ০২ একটি সাধারণ ভুল ধারণা — "গ্রেডিয়েন্ট ডিসেন্ট সবসময় গ্লোবাল মিনিমা খুঁজে পায়।" এটি কতটা সত্য?
শুধু নির্দিষ্ট শর্তে — ফাংশনটি উত্তল ও মসৃণ হলে, এবং লার্নিং রেট যথাযথভাবে বেছে নেওয়া হলে। বেশিরভাগ বাস্তব নিউরাল নেটওয়ার্কের লস ফাংশন উত্তল নয় (পাঠ ১৬), তাই সাধারণভাবে গ্লোবাল মিনিমার নিশ্চয়তা থাকে না — শুধু নিশ্চিত করা যায় যে অ্যালগরিদম কোনো একটি critical point-এর (স্থানীয় মিনিমা বা স্যাডল পয়েন্টের কাছাকাছি) দিকে এগোবে।
প্র ০৩ গ্রেডিয়েন্ট ডিসেন্ট কখন থামা উচিত — কীভাবে বুঝব যে যথেষ্ট কাছে পৌঁছে গেছি?
ব্যবহারিকভাবে $\|\nabla f(\mathbf{x}_t)\|$ (গ্রেডিয়েন্টের দৈর্ঘ্য) একটি খুব ছোট সীমার (threshold) নিচে নেমে গেলে, অথবা একটি নির্দিষ্ট সংখ্যক ইটারেশন শেষ হলে, অথবা ফাংশনের মান আর উল্লেখযোগ্যভাবে কমছে না দেখলে থামানো হয়। উপরের প্রমাণ অনুযায়ী $\nabla f = \mathbf{0}$-এর কাছাকাছি পৌঁছালে আর কার্যকর অগ্রগতি হয় না, তাই এটি একটি স্বাভাবিক থামার সংকেত।
অনুশীলন
-
হাতে হিসাব করুন: $f(x)=x^2$, শুরুর বিন্দু $x_0=5$, লার্নিং রেট $\eta=0.1$। প্রথম দুটি
গ্রেডিয়েন্ট ডিসেন্ট আপডেট ($x_1$ ও $x_2$) হাতে হিসাব করুন।
$f'(x)=2x$। $x_1 = x_0 - \eta \cdot 2x_0 = 5 - 0.1(10) = 4.0$। $x_2 = x_1 - \eta \cdot 2x_1 = 4.0 - 0.1(8.0) = 3.2$। লক্ষ করুন প্রতিবার $x$ একটি নির্দিষ্ট অনুপাতে ($1-2\eta = 0.8$) কমছে, শূন্যের দিকে এগোচ্ছে।
-
যুক্তি দিন: $\eta = 0.5$ দিলে $f(x)=x^2$-এর জন্য কী ঘটবে ($x_0=5$ থেকে শুরু করে)?
$x_1 = 5 - 0.5(10) = 0$ — এক ধাপেই সরাসরি মিনিমামে পৌঁছে যাবে (এই নির্দিষ্ট ফাংশনের জন্য $1-2\eta=0$ হয়ে যায়)। $\eta > 0.5$ দিলে ($1-2\eta$ ঋণাত্মক ও পরম মানে $1$-এর বেশি) $x$ প্রতি ধাপে দিক পালটে বড় হতে থাকবে — ডাইভার্জ করবে।
-
কোড পরীক্ষা করুন: উপরের code cell-এ শুরুর বিন্দু বদলে
[10.0, -5.0]করুন এবংn_iters৫০-এ বাড়িয়ে Run চাপুন — চূড়ান্ত $f(x)$ কত কাছাকাছি পৌঁছায়?একই লার্নিং রেট ($\eta=0.1$) ও উত্তল ফাংশন হওয়ায় শুরুর বিন্দু যেখানেই হোক, ৫০ ইটারেশনের পর $f(x)$ প্রায় শূন্যের অত্যন্ত কাছাকাছি (যেমন $10^{-4}$ মাত্রার) পৌঁছাবে — শুধু কনভার্জ করতে কিছুটা বেশি ইটারেশন লাগবে কারণ শুরুর বিন্দু আরও দূরে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ১৮ — অ্যাক্টিভেশন ফাংশন ও তাদের ডেরিভেটিভ পরবর্তী পাঠ গ্রেডিয়েন্ট ডিসেন্ট চালাতে হলে প্রতিটি লেয়ারের অ্যাক্টিভেশন ফাংশনের ডেরিভেটিভ জানা লাগবে — এই পাঠে সেটাই আসছে।
- সব AI Courses দেখুন ABCL TECH AI Foundations, Python for AI, Machine Learning, Deep Learning, Math for AI ও আরও অনেক কিছু — সব এক জায়গায়।
- Deep Learning কোর্স প্রয়োগ দেখুন PyTorch-এ গ্রেডিয়েন্ট ডিসেন্ট ও optimizer কীভাবে ব্যবহার করা হয় তা দেখতে।