পাঠ ১৫ · ৩৫-এর মধ্যে · মডিউল ৪
Home / AI Courses / Math for AI & ML / জ্যাকোবিয়ান ও হেসিয়ান

জ্যাকোবিয়ান ও হেসিয়ান

Jacobians & Hessians
১২ মিনিট পড়া মাঝারি · Intermediate NumPy কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • জ্যাকোবিয়ান ম্যাট্রিক্সের সংজ্ঞা ও কখন এটি দরকার হয়
  • হেসিয়ান ম্যাট্রিক্সের সংজ্ঞা ও এটি হাতে বের করার পদ্ধতি
  • হেসিয়ান কেন প্রতিসম হয় (Clairaut/Schwarz উপপাদ্য, প্রমাণ ছাড়া বিবৃতি)
  • হেসিয়ান ও পাঠ ১২-এর কোয়াড্রেটিক ফর্মের মধ্যে সংযোগ

১ · জ্যাকোবিয়ান ম্যাট্রিক্স — যখন আউটপুট একাধিক

পাঠ ১৪-এ আমরা $f: \mathbb{R}^n \to \mathbb{R}$ (একাধিক ইনপুট, কিন্তু একটি মাত্র স্কেলার আউটপুট) ফাংশনের গ্রেডিয়েন্ট দেখেছি। কিন্তু নিউরাল নেটওয়ার্কের একটি লেয়ার সাধারণত একাধিক আউটপুট তৈরি করে — অর্থাৎ $\mathbf{f}: \mathbb{R}^n \to \mathbb{R}^m$, যেখানে $\mathbf{f} = (f_1, f_2, \dots, f_m)$। এমন ফাংশনের জন্য প্রতিটি আউটপুট $f_i$-এর প্রতিটি ইনপুট $x_j$-এর সাপেক্ষে একটি করে পার্শিয়াল ডেরিভেটিভ থাকে — এই সবগুলো একসাথে একটি ম্যাট্রিক্সে সাজালে পাওয়া যায় জ্যাকোবিয়ানJacobianএকটি ভেক্টর-মানের ফাংশনের সব প্রথম পার্শিয়াল ডেরিভেটিভের ম্যাট্রিক্স — প্রতিটি আউটপুটের জন্য একটি সারি।:

$$ J_{ij} = \frac{\partial f_i}{\partial x_j}, \qquad \mathbf{J} = \begin{pmatrix} \dfrac{\partial f_1}{\partial x_1} & \cdots & \dfrac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial f_m}{\partial x_1} & \cdots & \dfrac{\partial f_m}{\partial x_n} \end{pmatrix} $$

জ্যাকোবিয়ানের আকার $m \times n$ — $m$টি আউটপুট, $n$টি ইনপুট। খেয়াল করুন, প্রতিটি সারি $i$ আসলে $f_i$-এর গ্রেডিয়েন্ট (পাঠ ১৪) — অর্থাৎ জ্যাকোবিয়ান হলো একাধিক গ্রেডিয়েন্ট ভেক্টরকে সারি করে সাজানো একটি ম্যাট্রিক্স।

উদাহরণ — $\mathbf{f}(x,y) = (x^2y,\ 3x+y^2)$, অর্থাৎ $f_1=x^2y$, $f_2=3x+y^2$। তাহলে:

$$ \mathbf{J} = \begin{pmatrix} 2xy & x^2 \\ 3 & 2y \end{pmatrix} $$

কেন এটি লাগে? একটি নিউরাল নেটওয়ার্ক লেয়ারের আউটপুট সাধারণত একাধিক নিউরনের ভেক্টর। ব্যাকপ্রপাগেশনে (মডিউল ৫) যখন এমন একটি লেয়ারের মধ্য দিয়ে গ্রেডিয়েন্ট "পিছনে পাঠাতে" হয়, তখন ঠিক এই জ্যাকোবিয়ান ম্যাট্রিক্সই চেইন রুলের গুণনে ব্যবহৃত হয়।

