পাঠ ০৭ · ৩৫-এর মধ্যে · মডিউল ৩
Home / AI Courses / Math for AI & ML / ম্যাট্রিক্স ও গুণন

ম্যাট্রিক্স ও ম্যাট্রিক্স মাল্টিপ্লিকেশন

Matrices & matrix multiplication
১০ মিনিট পড়া মধ্যম · Intermediate NumPy কোডসহ সম্পূর্ণ বাংলায়

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

  • ম্যাট্রিক্সের কঠোর সংজ্ঞা ও নোটেশন ($\mathbf{A}\in\mathbb{R}^{m\times n}$, এন্ট্রি $A_{ij}$)
  • ম্যাট্রিক্স–ভেক্টর গুণন কীভাবে কাজ করে এবং এর দুটি সমতুল্য ব্যাখ্যা
  • ম্যাট্রিক্স–ম্যাট্রিক্স গুণনের সূত্র, ডাইমেনশন নিয়ম, এবং কেন এটি কম্যুটেটিভ নয়
  • আইডেন্টিটি ম্যাট্রিক্স এবং NumPy-তে @ অপারেটর দিয়ে গুণন যাচাই

১ · ম্যাট্রিক্স কী — সংজ্ঞা ও নোটেশন

পাঠ ০৩-০৬-এ আমরা ভেক্টর নিয়ে কাজ করেছি — সংখ্যার একটি সাজানো তালিকা। এখন কল্পনা করুন এরকম কয়েকটি ভেক্টর পাশাপাশি সাজানো হলো। এই সাজানো গঠনটাকেই বলে ম্যাট্রিক্সMatrixসংখ্যার একটি আয়তক্ষেত্রাকার (rectangular) সাজানো — $m$টি সারি ও $n$টি কলাম। — $m$টি সারি (row) ও $n$টি কলাম (column) বিশিষ্ট একটি আয়তক্ষেত্রাকার সাজানো। আমরা লিখি $\mathbf{A}\in\mathbb{R}^{m\times n}$, এবং এর $i$-তম সারি, $j$-তম কলামের এন্ট্রিটিকে বলি $A_{ij}$:

$$ \mathbf{A} = \begin{pmatrix} A_{11} & A_{12} & \cdots & A_{1n} \\ A_{21} & A_{22} & \cdots & A_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ A_{m1} & A_{m2} & \cdots & A_{mn} \end{pmatrix} $$

মনে রাখার সহজ উপায়: "সারি আগে, কলাম পরে" — $m\times n$ মানে $m$টি সারি, $n$টি কলাম। একটি ভেক্টর $\mathbf{x}\in\mathbb{R}^n$-কে একটি $n\times 1$ ম্যাট্রিক্স (একটি কলাম) হিসেবেও ভাবা যায় — তাই ম্যাট্রিক্স আসলে ভেক্টরের একটি প্রাকৃতিক সাধারণীকরণ (generalization)।

একটি দরকারি দৃষ্টিভঙ্গি

একটি $m\times n$ ম্যাট্রিক্সকে $n$টি কলাম-ভেক্টরের পাশাপাশি সাজানো হিসেবেও দেখা যায় — প্রতিটি কলাম $\mathbb{R}^m$-এর একটি ভেক্টর। এই দৃষ্টিভঙ্গিটি পাঠ ০৬-এর span ও basis-এর ধারণার সাথে সরাসরি যুক্ত, এবং পরের অংশে ম্যাট্রিক্স–ভেক্টর গুণন বোঝার সবচেয়ে সহজ উপায়।

২ · ম্যাট্রিক্স–ভেক্টর গুণন

$\mathbf{A}\in\mathbb{R}^{m\times n}$ এবং $\mathbf{x}\in\mathbb{R}^n$ হলে, $\mathbf{Ax}\in\mathbb{R}^m$ — ফলাফল একটি নতুন ভেক্টর, যার $i$-তম উপাদান হলো $\mathbf{A}$-র $i$-তম সারির সাথে $\mathbf{x}$-এর ডট প্রোডাক্ট (পাঠ ০৪):

$$ (\mathbf{Ax})_i = \sum_{j=1}^n A_{ij}\,x_j $$

