Skip to content

8.3 — Vector Calculus (ভেক্টর ক্যালকুলাস)

এই অধ্যায়ে কী শিখব: scalar field (স্কেলার ফিল্ড) ও vector field (ভেক্টর ফিল্ড)-এর ধারণা এবং deep learning-এর signal (সিগন্যাল); continuity (সন্ততি) ও smoothness (মসৃণতা); derivative (অন্তরকলন) ও gradient (গ্রেডিয়েন্ট) \(\nabla f\); directional derivative (দিকনির্দেশক অন্তরজ) ও partial derivative (আংশিক অন্তরজ); Jacobian (জ্যাকোবিয়ান); integral (যোগজ/ইন্টিগ্রাল); divergence (অপসারণ/ডাইভারজেন্স) \(\nabla\cdot F\); Laplacian (ল্যাপ্লাসিয়ান) \(\Delta f=\nabla\cdot\nabla f\); এবং সবশেষে deep learning-এ gradient descent (গ্রেডিয়েন্ট ডিসেন্ট) optimization ও তার update rule।

উৎস (source): Mathematical Foundations of Geometric Deep Learning — Borde ও Bronstein।


১. কেন শিখব? (Motivation)

আগের দুই অধ্যায়ে আমরা algebraic structure (বীজগাণিতিক কাঠামো) আর geometric structure (norm, metric, inner product) দেখেছি। সেগুলো ছিল স্থির (static) — একটা space-এর গঠন। কিন্তু বাস্তব জগৎ পরিবর্তনশীল: ঘরের প্রতিটা বিন্দুতে তাপমাত্রা আলাদা, নদীর প্রতিটা বিন্দুতে পানির বেগ আলাদা। এই "space জুড়ে পরিবর্তিত রাশি"-কেই বলে field (ফিল্ড), আর এই পরিবর্তন মাপার হাতিয়ারই হলো vector calculus।

কেন এটা deep learning-এর জন্য এত গুরুত্বপূর্ণ? তিনটা মূল কারণ:

১) Neural network training মানেই optimization। একটা neural network-এর হাজার-লক্ষ-কোটি parameter (weight) \(w\) থাকে। এদের এমনভাবে ঠিক করতে হয় যাতে model-এর ভুল (loss) সবচেয়ে কম হয়। এই loss \(L(w)\) আসলে parameter-এর একটা scalar field — প্রতিটা weight-বিন্যাসকে একটা সংখ্যা (ভুলের পরিমাণ) দেয়। এই field-এর সবচেয়ে নিচু জায়গা (minimum) খুঁজে বের করা মানেই training। আর সেই খোঁজার মূল হাতিয়ার হলো gradient \(\nabla L(w)\) — কোন দিকে গেলে loss দ্রুত বাড়ে/কমে তার দিকনির্দেশনা।

২) Gradient descent। পুরো deep learning যে একটা সরল নিয়মে দাঁড়িয়ে আছে — "gradient-এর উল্টো দিকে ছোট এক পা এগোও" — সেই নিয়ম (gradient descent) বুঝতে gradient-এর গণিত লাগে। এই অধ্যায়ের শেষে আমরা তার update rule \(w_{t+1}=w_t-\eta\nabla L(w_t)\) লাইন-ধরে-ধরে বুঝব।

৩) Laplacian ও Geometric Deep Learning। PDE (partial differential equation), diffusion (ব্যাপন) প্রক্রিয়া, তাপ-প্রবাহ — এসবের কেন্দ্রে থাকে Laplacian \(\Delta\)। Geometric Deep Learning-এ graph বা manifold-এর ওপর সংজ্ঞায়িত function কতটা "মসৃণ" (smooth) তা মাপতে graph Laplacian ব্যবহার হয়। তাই divergence ও Laplacian শেখা মানে শুধু ক্লাসিক্যাল ক্যালকুলাস নয় — আধুনিক GDL অ্যালগরিদমের ভিত্তি।

মূল স্বজ্ঞা

  • Scalar field \(f:\mathbb{R}^n\to\mathbb{R}\): space-এর প্রতিটা বিন্দুতে একটা সংখ্যা (মান আছে, দিক নেই) — যেমন তাপমাত্রা।
  • Vector-valued field \(F:\mathbb{R}^n\to\mathbb{R}^m\): প্রতিটা বিন্দুতে একটা vector। বাতাসের বেগের মতো spatial vector field ও standard divergence-এর ক্ষেত্রে output dimension input dimension-এর সমান, অর্থাৎ \(m=n\)
  • Gradient \(\nabla f\): scalar field-কে ভেক্টর field-এ বদলে দেয় — প্রতিটা বিন্দুতে "সবচেয়ে দ্রুত বাড়ার দিক ও হার"।
  • Divergence \(\nabla\cdot F\): vector field-কে scalar field-এ বদলে দেয় — প্রতিটা বিন্দুতে "কতটা বাইরের দিকে ছড়াচ্ছে"।
  • Laplacian \(\Delta f=\nabla\cdot\nabla f\): আগে gradient, তারপর divergence — function কোথায় "কুঁজো/গর্ত" (curvature) তা মাপে।
  • Gradient descent: পাহাড়ে অন্ধকারে দাঁড়িয়ে সবচেয়ে খাড়া নিচু দিকে এক পা এগোনো — বারবার, যতক্ষণ না উপত্যকার তলায় পৌঁছাও।

২. মূল ধারণা (Core idea)

স্কেলার ফিল্ড, ভেক্টর ফিল্ড ও signal

শুরুতেই একটা সূক্ষ্ম কিন্তু জরুরি পার্থক্য: vector space (ভেক্টর স্পেস) আর vector field (ভেক্টর ফিল্ড) এক জিনিস নয়। Vector space একটা বিমূর্ত বীজগাণিতিক কাঠামো (যোগ ও scalar গুণের নিয়ম)। কিন্তু field মানে "space জুড়ে বিন্দুতে-বিন্দুতে বদলে যাওয়া রাশি" — এটা একটা function

Scalar field (স্কেলার ফিল্ড): এটা এমন একটা function

\[f:\mathbb{R}^n\to\mathbb{R},\qquad f(x)=f(x_1,\dots,x_n),\]

যা \(n\)-মাত্রিক space-এর প্রতিটা বিন্দুকে একটা একক scalar (সংখ্যা) দেয়। উদাহরণ: \(\mathbb{R}^3\)-এ \(f(x,y,z)\) হতে পারে একটা ঘরের \((x,y,z)\) বিন্দুতে তাপমাত্রা। এই মানের magnitude (মান) আছে কিন্তু direction (দিক) নেই — ২৫ ডিগ্রি বললেই হলো, "কোন দিকে ২৫ ডিগ্রি" প্রশ্নটাই অর্থহীন।

Vector field (ভেক্টর ফিল্ড): এটা এমন একটা function

\[F:\mathbb{R}^n\to\mathbb{R}^m,\]

যা প্রতিটা বিন্দুতে একটা ভেক্টর দেয়। যেমন \(\mathbb{R}^3\)-এ

\[F(x,y,z)=\big(F_1(x,y,z),\,F_2(x,y,z),\,F_3(x,y,z)\big)\]

হতে পারে প্রতিটা বিন্দুতে তরলের বেগ, বা বল-এর মান ও দিক। এখানে প্রতিটা মানের magnitude ও direction দুটোই আছে — এটাই scalar field থেকে আলাদা। তবে গাণিতিকভাবে vector field মানে নিছক "প্রতিটা বিন্দুকে একটা ভেক্টর দেওয়া একটা function"; কড়াভাবে বললে তার প্রতিটা component (\(F_1,F_2,\dots\)) আলাদা একটা scalar function।

মনে রাখো: field মানে function

Scalar field (\(m=1\)) ও vector field (\(m>1\)) — দুটোই আসলে function। পার্থক্য শুধু output-এ কয়টা সংখ্যা: একটা হলে scalar, একাধিক হলে vector। উপরের সংজ্ঞাগুলো Euclidean \(\mathbb{R}^n\) ধরে; কিন্তু domain \(\Omega\) graph বা manifold-ও হতে পারে (Section 8.7-এ দেখব) — তখন derivative-কে সেই domain-এর নিজস্ব গঠন দিয়ে বুঝতে হয়।