২ · হেসিয়ান ম্যাট্রিক্স — দ্বিতীয় পার্শিয়াল ডেরিভেটিভ

এখন স্কেলার-মানের ফাংশন $f: \mathbb{R}^n \to \mathbb{R}$-এ ফিরে আসি, কিন্তু এবার দ্বিতীয় ডেরিভেটিভ নিতে চাই — অর্থাৎ গ্রেডিয়েন্টের গ্রেডিয়েন্ট। প্রতিটি জোড়া ভ্যারিয়েবল $(x_i, x_j)$-এর জন্য একটি করে দ্বিতীয় পার্শিয়াল ডেরিভেটিভ $\partial^2 f/\partial x_i \partial x_j$ থাকে — এই সবগুলো একসাথে একটি $n\times n$ ম্যাট্রিক্সে সাজালে পাওয়া যায় হেসিয়ানHessianএকটি স্কেলার-মানের ফাংশনের সব দ্বিতীয় পার্শিয়াল ডেরিভেটিভের বর্গাকার ম্যাট্রিক্স।:

$$ H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}, \qquad \mathbf{H} = \begin{pmatrix} \dfrac{\partial^2 f}{\partial x_1^2} & \cdots & \dfrac{\partial^2 f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \dfrac{\partial^2 f}{\partial x_n \partial x_1} & \cdots & \dfrac{\partial^2 f}{\partial x_n^2} \end{pmatrix} $$

উদাহরণ — $f(x,y) = x^2 + 3xy + y^2$।

প্রথমে গ্রেডিয়েন্ট: $\partial f/\partial x = 2x+3y$, $\partial f/\partial y = 3x+2y$। এবার প্রতিটি পার্শিয়াল ডেরিভেটিভকে আবার ডেরাইভ করি:

$\partial^2 f/\partial x^2 = 2$,   $\partial^2 f/\partial x \partial y = 3$,   $\partial^2 f/\partial y \partial x = 3$,   $\partial^2 f/\partial y^2 = 2$।

$$ \mathbf{H} = \begin{pmatrix} 2 & 3 \\ 3 & 2 \end{pmatrix} $$

৩ · হেসিয়ান কেন প্রতিসম — Clairaut/Schwarz উপপাদ্য

উপরের উদাহরণে লক্ষ করুন $\partial^2 f/\partial x \partial y = \partial^2 f/\partial y \partial x = 3$ — একই মান, ক্রম যেভাবেই ডেরাইভ করা হোক না কেন। এটি কাকতালীয় নয়। Clairaut/Schwarz উপপাদ্য বলে — যদি একটি ফাংশনের দ্বিতীয় পার্শিয়াল ডেরিভেটিভগুলো ঐ অঞ্চলে অবিচ্ছিন্ন (continuous) হয়, তাহলে মিশ্র পার্শিয়াল ডেরিভেটিভ ডেরাইভ করার ক্রম কোনো প্রভাব ফেলে না:

$$ \frac{\partial^2 f}{\partial x_i \partial x_j} = \frac{\partial^2 f}{\partial x_j \partial x_i} $$

এই উপপাদ্যের সম্পূর্ণ প্রমাণ এই কোর্সের পরিসীমার বাইরে (এটি real analysis-এর একটি ফলাফল), কিন্তু ফলাফলটি গুরুত্বপূর্ণ — ML-এ প্রায় সব ফাংশনই যথেষ্ট মসৃণ (smooth), তাই ব্যবহারিকভাবে হেসিয়ান সবসময় প্রতিসম ধরে নেওয়া যায়।

৪ · হেসিয়ান = একটি কোয়াড্রেটিক ফর্ম

পাঠ ১২-তে আমরা কোয়াড্রেটিক ফর্ম $\mathbf{x}^T\mathbf{A}\mathbf{x}$ এবং positive-definite ম্যাট্রিক্স দেখেছি। হেসিয়ান নিজেই একটি প্রতিসম ম্যাট্রিক্স, তাই একটি ফাংশনের স্থানীয় (local) আচরণ বোঝার জন্য আমরা একে একটি কোয়াড্রেটিক ফর্ম হিসেবে ব্যবহার করতে পারি — একটি critical point-এর কাছাকাছি $f$-এর দ্বিতীয়-ক্রম Taylor অনুমান হলো:

$$ f(\mathbf{x}_0 + \boldsymbol\delta) \approx f(\mathbf{x}_0) + \nabla f(\mathbf{x}_0)^T \boldsymbol\delta + \frac{1}{2}\boldsymbol\delta^T \mathbf{H} \boldsymbol\delta $$

একটি critical point-এ $\nabla f(\mathbf{x}_0) = \mathbf{0}$, তাই ফাংশনটি ঐ বিন্দুর আশেপাশে কেমন আচরণ করবে তা পুরোপুরি নির্ভর করে $\boldsymbol\delta^T \mathbf{H} \boldsymbol\delta$ পদের উপর — অর্থাৎ হেসিয়ান positive definite, negative definite, নাকি indefinite তার উপর।

মূল কথা · Key takeaway

পাঠ ১২-তে শেখা definiteness টেস্ট (eigenvalue-এর চিহ্ন) এখন সরাসরি ব্যবহার করা যায়: হেসিয়ানের eigenvalue সব ধনাত্মক হলে সেই critical point একটি local minimum, সব ঋণাত্মক হলে local maximum, আর মিশ্র চিহ্ন হলে একটি saddle point। পরবর্তী পাঠ (১৬) এই ফলাফলটিকেই সম্পূর্ণ প্রমাণসহ কাজে লাগাবে।

৫ · কোড দিয়ে হেসিয়ান হিসাব করা

নিচে $f(x,y) = x^2+3xy+y^2$-এর হেসিয়ান NumPy দিয়ে সংখ্যাগতভাবে (finite differences) হিসাব করে অ্যানালিটিক্যাল ফলাফল $\begin{pmatrix}2&3\\3&2\end{pmatrix}$-এর সাথে মিলিয়ে দেখা হলো, এবং প্রতিসাম্যও যাচাই করা হলো।

Python · NumPy
import numpy as np

def f(v):
    x, y = v[0], v[1]
    return x**2 + 3*x*y + y**2

def numerical_hessian(func, v, step=1e-4):
    n = len(v)
    H = np.zeros((n, n))
    for i in range(n):
        for j in range(n):
            v_pp, v_pm = v.copy(), v.copy()
            v_mp, v_mm = v.copy(), v.copy()
            v_pp[i] += step; v_pp[j] += step
            v_pm[i] += step; v_pm[j] -= step
            v_mp[i] -= step; v_mp[j] += step
            v_mm[i] -= step; v_mm[j] -= step
            H[i, j] = (func(v_pp) - func(v_pm) - func(v_mp) + func(v_mm)) / (4 * step**2)
    return H

v0 = np.array([1.0, 2.0])
H_numerical = numerical_hessian(f, v0)
H_analytical = np.array([[2.0, 3.0], [3.0, 2.0]])

print("সংখ্যাগত হেসিয়ান:\n", np.round(H_numerical, 3))
print("অ্যানালিটিক্যাল হেসিয়ান:\n", H_analytical)
print("প্রতিসম কি না (H == H^T)?", np.allclose(H_numerical, H_numerical.T, atol=1e-2))

    

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ জ্যাকোবিয়ান ও গ্রেডিয়েন্টের মধ্যে সম্পর্ক কী — একটি কি আরেকটির বিশেষ ক্ষেত্র?

হ্যাঁ। যখন $m=1$ (অর্থাৎ ফাংশনের আউটপুট একটি মাত্র স্কেলার), জ্যাকোবিয়ান হয়ে যায় একটি $1\times n$ সারি-ম্যাট্রিক্স, যার উপাদানগুলো ঠিক গ্রেডিয়েন্ট ভেক্টরের মতোই ($\partial f/\partial x_1, \dots$)। তাই গ্রেডিয়েন্ট আসলে জ্যাকোবিয়ানেরই একটি বিশেষ (স্কেলার-আউটপুট) ক্ষেত্র।

প্র ০২ হেসিয়ানের প্রতিসাম্য ব্যবহারিকভাবে কেন সুবিধাজনক?

প্রতিসম ম্যাট্রিক্সের eigenvalue সবসময় বাস্তব সংখ্যা এবং eigenvector-গুলো পরস্পর orthogonal (পাঠ ১০-এ spectral theorem)। এর মানে হেসিয়ানের definiteness (positive/negative/indefinite) সবসময় সুনির্দিষ্টভাবে eigenvalue-এর চিহ্ন দিয়ে নির্ণয় করা যায় — জটিল সংখ্যার ঝামেলা ছাড়াই। এছাড়া গণনার দিক থেকেও প্রতিসম ম্যাট্রিক্সের জন্য বিশেষায়িত, দ্রুততর অ্যালগরিদম ব্যবহার করা যায়।

প্র ০৩ একটি নিউরাল নেটওয়ার্কের সম্পূর্ণ হেসিয়ান (লক্ষ লক্ষ প্যারামিটারের জন্য) ব্যবহারিকভাবে হিসাব করা হয় না কেন?

$n$টি প্যারামিটারের জন্য হেসিয়ানের আকার $n \times n$ — প্যারামিটার সংখ্যার সাথে বর্গাকারে বাড়ে। লক্ষ লক্ষ (বা কোটি কোটি) প্যারামিটারের একটি আধুনিক নেটওয়ার্কে এই ম্যাট্রিক্স মেমরিতে রাখাই অসম্ভব — এই কারণেই ব্যবহারিক অপ্টিমাইজেশনে (মডিউল ৫) শুধু গ্রেডিয়েন্ট (প্রথম-ক্রম তথ্য) ব্যবহার করা হয়, পুরো হেসিয়ান নয়।

অনুশীলন

  1. হেসিয়ান বের করুন: $f(x,y) = x^3 + xy^2$-এর হেসিয়ান ম্যাট্রিক্স হাতে বের করুন।

    $\partial f/\partial x = 3x^2+y^2$, $\partial f/\partial y=2xy$। দ্বিতীয় ডেরিভেটিভ: $\partial^2 f/\partial x^2=6x$, $\partial^2 f/\partial x\partial y=2y$, $\partial^2 f/\partial y^2=2x$। তাই $\mathbf{H} = \begin{pmatrix}6x & 2y \\ 2y & 2x\end{pmatrix}$ — লক্ষ করুন এটি প্রতিসম।

  2. জ্যাকোবিয়ান বের করুন: $\mathbf{f}(x,y) = (xy,\ x+y^2,\ 2x)$-এর জ্যাকোবিয়ান ম্যাট্রিক্স লিখুন (এটি $3\times2$ হওয়া উচিত)।

    $$ \mathbf{J} = \begin{pmatrix} y & x \\ 1 & 2y \\ 2 & 0 \end{pmatrix} $$

  3. কোড চালান: উপরের code cell-এ v0-এর মান বদলে (যেমন [0.0, 0.0]) Run চাপুন — হেসিয়ান কি বদলায়? কেন বদলায় না বা বদলায় তা যুক্তি দিয়ে ব্যাখ্যা করুন।

    এই নির্দিষ্ট ফাংশনে ($f=x^2+3xy+y^2$) হেসিয়ান কখনো বদলায় না — এটি $\mathbf{x}$-এর উপর নির্ভর করে না, কারণ ফাংশনটি সম্পূর্ণ দ্বিঘাত (quadratic)। সাধারণভাবে (যেমন আগের অনুশীলনের $x^3+xy^2$) হেসিয়ান বিন্দুভেদে বদলাতে পারে, কারণ তাতে উচ্চতর-ক্রম পদ আছে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

পূর্ববর্তী পাঠ
পার্শিয়াল ডেরিভেটিভ ও গ্রেডিয়েন্ট ভেক্টর