এর একটি দ্বিতীয়, একই রকম গুরুত্বপূর্ণ ব্যাখ্যা আছে: $\mathbf{Ax}$ হলো $\mathbf{A}$-এর কলামগুলোর একটি ওজনযুক্ত যোগফল (weighted sum), যেখানে ওজনগুলো হলো $\mathbf{x}$-এর উপাদান — $\mathbf{Ax} = x_1\mathbf{a}_1 + x_2\mathbf{a}_2 + \cdots + x_n\mathbf{a}_n$, যেখানে $\mathbf{a}_j$ হলো $\mathbf{A}$-এর $j$-তম কলাম। দুটি ব্যাখ্যাই সমান সঠিক — শুধু হিসাব করার দুটি ভিন্ন উপায়।

উদাহরণ: $\mathbf{A}=\begin{pmatrix}1&0&2\\-1&3&1\end{pmatrix}$, $\mathbf{x}=(2,1,0)$ হলে $(\mathbf{Ax})_1 = 1(2)+0(1)+2(0) = 2$ এবং $(\mathbf{Ax})_2 = -1(2)+3(1)+1(0) = 1$ — অর্থাৎ $\mathbf{Ax}=(2,1)$। লক্ষ করুন $\mathbf{A}$ ছিল $2\times3$ আর $\mathbf{x}$ ছিল $3\times1$ — ফলাফল $2\times1$।

৩ · ম্যাট্রিক্স–ম্যাট্রিক্স গুণন

ম্যাট্রিক্স–ভেক্টর গুণনকে সাধারণীকরণ করলেই ম্যাট্রিক্স–ম্যাট্রিক্স গুণন পাওয়া যায়। $\mathbf{A}\in\mathbb{R}^{m\times n}$ ও $\mathbf{B}\in\mathbb{R}^{n\times p}$ হলে, $\mathbf{C}=\mathbf{AB}\in\mathbb{R}^{m\times p}$, এবং:

$$ (\mathbf{AB})_{ij} = \sum_{k=1}^n A_{ik}\,B_{kj} $$

মানে $\mathbf{C}$-এর $(i,j)$ এন্ট্রি হলো $\mathbf{A}$-এর $i$-তম সারি ও $\mathbf{B}$-এর $j$-তম কলামের ডট প্রোডাক্ট। এখানে একটি কঠোর নিয়ম আছে — ডাইমেনশন-ম্যাচিং নিয়মDimension-matching rule$\mathbf{A}$-এর কলাম-সংখ্যা অবশ্যই $\mathbf{B}$-এর সারি-সংখ্যার সমান হতে হবে, নইলে গুণন সংজ্ঞায়িতই নয়।: $\mathbf{A}$-এর কলাম-সংখ্যা ($n$) অবশ্যই $\mathbf{B}$-এর সারি-সংখ্যার ($n$) সমান হতে হবে। ফলাফলের আকার হয় বাইরের দুটি সংখ্যা — $(m\times n)(n\times p) = (m\times p)$। যদি এই সংখ্যা না মেলে, গুণনটাই সংজ্ঞায়িত নয়।

একটি ছোট উদাহরণ হাতে করে দেখা যাক। $\mathbf{A}=\begin{pmatrix}1&2\\3&4\end{pmatrix}$, $\mathbf{B}=\begin{pmatrix}5&6\\7&8\end{pmatrix}$ হলে:

$$ \mathbf{AB} = \begin{pmatrix}1(5)+2(7) & 1(6)+2(8) \\ 3(5)+4(7) & 3(6)+4(8)\end{pmatrix} = \begin{pmatrix}19 & 22 \\ 43 & 50\end{pmatrix} $$

৪ · Non-commutativity ও আইডেন্টিটি ম্যাট্রিক্স

সাধারণ সংখ্যার গুণনে $ab=ba$ — কিন্তু ম্যাট্রিক্সে এটি সাধারণত সত্য নয়: $\mathbf{AB}\neq\mathbf{BA}$। উপরের উদাহরণেই $\mathbf{BA}$ হিসাব করলে ভিন্ন ফলাফল আসবে:

$$ \mathbf{BA} = \begin{pmatrix}5(1)+6(3) & 5(2)+6(4) \\ 7(1)+8(3) & 7(2)+8(4)\end{pmatrix} = \begin{pmatrix}23 & 34 \\ 31 & 46\end{pmatrix} \neq \mathbf{AB} $$

এই non-commutativity ভালো করে মনে রাখা জরুরি — ব্যাকপ্রপাগেশনে (মডিউল ৫) গ্রেডিয়েন্ট গণনার সময় ম্যাট্রিক্স গুণনের ক্রম বদলালে সম্পূর্ণ ভুল ফলাফল আসতে পারে।