Signal (সিগন্যাল): Deep learning-এর ভাষায় signal হলো একটা mapping — domain \(\Omega\) থেকে একটা vector space \(C\)-তে — যার মাত্রাগুলোকে বলে channel (চ্যানেল)। অর্থাৎ signal হলো একটা vector field \(F:\Omega\to C\), যেখানে \(C=\mathbb{R}^m\) এবং \(m\) হলো channel-সংখ্যা। উদাহরণ: একটা রঙিন ছবির প্রতিটা pixel-এ \((R,G,B)\) — অর্থাৎ \(m=3\) channel। যদি \(m=1\) হয় (যেমন সাদা-কালো ছবি), তবে সেটা scalar field। \(C\)-এর ভেক্টরগুলোকে প্রায়ই বলা হয় feature vector (ফিচার ভেক্টর)। মূল সৌন্দর্য: physics-এ \(\Omega\) সাধারণত Euclidean space, কিন্তু GDL-এ \(\Omega\) হতে পারে graph-এর মতো non-Euclidean (অ-ইউক্লিডীয়) গঠন।

একটু পটভূমি: continuity ও smoothness (কেন দরকার)

Derivative-এ যাওয়ার আগে দুটো ভিত্তি লাগে: function-টা কি অবিচ্ছিন্ন (continuous)? আর কতটা মসৃণ (smooth)?

Continuity (সন্ততি): একটা function \(f\) বিন্দু \(x_0\)-তে continuous হয় যদি —

  • \(\lim_{x\to x_0}f(x)\) সীমাটা অস্তিত্বশীল,
  • বাঁ দিক ও ডান দিক থেকে সীমা এক (\(\lim_{x\to x_0^-}f(x)=\lim_{x\to x_0^+}f(x)\) — অর্থাৎ কোন দিক থেকে এগোচ্ছি তার ওপর নির্ভর করে না),
  • এবং সীমা = function-এর মান: \(f(x_0)=\lim_{x\to x_0}f(x)\)

সোজা কথায়: continuous function-এ কোনো হঠাৎ লাফ বা ফাটল নেই — "কলম না তুলে আঁকা যায়"। উঁচু মাত্রায় (higher dimensions) বাঁ/ডান-সীমার বদলে বলা হয় "\(x_0\)-এর দিকে যেকোনো দিক থেকে এগোলেই একই মান"।

Lipschitz continuity (লিপশিৎস সন্ততি): একটা function \(f\) কে \(L\) ধ্রুবক দিয়ে Lipschitz continuous বলা হয় যদি সব \(x,y\in\mathbb{R}^n\)-এর জন্য

\[|f(x)-f(y)|\le L\,|x-y|.\]

এটি function-এর change-কে globally bound করে। Differentiable হলে derivative/operator norm সর্বত্র \(\le L\) হওয়া sufficient, আর Lipschitz function differentiable almost everywhere। Optimization-এ শুধু objective Lipschitz হলেই gradient descent convergence নিশ্চিত হয় না; সাধারণ convergence rate-এ Lipschitz gradient, convexity, step-size ইত্যাদি extra assumption লাগে। Lipschitz হলে continuous, converse false।

Smoothness ও \(C^k\) class: Differentiability continuity-র চেয়ে stronger। \(C^k\) মানে order \(k\) পর্যন্ত derivative continuous; standard terminology-তে smooth মানে \(C^\infty\):

শ্রেণি অর্থ
\(C^0\) শুধু continuous
\(C^1\) একবার continuously differentiable (প্রথম derivative-ও continuous)
\(C^k\) \(k\) বার continuously differentiable
\(C^\infty\) সব order-এর derivative অস্তিত্বশীল ও continuous

\(C^1\) differentiable হওয়ার চেয়ে stronger, কারণ derivative continuous-ও হতে হয়। কোনো result-এ শুধু \(C^2\) দরকার হলে আমরা explicitly “twice continuously differentiable” বলব; সেটিকে smooth-এর definition বানাব না।

Derivative ও Gradient — পরিবর্তনের হার

Derivative (অন্তরজ) বলে input একটু বদলালে function কতটা বদলায় — অর্থাৎ একটা বিন্দুতে function-এর পরিবর্তনের হার বা ঢাল (slope)