অন্যদিকে, একটি বিশেষ ম্যাট্রিক্স আছে যেটি সাধারণ সংখ্যায় $1$-এর মতো কাজ করে — আইডেন্টিটি ম্যাট্রিক্সIdentity Matrixপ্রধান কর্ণে (diagonal) ১, বাকি সব জায়গায় ০ — যেকোনো ম্যাট্রিক্সের সাথে গুণ করলে সেই ম্যাট্রিক্সই ফেরত দেয়। $\mathbf{I}$, যার প্রধান কর্ণে (diagonal) $1$ আর বাকি সব জায়গায় $0$। এর বিশেষত্ব: $\mathbf{AI}=\mathbf{IA}=\mathbf{A}$ — যেকোনো সাইজ-সামঞ্জস্যপূর্ণ ম্যাট্রিক্সের সাথে গুণ করলে এটি সেই ম্যাট্রিক্সকেই অপরিবর্তিত ফেরত দেয়। পরের পাঠে (পাঠ ০৯) আমরা দেখব $\mathbf{I}$ কীভাবে ম্যাট্রিক্স ইনভার্সের সংজ্ঞায় সরাসরি ব্যবহৃত হয়।

সাধারণ ভুল: $\mathbf{AB}$ ও $\mathbf{BA}$-কে সমান ভেবে হিসাব সরল করার চেষ্টা করবেন না। PyTorch/NumPy কোডে A @ B আর B @ A সাধারণত সম্পূর্ণ ভিন্ন ফলাফল দেয় — মাঝেমধ্যে shape error-ও দেয়।

নিউরাল নেটওয়ার্কের প্রসঙ্গে এই সবকিছুর ব্যবহারিক গুরুত্ব বিশাল। একটি লেয়ারের গণনা $\mathbf{z}=\mathbf{Wx}+\mathbf{b}$ — এখানে $\mathbf{W}$ একটি ওজন ম্যাট্রিক্স, এবং পুরো একটি ব্যাচ ডেটার (একসাথে অনেকগুলো $\mathbf{x}$) জন্য এই গণনা একটি একক ম্যাট্রিক্স–ম্যাট্রিক্স গুণনে পরিণত হয় — এই কারণেই GPU-তে এত দ্রুত চলে।

৫ · কোড দিয়ে যাচাই

নিচে উপরের হাতে-করা হিসাবটাই NumPy দিয়ে যাচাই করা হলো, এবং দেখানো হলো $\mathbf{AB}\neq\mathbf{BA}$।

Python · NumPy
import numpy as np

A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])

AB = A @ B      # np.matmul(A, B)-এর সমতুল্য
BA = B @ A

print("AB =\n", AB)
print("BA =\n", BA)
print("AB == BA?", np.array_equal(AB, BA))

# আইডেন্টিটি ম্যাট্রিক্স — A অপরিবর্তিত থাকে
I = np.eye(2)
print("A @ I =\n", A @ I)

    
A @ B — পাইথনে ম্যাট্রিক্স গুণনের জন্য @ অপারেটর ব্যবহার করুন, সাধারণ * নয়। A * B NumPy-তে element-wise (উপাদান-ভিত্তিক) গুণন করে — সম্পূর্ণ ভিন্ন একটি অপারেশন যা শুধু একই shape-এর ম্যাট্রিক্সে কাজ করে।

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

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

প্র ০১ $\mathbf{A}$ একটি $3\times4$ ম্যাট্রিক্স এবং $\mathbf{B}$ একটি $4\times2$ ম্যাট্রিক্স হলে, $\mathbf{AB}$ সংজ্ঞায়িত কি না, এবং হলে ফলাফলের আকার কত?

সংজ্ঞায়িত — কারণ $\mathbf{A}$-এর কলাম-সংখ্যা ($4$) $\mathbf{B}$-এর সারি-সংখ্যার ($4$) সমান। ফলাফলের আকার হবে বাইরের দুটি সংখ্যা: $3\times2$। কিন্তু $\mathbf{BA}$ সংজ্ঞায়িত নয় — $\mathbf{B}$-এর কলাম-সংখ্যা ($2$) $\mathbf{A}$-এর সারি-সংখ্যার ($3$) সমান নয়।

প্র ০২ একটি নিউরাল নেটওয়ার্কে একবারে ১টি ইনপুট না পাঠিয়ে ১২৮টি ইনপুট (একটি "ব্যাচ") একসাথে পাঠানো হয় কেন? এটি ম্যাট্রিক্স গুণনের সাথে কীভাবে সম্পর্কিত?

১টি ইনপুট ভেক্টর $\mathbf{x}$-এর জন্য $\mathbf{Wx}$ একটি ম্যাট্রিক্স–ভেক্টর গুণন। কিন্তু ১২৮টি ইনপুটকে একসাথে কলাম হিসেবে সাজিয়ে একটি ম্যাট্রিক্স $\mathbf{X}$ (আকার $n\times128$) বানালে, $\mathbf{WX}$ একটি একক ম্যাট্রিক্স–ম্যাট্রিক্স গুণনে সবগুলোর ফলাফল একসাথে দেয়। GPU হাজার হাজার কোর সমান্তরালভাবে ব্যবহার করে এই একক বড় গুণনটি একবারে অনেক দ্রুত সমাধান করতে পারে — ১২৮টি আলাদা ছোট গুণনের চেয়ে।

প্র ০৩ $\mathbf{AB}=\mathbf{AC}$ হলে কি সবসময় $\mathbf{B}=\mathbf{C}$ হবে (যেমন সাধারণ সংখ্যায় $a\neq0$ হলে $ab=ac\Rightarrow b=c$)?

না, সবসময় নয়। সাধারণ সংখ্যায় এটি সত্য কারণ $a\neq0$ হলে $a$-এর একটি ইনভার্স ($1/a$) থাকে। কিন্তু ম্যাট্রিক্সে, $\mathbf{A}$ শূন্য-ম্যাট্রিক্স না হলেও তার ইনভার্স নাও থাকতে পারে (পাঠ ০৯-এ দেখব — $\det(\mathbf{A})=0$ হলে ইনভার্স নেই)। ইনভার্স ছাড়া উভয় পাশে $\mathbf{A}^{-1}$ দিয়ে গুণ করে $\mathbf{B}=\mathbf{C}$ প্রমাণ করা যায় না।

অনুশীলন

  1. হাতে হিসাব করুন: $\mathbf{A}=\begin{pmatrix}2&0\\1&3\end{pmatrix}$ ও $\mathbf{B}=\begin{pmatrix}1&2\\0&1\end{pmatrix}$ হলে $\mathbf{AB}$ ও $\mathbf{BA}$ হাতে হিসাব করুন এবং দেখুন তারা সমান কি না।

    $\mathbf{AB}=\begin{pmatrix}2(1)+0(0)&2(2)+0(1)\\1(1)+3(0)&1(2)+3(1)\end{pmatrix}=\begin{pmatrix}2&4\\1&5\end{pmatrix}$। $\mathbf{BA}=\begin{pmatrix}1(2)+2(1)&1(0)+2(3)\\0(2)+1(1)&0(0)+1(3)\end{pmatrix}=\begin{pmatrix}4&6\\1&3\end{pmatrix}$। দুটি স্পষ্টভাবে ভিন্ন — কোডে চালিয়ে যাচাই করুন।

  2. ডাইমেনশন যাচাই করুন: $\mathbf{A}$ আকার $5\times3$, $\mathbf{B}$ আকার $3\times7$ হলে $\mathbf{AB}$-এর আকার কত? $\mathbf{BA}$ কি সংজ্ঞায়িত?

    $\mathbf{AB}$ সংজ্ঞায়িত এবং আকার $5\times7$ ($3$ ভেতরে মিলে গেছে, বাইরের $5$ ও $7$ থেকে যায়)। $\mathbf{BA}$ সংজ্ঞায়িত নয় — $\mathbf{B}$-এর কলাম ($7$) $\mathbf{A}$-এর সারির ($5$) সাথে মেলে না।

  3. কোড বদলান: উপরের কোড সেলে A-কে একটি $3\times2$ ম্যাট্রিক্স ও B-কে একটি $2\times3$ ম্যাট্রিক্স বানিয়ে A @ B ও B @ A-এর আকার তুলনা করুন — এবার দুটোই সংজ্ঞায়িত কিন্তু ভিন্ন আকারের!

    A @ B হবে $3\times3$, আর B @ A হবে $2\times2$ — শুধু ভিন্ন মান নয়, ভিন্ন আকারও। এটি স্পষ্ট প্রমাণ যে non-commutativity শুধু মান নয়, কাঠামোগতভাবেও গভীর।

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

পূর্ববর্তী পাঠ
লিনিয়ার ইন্ডিপেন্ডেন্স, স্প্যান ও বেসিস