সবচেয়ে সরল রূপ: এক-মাত্রিক \(f:\mathbb{R}\to\mathbb{R}\)-এর জন্য derivative \(f'(x)=\frac{d}{dx}f(x)\) বলে একমাত্র চলক \(x\)-এর সাপেক্ষে \(f\) কত দ্রুত বদলাচ্ছে।

Directional derivative (দিকনির্দেশক অন্তরজ): বহু-মাত্রিক \(f:\mathbb{R}^n\to\mathbb{R}\)-এর ক্ষেত্রে "কোন দিকে" পরিবর্তন সেটাও বলতে হয়। বিন্দু \(x\) থেকে দিক \(d\in\mathbb{R}^n\)-এ \(f\)-এর directional derivative:

\[\partial_d f(x)=\lim_{\epsilon\to 0}\frac{f(x+\epsilon d)-f(x)}{\epsilon}.\]

এটা মাপে: \(x\) থেকে \(d\) দিকে সরলে \(f\) কত দ্রুত বদলায়। লক্ষ করো — লবে (\(f(x+\epsilon d)-f(x)\)) হলো "সামান্য সরে গেলে function-এর পরিবর্তন", আর হরে (\(\epsilon\)) হলো "কতটুকু সরলাম"; ভাগফলের সীমাই হলো তাৎক্ষণিক হার।

Partial derivative (আংশিক অন্তরজ): যদি দিক \(d\)-টা কেবল \(i\)-তম অক্ষ বরাবর একক ভেক্টর হয়, তখন directional derivative-টাকে বলে \(x_i\)-এর সাপেক্ষে partial derivative:

\[\frac{\partial}{\partial x_i}f(x)=\lim_{\epsilon\to 0}\frac{f(x_1,\dots,x_i+\epsilon,\dots,x_n)-f(x_1,\dots,x_n)}{\epsilon}.\]

মানে: বাকি সব চলক ধ্রুব ধরে শুধু \(x_i\) একটু বদলালে \(f\) কত বদলায়। তাই partial derivative হলো directional derivative-এর একটা বিশেষ ক্ষেত্র — যেখানে দিক \(i\)-তম স্থানাঙ্ক-অক্ষ বরাবর।

Gradient: \(f\) differentiable হলে derivative একটি linear functional, আর Euclidean inner product দিয়ে তার representing vector \(\nabla f(x)\) এমন যে প্রতিটি direction \(d\)-এর জন্য

\[\langle\nabla f(x),\,d\rangle=\partial_d f(x).\]

অর্থাৎ directional derivative inner product দিয়ে পাওয়া যায়। শুধু সব partial derivative exist করলেই differentiability নিশ্চিত নয়; differentiable হলে standard basis-এ gradient partial derivative-গুলোর vector:

\[\nabla f(x)=\left(\frac{\partial}{\partial x_1}f(x),\ \dots,\ \frac{\partial}{\partial x_n}f(x)\right).\]

Gradient-এর দুটো গভীর অর্থ, যা মনে গেঁথে নেওয়া দরকার:

  1. দিক: \(\nabla f(x)\ne0\) হলে unit direction-গুলোর মধ্যে \(\nabla f/\|\nabla f\|\) steepest ascent direction।
  2. মান: maximum unit directional derivative হলো \(\|\nabla f(x)\|\)

এই দুটোই gradient descent-এর প্রাণ — আমরা loss কমাতে চাই, তাই ঠিক উল্টো দিকে (\(-\nabla f\)) যাব।

Taylor approximation (টেইলর আসন্নীকরণ): Gradient দিয়ে \(x\)-এর চারপাশে \(f\)-এর একটা রৈখিক (first-order) আসন্নীকরণ পাওয়া যায়:

\[f(x+h)=f(x)+\langle\nabla f(x),h\rangle+o(\|h\|).\]

Gradient locally Lipschitz বা \(f\in C^2\) হলে remainder-কে \(O(\|h\|^2)\) করা যায়। First-order model gradient method-এর local change estimate দেয়; finite step-এ decrease পেতে step-size/smoothness condition লাগে।

Numerical approximation (সাংখ্যিক আসন্নীকরণ): বিশ্লেষণাত্মক সূত্র না জানা থাকলে finite difference (সসীম বিয়োগফল) দিয়ে derivative আন্দাজ করা যায়:

\[f'(x)\approx\frac{f(x+h)-f(x)}{h}\ \text{(forward)},\quad f'(x)\approx\frac{f(x)-f(x-h)}{h}\ \text{(backward)},\]
\[f'(x)\approx\frac{f(x+h)-f(x-h)}{2h}\ \text{(central)}.\]

Sufficient derivative থাকলে exact arithmetic-এ central difference-এর truncation error \(O(h^2)\), forward/backward-এর \(O(h)\)। খুব ছোট \(h\)-এ floating-point roundoff বাড়তে পারে।

Jacobian (জ্যাকোবিয়ান): Gradient-এর ধারণাকে vector field-এ সাধারণীকরণ করে Jacobian। একটা vector-মানের \(F:\mathbb{R}^n\to\mathbb{R}^m\)-এর Jacobian matrix \(J_F(x)\) হলো \(F\)-এর সব component-এর সব first-order partial derivative-এর matrix:

\[J_F(x)=\left(\frac{\partial F_i}{\partial x_j}\right)_{\substack{i=1,\dots,m\\ j=1,\dots,n}} =\begin{pmatrix}\frac{\partial F_1}{\partial x_1}&\cdots&\frac{\partial F_1}{\partial x_n}\\ \vdots&\ddots&\vdots\\ \frac{\partial F_m}{\partial x_1}&\cdots&\frac{\partial F_m}{\partial x_n}\end{pmatrix}.\]

প্রতিটা উপাদান বলে: \(F\)-এর একটা component domain-এর একটা স্থানাঙ্কের পরিবর্তনে কেমন সাড়া দেয়। Jacobian function-এর স্থানীয় আচরণ (কোথায় space-কে টানছে, কোথায় চেপে দিচ্ছে) সম্পর্কে মূল্যবান তথ্য দেয় — আর backpropagation-এ (পরে দেখব) chain rule-এর কেন্দ্রে এটাই থাকে।

Integral — জমা করা

Derivative যদি "স্থানীয় হার" মাপে, integral (যোগজ) মাপে "সামগ্রিক জমা"। একটা function \(f\)-এর domain \(\Omega\)-এর ওপর integral হলো \(\Omega\) জুড়ে \(f\)-এর মোট সঞ্চয়:

\[\int_\Omega f(x)\,dV,\]

যেখানে \(dV\) হলো অসীম-ক্ষুদ্র আয়তন-উপাদান (volume element)। Integration আসলে যোগফলের (summation) ধারণাকে অবিচ্ছিন্ন domain-এ সাধারণীকরণ\(n=1\)-এ এটা \(f(x)\)-এর curve-এর নিচের চিহ্নিত ক্ষেত্রফল (signed area)। Cartesian স্থানাঙ্কে \(dV=dx_1dx_2\cdots dx_n\); polar/cylindrical/spherical স্থানাঙ্কে জ্যামিতির জন্য বাড়তি গুণক যোগ হয়।

Riemann integral: সীমাবদ্ধ \(f:[a,b]\to\mathbb{R}\)-এর জন্য Riemann integral হলো Riemann sum-এর সীমা:

\[\int_a^b f(x)\,dx=\lim_{n\to\infty}\sum_{i=1}^n f(x_i^*)\,\Delta x_i,\]

যেখানে \([a,b]\)-কে \(n\)টা উপ-অন্তরালে ভাগ করা হয়েছে (প্রস্থ \(\Delta x_i\)), আর \(x_i^*\) প্রতিটা উপ-অন্তরালের ভেতরের একটা বিন্দু। স্বজ্ঞা: ছোট ছোট আয়তক্ষেত্রের ক্ষেত্রফল \(f(x_i^*)\Delta x_i\) যোগ করা। বদ্ধ-রূপ (closed-form) সমাধান না জানলে computational পদ্ধতিতে এই Riemann sum-কেই সংখ্যাগত আসন্নীকরণ হিসেবে ব্যবহার করা হয় (ঠিক যেমন derivative-এ forward difference)।

Line ও surface integral: Integration আয়তন ছাড়িয়ে নিম্ন-মাত্রিক বস্তুতেও যায়। একটা curve \(C\) বরাবর line integral \(\int_C f(x)\,ds\) (যেখানে \(ds\) অসীম-ক্ষুদ্র চাপ-দৈর্ঘ্য), আর একটা surface \(S\)-এর ওপর surface integral \(\int_S f(x)\,dA\) (যেখানে \(dA\) অসীম-ক্ষুদ্র ক্ষেত্রফল-উপাদান)।

Fundamental Theorem of Calculus (ক্যালকুলাসের মৌলিক উপপাদ্য): এটাই integration ও differentiation-কে জোড়া লাগায়। এক-মাত্রায়, \(f\)-এর antiderivative \(F\) থাকলে (\(F'=f\)):

\[\int_a^b f(x)\,dx=F(b)-F(a),\qquad b>a.\]

খেয়াল করো, একটা function-এর অসীম-সংখ্যক antiderivative থাকে: \(F'=f\) হলে যেকোনো ধ্রুবক \(C\)-র জন্য \(F+C\)-ও একটা antiderivative।

Divergence — বহির্মুখী প্রবাহের ঘনত্ব

ধরো \(F:\mathbb{R}^n\to\mathbb{R}^n\) একটা smooth vector field, \(F(x)=(F_1(x),\dots,F_n(x))\)। এর divergence একটা scalar field \(\operatorname{div}F:\mathbb{R}^n\to\mathbb{R}\):

\[\operatorname{div}F(x)=\sum_{i=1}^n\frac{\partial}{\partial x_i}F_i(x)\equiv\nabla\cdot F.\]

স্বজ্ঞা: \(F(x)\)-কে যদি \(x\)-এর চারপাশে একটা প্রবাহ (flow) ভাবো, তবে divergence মাপে \(x\)-এর চারপাশের একটা অসীম-ক্ষুদ্র আয়তন থেকে বাইরের দিকে কতটা ফ্লাক্স (outward flux) বেরোচ্ছে তার ঘনত্ব। ধনাত্মক divergence = উৎস (source, ছড়াচ্ছে); ঋণাত্মক = সিংক (sink, জমা হচ্ছে); শূন্য = যতটা ঢুকছে ততটাই বেরোচ্ছে।

খেয়াল করো একটা সুন্দর pairing: gradient scalar → vector নেয়, divergence vector → scalar নেয়। Divergence gradient-এর inverse নয়। উপযুক্ত boundary condition ও \(L^2\) inner product-এর সাপেক্ষে gradient-এর adjoint হলো \(-\operatorname{div}\):

\[\langle\nabla f,\,F\rangle=-\langle f,\,\operatorname{div}F\rangle.\]

এই পরিচয়টি boundary term শূন্য হলে সত্য; সাধারণ domain-এ integration by parts-এ অতিরিক্ত boundary term থাকে। সম্পর্কটি divergence theorem থেকে বেরোয় — Section ৩-এ ছোট একটা derivation দেখব।

Divergence theorem: এই adjoint সম্পর্কের পেছনের বড় উপপাদ্য (Gauss–Ostrogradsky): \(\Omega\subseteq\mathbb{R}^n\) একটা region, তার সীমানা \(\partial\Omega\)। তাহলে

\[\int_\Omega\operatorname{div}F\,dV=\int_{\partial\Omega}\langle F,\hat n\rangle\,dS,\]

যেখানে \(\hat n\) হলো সীমানায় বাইরের দিকে নির্দেশক একক অভিলম্ব ভেক্টর (unit normal)। ভৌত অর্থ: পদার্থের সৃষ্টি বা ধ্বংস না হলে, একটা region-এর ভেতরের ঘনত্ব কেবল সীমানা দিয়ে ভেতরে/বাইরে প্রবাহিত হয়েই বদলাতে পারে — এটা একটা সংরক্ষণ সূত্র (conservation law)

Laplacian — বক্রতা ও মসৃণতার পরিমাপ

এবার gradient আর divergence পরপর প্রয়োগ করি: আগে scalar field \(f\)-এর gradient নিই (vector field পাই), তারপর তার divergence নিই (আবার scalar field পাই)। এই যৌগিক operator-ই Laplacian (ল্যাপ্লাসিয়ান):

\[\Delta f(x)=\operatorname{div}\nabla f=\nabla\cdot\nabla f.\]

Standard basis-এ এটা দাঁড়ায় second-order partial derivative-গুলোর যোগফলে (derivation Section ৩-এ):

\[\Delta f=\sum_{i=1}^n\frac{\partial^2 f}{\partial x_i^2}.\]

স্বজ্ঞা: Laplacian মাপে একটা বিন্দুতে function তার চারপাশের গড় মানের তুলনায় কতটা নিচে/উপরে — অর্থাৎ স্থানীয় বক্রতা (curvature)। যদি \(\Delta f(x)>0\), তবে \(x\)-এ \(f\) চারপাশের গড়ের চেয়ে ছোট (একটা "গর্ত"); \(\Delta f(x)<0\) হলে "কুঁজ"; আর \(\Delta f=0\) (harmonic function) মানে প্রতিটা বিন্দুতে function ঠিক চারপাশের গড়ের সমান — নিখুঁত ভারসাম্য।

একটা গুরুত্বপূর্ণ সংশ্লিষ্ট রাশি হলো Dirichlet energy (ডিরিশলে শক্তি): \(\langle f,\Delta f\rangle=\langle\nabla f,\nabla f\rangle=\|\nabla f\|^2\) — এটা মাপে function \(f\) কতটা "পরিবর্তনশীল" (variable)। GDL-এ graph-এর ওপর signal কতটা মসৃণ তা মাপতে ঠিক এই Dirichlet energy-ই ব্যবহার হয়: কম energy মানে মসৃণ (প্রতিবেশী node-এ কাছাকাছি মান)। এই কারণেই GDL-এ প্রায়ই Laplacian-কে \(-\operatorname{div}\nabla f\) ধরে ধনাত্মক-অর্ধনির্দিষ্ট (positive-semidefinite) বানানো হয়।

Laplacian-এর আরেকটা মূল গুণ — এটা rotation-invariant (ঘূর্ণন-অপরিবর্তনীয়): স্থানাঙ্ক-অক্ষ ঘুরিয়ে দিলেও Laplacian-এর মান বদলায় না। এর মানে Laplacian coordinate system-এর orientation-এর ওপর নির্ভর করে না, বরং scalar field-এর অভ্যন্তরীণ জ্যামিতির (intrinsic geometry) ওপর নির্ভর করে — ঠিক এই invariance-এর জন্যই এটা geometry-চালিত deep learning-এ এত মূল্যবান।

Gradient descent — gradient কীভাবে optimization চালায়

এবার সব সুতো একসাথে বাঁধি — কারণ এখানেই vector calculus সরাসরি deep learning-এ প্রাণ পায়। একটা neural network-কে ভাবো weight \(w\) দিয়ে parametrize করা একটা function (vector field) \(F(x;w):\mathbb{R}^n\to\mathbb{R}^m\)

Loss function একটা scalar field। Model কতটা ভালো/খারাপ করছে তা মাপে loss function \(L(w)\) — প্রতিটা weight-বিন্যাস \(w\)-কে একটা scalar (ভুলের পরিমাণ) দেয়। Supervised learning-এ সাধারণত

\[L(w)=L\big(F(x;w),\hat y\big),\]

যেখানে \(\hat y\) হলো ground truth (আসল label), \(F(x;w)\) হলো network-এর prediction; loss হতে পারে regression-এ mean squared error। মূল কথা: \(L(w)\) একটা scalar field যা প্রতিটা parameter-বিন্যাসকে একটা ভুল-সংখ্যা দেয় — আর আমরা এই field-এর সবচেয়ে নিচু জায়গা (minimum) খুঁজছি।

Loss landscape of a neural network

চিত্র ১: বাংলা ব্যাখ্যা — neural network-এর loss landscape; gradient descent এই পৃষ্ঠে "নিচে" নামে। উঁচু-নিচু পাহাড়-উপত্যকার মতো এই পৃষ্ঠের প্রতিটা বিন্দু একটা weight-বিন্যাস \(w\), উচ্চতা হলো loss \(L(w)\)। training মানে এই ভূদৃশ্যে সবচেয়ে খাড়া নিচু দিকে (\(-\nabla L\)) বারবার এক পা করে নেমে একটা উপত্যকা (local minimum)-এ পৌঁছানো।

Update rule ও gradient-এর সম্পর্ক (বিশদে)। ঠিক vector calculus-এর মতোই আমরা জানতে চাই: \(w\)-তে সামান্য পরিবর্তন হলে \(L(w)\) কীভাবে বদলায়? এর উত্তর দেয় gradient \(\nabla L(w)\)। মনে রাখো gradient-এর দুটো অর্থ:

\(\nabla L(w)\) দেখায় \(L\)-এর দ্রুততম বৃদ্ধির দিক, আর \(\|\nabla L(w)\|\) হলো সেই বৃদ্ধির হার।

কিন্তু আমরা তো loss বাড়াতে নয়, কমাতে চাই! তাই আমরা gradient-এর ঠিক উল্টো দিকে যাই — সেটাই steepest descent (দ্রুততম অবরোহণ)। এখান থেকেই আসে gradient descent-এর update rule:

\[w_{t+1}=w_t-\eta\,\nabla L(w_t),\]

লাইন-ধরে-ধরে পড়ি —

  • \(w_t\): \(t\)-তম ধাপে (iteration) parameter।
  • \(\nabla L(w_t)\): সেই বিন্দুতে loss-এর gradient — দ্রুততম বৃদ্ধির দিক।
  • ঋণচিহ্ন (\(-\)): কেন? কারণ gradient বৃদ্ধির দিকে দেখায়; কমাতে হলে উল্টো দিকে যেতে হবে। এই ঋণচিহ্নই "descent" শব্দটার মূল — এটাই gradient আর update rule-এর মূল সম্পর্ক।
  • \(\eta\) (eta): learning rate (শিখন-হার) — একটা scalar যা পদক্ষেপের আকার (step size) নিয়ন্ত্রণ করে। বড় \(\eta\) = বড় লাফ (দ্রুত কিন্তু ঝুঁকিপূর্ণ, ছাড়িয়ে যেতে/diverge করতে পারে); ছোট \(\eta\) = ছোট পা (নিরাপদ কিন্তু ধীর)।

কেন এই নিয়মে সত্যিই loss কমে? first-order Taylor approximation বসাই। এক ধাপে \(w\) বদলায় \(dw=-\eta\nabla L(w)\) পরিমাণ, তাই

\[L(w-\eta\nabla L)\approx L(w)+\langle\nabla L,\,-\eta\nabla L\rangle=L(w)-\eta\,\|\nabla L\|^2.\]

যেহেতু \(\|\nabla L\|^2\ge 0\) এবং \(\eta>0\), তাই (যথেষ্ট ছোট \(\eta\)-এর জন্য) \(L(w_{t+1})\le L(w_t)\) — অর্থাৎ প্রতিটা পদক্ষেপে loss কমে (বা অন্তত বাড়ে না)। এটাই gradient descent-এর গাণিতিক গ্যারান্টি। আর যখন আমরা একটা minimum-এ পৌঁছাই, সেখানে \(\nabla L=0\), তাই update থেমে যায় (\(w_{t+1}=w_t\)) — একটা স্থির-বিন্দু (fixed point)। এভাবে random আরম্ভ-বিন্যাস থেকে weight-কে "space-এ সরিয়ে" এমন জায়গায় নেওয়া হয় যেখানে model কম ভুলে data-র প্যাটার্ন ধরতে পারে।

বাস্তবে গোটা dataset-এর বদলে ছোট batch-এ gradient হিসাব করা হয় — একে বলে stochastic gradient descent (SGD); আর আধুনিক deep learning-এ SGD-র উন্নত রূপ যেমন AdamW ব্যবহার হয়। কিন্তু মূল সুরটা একই: gradient বের করো, উল্টো দিকে এক পা এগোও, পুনরাবৃত্তি করো।

Backpropagation ও chain rule। কিন্তু কোটি-parameter-এর network-এ \(\nabla L\) বের করব কীভাবে? উত্তর: backpropagation, যা দাঁড়িয়ে আছে ক্যালকুলাসের chain rule (শৃঙ্খল-নিয়ম)-এর ওপর। দুটো vector field \(f:\mathbb{R}^n\to\mathbb{R}^m\)\(g:\mathbb{R}^m\to\mathbb{R}^p\)-এর composition \(g\circ f(x)=g(f(x))\)-এর derivative তাদের Jacobian-এর matrix গুণফল:

\[\frac{d}{dx}\big(g\circ f(x)\big)=J_g(f(x))\cdot J_f(x).\]

Neural network তো আসলে অনেকগুলো layer-এর composition। তাই layer-এর weight-এর সাপেক্ষে loss-এর gradient স্তরে-স্তরে (iteratively) হিসাব হয়:

\[\nabla_{w^{(l)}}L=J_L(a^{(L)})\cdot J_{a^{(L)}}(a^{(L-1)})\cdots J_{a^{(l+1)}}(w^{(l)}),\]

যেখানে \(a^{(l)}\) হলো \(l\)-তম layer-এর activation (মধ্যবর্তী রূপান্তরের output)। scalar/element-wise আকারে একই কথা:

\[\nabla_{w^{(l)}}L=\frac{\partial L}{\partial a^{(L)}}\cdot\frac{\partial a^{(L)}}{\partial a^{(L-1)}}\cdots\frac{\partial a^{(l+1)}}{\partial w^{(l)}}.\]

সংক্ষেপে: backpropagation chain rule দিয়ে প্রতিটা layer-এর weight-এর সাপেক্ষে gradient বের করে, আর gradient descent সেই gradient দিয়ে weight update করে — এই দুইয়ের চক্রই deep learning-এর training।


৩. সংজ্ঞা ও উপপাদ্য (Definitions & Theorems)

এই অংশে মূল operator-গুলোর আনুষ্ঠানিক সংজ্ঞা এক জায়গায় গুছিয়ে দিই, সাথে দুটো ছোট derivation।

সংজ্ঞা: Directional ও Partial Derivative

Smooth scalar field \(f:\mathbb{R}^n\to\mathbb{R}\), বিন্দু \(x\), দিক \(d\in\mathbb{R}^n\)Directional derivative:

\[\partial_d f(x)=\lim_{\epsilon\to 0}\frac{f(x+\epsilon d)-f(x)}{\epsilon}.\]

যখন \(d=e_i\) (\(i\)-তম একক অক্ষ-ভেক্টর), তখন এটাই partial derivative \(\dfrac{\partial}{\partial x_i}f(x)\) — বাকি চলক ধ্রুব রেখে শুধু \(x_i\)-এর সাপেক্ষে হার। তাই partial derivative হলো axis বরাবর directional derivative-এর বিশেষ ক্ষেত্র।

সংজ্ঞা: Gradient (গ্রেডিয়েন্ট)

\(f:\mathbb{R}^n\to\mathbb{R}\)-এর gradient হলো সেই vector field \(\nabla f:\mathbb{R}^n\to\mathbb{R}^n\) যা সব \(x,d\)-এর জন্য এই শর্ত মানে:

\[\langle\nabla f(x),\,d\rangle=\partial_d f(x).\]

Standard basis-এ এটা partial derivative-এর ভেক্টর:

\[\nabla f(x)=\left(\frac{\partial}{\partial x_1}f(x),\dots,\frac{\partial}{\partial x_n}f(x)\right).\]

অর্থ: \(\nabla f(x)\) দেখায় \(f\)-এর দ্রুততম বৃদ্ধির দিক, আর \(\|\nabla f(x)\|\) সেই বৃদ্ধির হার।

সংজ্ঞা: Jacobian (জ্যাকোবিয়ান)

Vector field \(F:\mathbb{R}^n\to\mathbb{R}^m\)-এর Jacobian হলো সব first-order partial derivative-এর \(m\times n\) matrix:

\[J_F(x)=\left(\frac{\partial F_i}{\partial x_j}\right)_{i=1,\dots,m;\,j=1,\dots,n}.\]

\(m=1\) হলে Jacobian হলো gradient-এর transpose (এক-সারির matrix) — তাই Jacobian, gradient-এর সাধারণীকরণ।

সংজ্ঞা: Divergence (অপসারণ/ডাইভারজেন্স)

Smooth vector field \(F=(F_1,\dots,F_n):\mathbb{R}^n\to\mathbb{R}^n\)-এর divergence হলো scalar field:

\[\operatorname{div}F(x)=\sum_{i=1}^n\frac{\partial}{\partial x_i}F_i(x)\equiv\nabla\cdot F.\]

অর্থ: \(x\)-এর চারপাশের অসীম-ক্ষুদ্র আয়তন থেকে বহির্মুখী ফ্লাক্সের ঘনত্ব (উৎস \(>0\), সিংক \(<0\))।

সংজ্ঞা: Laplacian (ল্যাপ্লাসিয়ান)

Scalar field \(f\)-এর Laplacian হলো তার gradient-এর divergence:

\[\Delta f(x)=\operatorname{div}\nabla f=\nabla\cdot\nabla f.\]

Standard basis-এ এটা second partial derivative-গুলোর যোগফল:

\[\Delta f=\sum_{i=1}^n\frac{\partial^2 f}{\partial x_i^2}.\]

(GDL-এ প্রায়ই \(-\operatorname{div}\nabla f\) ধরা হয়, যাতে operator-টা positive-semidefinite হয়।)

Derivation ১: \(\Delta f=\sum_i\partial^2 f/\partial x_i^2\) কেন? সংজ্ঞা থেকে \(\Delta f=\operatorname{div}(\nabla f)\)। প্রথমে \(\nabla f\) একটা vector field যার \(i\)-তম component হলো \((\nabla f)_i=\dfrac{\partial f}{\partial x_i}\)। এবার divergence-এর সংজ্ঞা বসাই — vector field-এর \(i\)-তম component-কে \(x_i\)-এর সাপেক্ষে differentiate করে যোগ করো:

\[\operatorname{div}(\nabla f)=\sum_{i=1}^n\frac{\partial}{\partial x_i}\big[(\nabla f)_i\big]=\sum_{i=1}^n\frac{\partial}{\partial x_i}\left(\frac{\partial f}{\partial x_i}\right)=\sum_{i=1}^n\frac{\partial^2 f}{\partial x_i^2}.\]

তাই Laplacian ঠিক Hessian matrix \(\nabla^2 f\)-এর কর্ণের (diagonal) যোগফল, অর্থাৎ trace: \(\Delta f=\operatorname{tr}(\nabla^2 f)\)\(\square\)

Derivation ২: \(\langle\nabla f,F\rangle=-\langle f,\operatorname{div}F\rangle\) (adjoint সম্পর্ক)। \(L^2\) inner product ধরি: scalar-এর জন্য \(\langle f,g\rangle=\int_\Omega fg\,dx\), vector-এর জন্য \(\langle F,G\rangle=\int_\Omega F\cdot G\,dx\)। বাঁ পাশ খুলি:

\[\langle\nabla f,F\rangle=\int_\Omega\nabla f\cdot F\,dx=\int_\Omega\sum_{i=1}^n\frac{\partial f}{\partial x_i}F_i\,dx.\]

প্রতিটা পদে integration by parts (যা divergence theorem থেকে সীমানা-পদ দেয়):

\[\int_\Omega\frac{\partial f}{\partial x_i}F_i\,dx=\int_{\partial\Omega}f F_i\hat n_i\,dS-\int_\Omega f\frac{\partial F_i}{\partial x_i}\,dx.\]

\(i=1\) থেকে \(n\) পর্যন্ত যোগ করে, আর \(\operatorname{div}F=\sum_i\partial F_i/\partial x_i\) ব্যবহার করে:

\[\langle\nabla f,F\rangle=\int_{\partial\Omega}f\,(F\cdot\hat n)\,dS-\int_\Omega f\,(\operatorname{div}F)\,dx.\]

সীমানা-পদটি শূন্য হয় যদি সীমানায় \(f=0\) হয় (Dirichlet শর্ত), বা \(F=0\) হয়, বা \(F\)-এর অভিলম্ব-উপাদান \(F\cdot\hat n=0\) হয়, অথবা \(\Omega=\mathbb{R}^n\)\(F\) যথেষ্ট দ্রুত (\(\|x\|^{-n}\)-এর চেয়ে দ্রুত) মিলিয়ে যায়। এসব শর্তের যেকোনোটিতে সীমানা-পদ বাদ, তাই

\[\langle\nabla f,F\rangle=-\int_\Omega f\,(\operatorname{div}F)\,dx=-\langle f,\operatorname{div}F\rangle.\]

অর্থাৎ এই domain ও boundary condition-এ \(\nabla^*=-\operatorname{div}\)\(\square\)

উপপাদ্য: Laplacian rotation-invariant

যেকোনো orthogonal (লম্ব) রূপান্তর \(A\) (যেখানে \(AA^\top=A^\top A=I\))-এর জন্য \(\Delta_x f(Ax)=\Delta_{Ax}f(Ax)\) — অর্থাৎ স্থানাঙ্ক ঘোরালে Laplacian বদলায় না।

সংক্ষিপ্ত প্রমাণ: Laplacian-কে Hessian-এর trace লিখি, \(\Delta f=\operatorname{tr}(\nabla^2 f)\)। স্থানাঙ্ক রূপান্তর \(x\mapsto Ax\)-এ chain rule দিলে Hessian হয় \(\nabla_x^2 f(Ax)=A^\top\big(\nabla_{Ax}^2 f\big)A\)। এখন trace-এর একটা ধর্ম \(\operatorname{tr}(XY)=\operatorname{tr}(YX)\) ব্যবহার করি এবং \(A\) orthogonal বলে \(AA^\top=I\):

\[\Delta_x f(Ax)=\operatorname{tr}\!\big(A^\top(\nabla_{Ax}^2 f)A\big)=\operatorname{tr}\!\big((\nabla_{Ax}^2 f)AA^\top\big)=\operatorname{tr}(\nabla_{Ax}^2 f)=\Delta_{Ax}f(Ax).\]

তাই Laplacian coordinate system-এর orientation-এর ওপর নির্ভর করে না, বরং field-এর অভ্যন্তরীণ জ্যামিতির ওপর। \(\square\)


৪. উদাহরণ ও Analogy

Worked Example ১: \(f(x,y)=x^2+y^2\)-এর gradient ও Laplacian

এটা একটা বাটির (bowl) মতো paraboloid — কেন্দ্রে গর্ত, চারদিকে উঁচু।

Gradient: partial derivative নিই।

\[\frac{\partial f}{\partial x}=2x,\qquad\frac{\partial f}{\partial y}=2y\ \Rightarrow\ \nabla f(x,y)=(2x,\,2y).\]

বিন্দু \((1,1)\)-তে \(\nabla f=(2,2)\), যার মান \(\|\nabla f\|=\sqrt{2^2+2^2}=2\sqrt 2\approx 2.83\)। এই ভেক্টর কেন্দ্র থেকে বাইরের দিকে দেখায় — ঠিক, কারণ বাটির গা বেয়ে উপরে ওঠা মানেই কেন্দ্র থেকে দূরে যাওয়া (দ্রুততম বৃদ্ধির দিক)।

Laplacian: second partial derivative নিই।

\[\frac{\partial^2 f}{\partial x^2}=2,\qquad\frac{\partial^2 f}{\partial y^2}=2\ \Rightarrow\ \Delta f=2+2=4.\]

সব জায়গায় \(\Delta f=4>0\) ধ্রুবক — মানে প্রতিটা বিন্দুতে function চারপাশের গড়ের চেয়ে নিচে (একটা গর্ত), তাই এটা সর্বত্র উপরের দিকে বাঁকা একটা বাটি।

Directional derivative: \((1,1)\)-তে \(d=(1,0)\) দিকে (x-অক্ষ বরাবর):

\[\partial_d f(1,1)=\langle\nabla f(1,1),d\rangle=\langle(2,2),(1,0)\rangle=2.\]

আর \(d=\tfrac{1}{\sqrt2}(1,1)\) (gradient বরাবর একক ভেক্টর) দিকে: \(\langle(2,2),\tfrac{1}{\sqrt2}(1,1)\rangle=\tfrac{1}{\sqrt2}(2+2)=2\sqrt2\) — এটাই সর্বোচ্চ, কারণ gradient-এর দিকই দ্রুততম বৃদ্ধির দিক।

Worked Example ২: এক ধাপ gradient descent

ধরো loss \(L(w)=w^2\) (সরল bowl, minimum \(w=0\)-তে)। তাহলে \(\nabla L(w)=2w\)। শুরু \(w_0=4\), learning rate \(\eta=0.1\)

ধাপ ১: \(\nabla L(w_0)=2\cdot 4=8\)

\[w_1=w_0-\eta\,\nabla L(w_0)=4-0.1\times 8=4-0.8=3.2.\]

ধাপ ২: \(\nabla L(3.2)=2\cdot 3.2=6.4\)

\[w_2=3.2-0.1\times 6.4=3.2-0.64=2.56.\]

Loss-এর হিসাব: \(L(4)=16\to L(3.2)=10.24\to L(2.56)\approx 6.55\) — প্রতিটা ধাপে কমছে, আর \(w\) ধীরে ধীরে minimum \(0\)-এর দিকে এগোচ্ছে। খেয়াল করো: \(w\) ধনাত্মক বলে gradient ধনাত্মক, তাই আমরা \(w\) কমাচ্ছি (উল্টো দিকে যাচ্ছি) — ঠিক update rule যা বলে।

Worked Example ৩: Divergence

\(F(x,y)=(x,y)\) (কেন্দ্র থেকে বাইরের দিকে ছড়ানো প্রবাহ):

\[\operatorname{div}F=\frac{\partial x}{\partial x}+\frac{\partial y}{\partial y}=1+1=2>0.\]

ধনাত্মক — মানে এটা একটা উৎস (source), সব বিন্দু থেকে ছড়াচ্ছে। এখন \(G(x,y)=(-y,x)\) (কেন্দ্রের চারপাশে ঘূর্ণন):

\[\operatorname{div}G=\frac{\partial(-y)}{\partial x}+\frac{\partial(x)}{\partial y}=0+0=0.\]

শূন্য — ঘূর্ণন-প্রবাহে কিছু ছড়ায় না বা জমে না, শুধু ঘোরে। Divergence-এর স্বজ্ঞা এখানে স্পষ্ট।

Analogy: পাহাড়ের ঢাল (কুয়াশায় নামা)

কল্পনা করো তুমি কুয়াশাঢাকা পাহাড়ে দাঁড়িয়ে, উপত্যকায় নামতে চাও, কিন্তু কয়েক পা দূরের কিছু দেখতে পাচ্ছ না। কী করবে? পায়ের চারপাশে মাটি ছুঁয়ে দেখবে কোন দিকে সবচেয়ে খাড়া নিচু — সেই দিকে এক পা এগোবে; আবার থেমে চারপাশ মেপে আবার এক পা — এভাবে ধাপে ধাপে নিচে নামবে।

  • এই "পাহাড়-পৃষ্ঠ" = loss landscape \(L(w)\) (চিত্র ১)।
  • "কোন দিকে সবচেয়ে খাড়া উপরে" = gradient \(\nabla L\)। "সবচেয়ে খাড়া নিচু" = \(-\nabla L\)
  • "পায়ের মাপ / এক পায়ের দৈর্ঘ্য" = learning rate \(\eta\)। খুব বড় পা ফেললে উপত্যকা ডিঙিয়ে উল্টো পাশের গায়ে উঠে যেতে পারো (diverge); খুব ছোট পা ফেললে নামতে সারাদিন লাগবে।
  • "উপত্যকার তলা" = local minimum, যেখানে চারদিক সমতল (\(\nabla L=0\)), তাই এক পাও আর নড়া হয় না।

এই সরল ছবিটাই gradient descent — আর এটাই পৃথিবীর প্রায় সব neural network-কে প্রশিক্ষিত করে।


৫. সাধারণ ভুল (Common mistakes)

  1. Vector space আর vector field গুলিয়ে ফেলা। Vector space একটা বিমূর্ত বীজগাণিতিক কাঠামো; vector field হলো একটা function যা প্রতিটা বিন্দুকে একটা ভেক্টর দেয়। এক নয়।

  2. Gradient-এর দিক ভুল বোঝা। \(\nabla f\) দেখায় দ্রুততম বৃদ্ধির দিক (ascent), কমার নয়। তাই minimize করতে \(-\nabla f\) দিকে যেতে হয়। gradient descent-এর ঋণচিহ্নটা ভুলে গেলে model উল্টো loss বাড়াবে

  3. Gradient descent-এ learning rate-এর গুরুত্ব হালকা ভাবা। \(\eta\) খুব বড় হলে update ছাড়িয়ে গিয়ে diverge করতে পারে (loss বেড়ে বেড়ে অসীম); খুব ছোট হলে training অসম্ভব ধীর। এটা নিছক একটা "ছোট সংখ্যা" নয় — সবচেয়ে গুরুত্বপূর্ণ hyperparameter-দের একটা।

  4. Partial আর total derivative গুলিয়ে ফেলা। \(\frac{\partial f}{\partial x_i}\)-এ বাকি সব চলক ধ্রুব — শুধু \(x_i\) নড়ে। এক-চলকের \(\frac{df}{dx}\)-এর মতো ভাবলে বহু-চলকে ভুল হবে।

  5. Divergence-কে vector ভাবা। \(\operatorname{div}F=\nabla\cdot F\) একটা scalar field (প্রতিটা বিন্দুতে একটা সংখ্যা), gradient-এর মতো vector নয়। উল্টোদিকে \(\nabla f\) একটা vector। input-output-এর ধরন মিলিয়ে নাও: gradient (scalar→vector), divergence (vector→scalar), Laplacian (scalar→scalar)।

  6. Laplacian = gradient-এর বর্গ ভাবা। \(\Delta f=\nabla\cdot\nabla f\) মানে "gradient-এর divergence" (দ্বিতীয় order), \(\|\nabla f\|^2\) নয়। \(\Delta f=\sum_i\partial^2 f/\partial x_i^2\), second derivative-এর যোগফল।

  7. Finite difference-এ step-size \(h\) যত ছোট তত ভালো — ভুল ধারণা। তাত্ত্বিকভাবে ছোট \(h\) truncation error কমায়, কিন্তু বাস্তবে খুব ছোট \(h\)-তে floating-point round-off error বেড়ে যায়। একটা ভারসাম্য দরকার; আর central difference (\(O(h^2)\)) সাধারণত forward/backward (\(O(h)\))-এর চেয়ে ভালো।

  8. Chain rule-এ ক্রম উল্টে ফেলা। Composition \(g\circ f\)-এর Jacobian \(J_g(f(x))\cdot J_f(x)\) — matrix গুণ ক্রম-নির্ভর (non-commutative)। backpropagation-এ এই ক্রম উল্টালে gradient ভুল হবে।


৬. এক্সারসাইজ (Exercises)

  1. \(f(x,y)=3x+2y\)-এর gradient \(\nabla f\) বের করো। এটা কি সব বিন্দুতে একই? কেন?

  2. \(f(x,y,z)=x^2y+yz^2\)-এর তিনটা partial derivative ও gradient বের করো, এবং \((1,2,3)\) বিন্দুতে \(\nabla f\)-এর মান নির্ণয় করো।

  3. \(f(x,y,z)=x^2+y^2+z^2\)-এর Laplacian \(\Delta f\) বের করো। আরও, \((1,0,0)\) বিন্দুতে \(d=(0,1,0)\) দিকে directional derivative কত?

  4. দুটো vector field-এর divergence বের করো: (ক) \(F(x,y)=(x,y)\); (খ) \(G(x,y)=(-y,x)\)। ফলাফলের ভৌত অর্থ ব্যাখ্যা করো।

  5. (ML) Loss \(L(w)=(w-3)^2\), শুরু \(w_0=0\), learning rate \(\eta=0.25\)। gradient descent-এর দুই ধাপ হাতে করে \(w_1,w_2\) বের করো এবং দেখাও loss কমছে।

  6. (ML) Loss \(L(w)=w^2\), শুরু \(w_0=1\), learning rate \(\eta=1.5\)। তিন ধাপ update করো। কী ঘটছে, আর কেন? এই \(L\)-এর জন্য convergence-এর শর্ত \(\eta\)-এর ওপর কী?

  7. প্রমাণ করো: একক ভেক্টর \(d\) (\(\|d\|=1\))-এর মধ্যে \(\partial_d f\) সবচেয়ে ছোট (দ্রুততম অবরোহণ) হয় যখন \(d=-\dfrac{\nabla f}{\|\nabla f\|}\)। (ইঙ্গিত: Cauchy–Schwarz অসমতা।) এটা কীভাবে gradient descent-এর ঋণচিহ্নকে ন্যায্যতা দেয়?

  8. (ML/chain rule) \(f(x)=x^2\)\(g(u)=3u+1\) দেওয়া আছে। \(h(x)=g(f(x))\)-এর derivative \(h'(x)\) দুইভাবে বের করো — (ক) সরাসরি \(h\) লিখে, (খ) chain rule দিয়ে — এবং দেখাও দুটো মেলে। এর সাথে backpropagation-এর সম্পর্ক এক লাইনে বলো।


৭. সমাধান (ব্যাখ্যাসহ)

১-নং সমাধান দেখাও

\(f(x,y)=3x+2y\)। partial derivative:

\[\frac{\partial f}{\partial x}=3,\qquad\frac{\partial f}{\partial y}=2\ \Rightarrow\ \nabla f=(3,2).\]

হ্যাঁ, সব বিন্দুতে একই — কারণ \(f\) রৈখিক (linear), তাই তার ঢাল সর্বত্র ধ্রুবক। জ্যামিতিকভাবে \(f\) একটা সমতল (plane); সমতলের ঢাল সব জায়গায় একই।

২-নং সমাধান দেখাও

\(f(x,y,z)=x^2y+yz^2\)। এক-এক করে (বাকি চলক ধ্রুব রেখে):

\[\frac{\partial f}{\partial x}=2xy,\qquad\frac{\partial f}{\partial y}=x^2+z^2,\qquad\frac{\partial f}{\partial z}=2yz.\]

তাই \(\nabla f=(2xy,\ x^2+z^2,\ 2yz)\)\((1,2,3)\)-তে:

\[\nabla f(1,2,3)=(2\cdot1\cdot2,\ 1^2+3^2,\ 2\cdot2\cdot3)=(4,\ 10,\ 12).\]

এর মান: \(\|\nabla f\|=\sqrt{4^2+10^2+12^2}=\sqrt{16+100+144}=\sqrt{260}\approx 16.12\)

৩-নং সমাধান দেখাও

Laplacian: second partial derivative-গুলো —

\[\frac{\partial^2 f}{\partial x^2}=2,\quad\frac{\partial^2 f}{\partial y^2}=2,\quad\frac{\partial^2 f}{\partial z^2}=2\ \Rightarrow\ \Delta f=2+2+2=6.\]

সর্বত্র ধ্রুবক \(6>0\) — একটা \(3\)D "বাটি"।

Directional derivative: \(\nabla f=(2x,2y,2z)\), তাই \(\nabla f(1,0,0)=(2,0,0)\)\(d=(0,1,0)\) দিকে:

\[\partial_d f=\langle(2,0,0),(0,1,0)\rangle=0.\]

শূন্য — কারণ \((1,0,0)\)-তে \(y\)-অক্ষ বরাবর সরলে (স্পর্শকভাবে) \(f\) মুহূর্তের জন্য বদলায় না; gradient \(x\)-অক্ষ বরাবর, \(d\) তার লম্ব।

৪-নং সমাধান দেখাও

(ক) \(F=(x,y)\):

\[\operatorname{div}F=\frac{\partial x}{\partial x}+\frac{\partial y}{\partial y}=1+1=2.\]

ধনাত্মক — প্রতিটা বিন্দু একটা উৎস (source), প্রবাহ বাইরের দিকে ছড়াচ্ছে (যেমন ফোয়ারা)।

(খ) \(G=(-y,x)\):

\[\operatorname{div}G=\frac{\partial(-y)}{\partial x}+\frac{\partial(x)}{\partial y}=0+0=0.\]

শূন্য — এটা একটা বিশুদ্ধ ঘূর্ণন (rotation) প্রবাহ; কিছু ছড়ায় না বা জমে না, শুধু কেন্দ্রের চারপাশে ঘোরে (incompressible/অসংনম্য)।

৫-নং সমাধান দেখাও

\(L(w)=(w-3)^2\), তাই \(\nabla L(w)=2(w-3)\)। minimum \(w=3\)-এ। \(\eta=0.25\), \(w_0=0\)

ধাপ ১: \(\nabla L(0)=2(0-3)=-6\)

\[w_1=0-0.25\times(-6)=0+1.5=1.5.\]

ধাপ ২: \(\nabla L(1.5)=2(1.5-3)=-3\)

\[w_2=1.5-0.25\times(-3)=1.5+0.75=2.25.\]

Loss: \(L(0)=9\to L(1.5)=2.25\to L(2.25)=0.5625\) — কমছে, আর \(w\) minimum \(3\)-এর দিকে এগোচ্ছে। খেয়াল করো: এখানে \(w<3\) বলে gradient ঋণাত্মক, তাই \(-\eta\nabla L\) ধনাত্মক — অর্থাৎ update \(w\)-কে বাড়িয়ে \(3\)-এর দিকে নিচ্ছে। update rule নিজেই সঠিক দিক বেছে নেয়।

৬-নং সমাধান দেখাও

\(L(w)=w^2\), \(\nabla L=2w\), \(\eta=1.5\), \(w_0=1\)। update: \(w_{t+1}=w_t-1.5\cdot 2w_t=(1-3)w_t=-2w_t\)

\[w_1=-2(1)=-2,\quad w_2=-2(-2)=4,\quad w_3=-2(4)=-8.\]

\(|w|\) বাড়ছে: \(1\to2\to4\to8\to\cdots\) — অর্থাৎ diverge করছে! Loss: \(1\to4\to16\to64\), বেড়েই চলেছে। কারণ \(\eta\) খুব বড় — প্রতিটা পদক্ষেপ minimum (\(w=0\)) ছাড়িয়ে উল্টো পাশে আরও দূরে ছুঁড়ে দিচ্ছে (পাহাড়-analogy-তে উপত্যকা ডিঙিয়ে উল্টো গায়ে উঠে যাওয়া)।

Convergence শর্ত: update \(w_{t+1}=(1-2\eta)w_t\), তাই \(|1-2\eta|<1\) হলে converge করবে, অর্থাৎ \(0<\eta<1\)। এখানে \(\eta=1.5>1\), তাই \(|1-2(1.5)|=|-2|=2>1\) — diverge। এটাই দেখায় learning rate কত জরুরি।

৭-নং সমাধান দেখাও

একক ভেক্টর \(d\) (\(\|d\|=1\))-এর জন্য directional derivative \(\partial_d f=\langle\nabla f,d\rangle\)। Cauchy–Schwarz অসমতা বলে:

\[-\|\nabla f\|\,\|d\|\le\langle\nabla f,d\rangle\le\|\nabla f\|\,\|d\|,\]

আর \(\|d\|=1\) বলে \(-\|\nabla f\|\le\partial_d f\le\|\nabla f\|\)। বাঁ-প্রান্তে সমতা (সবচেয়ে ছোট, অর্থাৎ দ্রুততম অবরোহণ) হয় ঠিক তখনই যখন \(d\) আর \(\nabla f\) বিপরীতমুখী সমান্তরাল, অর্থাৎ

\[d=-\frac{\nabla f}{\|\nabla f\|}.\]

এই দিকে \(\partial_d f=-\|\nabla f\|\) (সর্বোচ্চ হারে কমছে)। তাৎপর্য: loss দ্রুততম কমাতে হলে ঠিক \(-\nabla f\) দিকে যেতে হবে — এটাই gradient descent-এর \(w_{t+1}=w_t-\eta\nabla L\) সূত্রের ঋণচিহ্নের গাণিতিক ন্যায্যতা। \(\square\)

৮-নং সমাধান দেখাও

(ক) সরাসরি: \(h(x)=g(f(x))=3f(x)+1=3x^2+1\), তাই

\[h'(x)=6x.\]

(খ) chain rule: \(g'(u)=3\), \(f'(x)=2x\)। তাই

\[h'(x)=g'(f(x))\cdot f'(x)=3\cdot 2x=6x.\]

দুটো মেলে — \(h'(x)=6x\)। ✓

Backprop সংযোগ: neural network অনেকগুলো function-এর composition (\(\cdots\circ g\circ f\)); backpropagation ঠিক এই chain rule-কে স্তরে-স্তরে (পেছন থেকে সামনে) প্রয়োগ করে প্রতিটা layer-এর weight-এর সাপেক্ষে gradient বের করে — এখানকার \(g'(f(x))\cdot f'(x)\) গুণটার মতোই, শুধু matrix (Jacobian) আকারে।


৮. সারসংক্ষেপ ও Checklist

এই অধ্যায়ের পর নিজেকে যাচাই করো:

  • [ ] Scalar field (\(f:\mathbb{R}^n\to\mathbb{R}\)) ও vector field (\(F:\mathbb{R}^n\to\mathbb{R}^m\))-এর পার্থক্য এবং deep learning-এ signal/channel কী — বলতে পারি।
  • [ ] Continuity, Lipschitz continuity\(C^k\) smoothness শ্রেণির অর্থ জানি।
  • [ ] Directional derivative \(\partial_d f\)partial derivative \(\frac{\partial f}{\partial x_i}\)-এর সংজ্ঞা ও সম্পর্ক জানি।
  • [ ] Gradient \(\nabla f\) = partial derivative-এর ভেক্টর; এটা দ্রুততম বৃদ্ধির দিক ও হার দেয় — এবং \(\langle\nabla f,d\rangle=\partial_d f\) সম্পর্ক জানি।
  • [ ] Jacobian gradient-এর সাধারণীকরণ, আর finite difference দিয়ে derivative আন্দাজ করা যায় — বুঝি।
  • [ ] Integral সঞ্চয় মাপে; Riemann integral, line/surface integral ও FTC (\(\int_a^b f=F(b)-F(a)\)) জানি।
  • [ ] Divergence \(\nabla\cdot F\) = বহির্মুখী ফ্লাক্সের ঘনত্ব (scalar); divergence theorem ও gradient-এর সাথে adjoint সম্পর্ক জানি।
  • [ ] Laplacian \(\Delta f=\nabla\cdot\nabla f=\sum_i\partial^2 f/\partial x_i^2\) গণনা করতে পারি; এটা rotation-invariant ও Dirichlet energy-র সাথে যুক্ত — জানি।
  • [ ] Gradient descent update rule \(w_{t+1}=w_t-\eta\nabla L(w_t)\) লিখতে পারি; ঋণচিহ্ন কেন (steepest descent = \(-\nabla L\)) ও learning rate \(\eta\) কী নিয়ন্ত্রণ করে — ব্যাখ্যা করতে পারি।
  • [ ] Loss function একটা scalar field, আর backpropagation = chain rule স্তরে-স্তরে — বুঝি।

➡️ পরের অধ্যায়: 8.4 — Topology ও Differential Geometry — open set, manifold ও tangent space।