পাঠ ০৮ · ৩৫-এর মধ্যে · মডিউল ৩
Home / AI Courses / Math for AI & ML / ম্যাট্রিক্স রৈখিক রূপান্তর

ম্যাট্রিক্সকে রৈখিক রূপান্তর হিসেবে দেখা

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

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

  • ম্যাট্রিক্সকে একটি ফাংশন/রূপান্তর হিসেবে দেখার দৃষ্টিভঙ্গি
  • Rotation, scaling ও projection ম্যাট্রিক্সের নির্দিষ্ট গঠন ও উদাহরণ
  • কেন রূপান্তর যোগ করা (compose করা) মানেই ম্যাট্রিক্স গুণ করা
  • নিউরাল নেটওয়ার্ক লেয়ারের সাথে এই দৃষ্টিভঙ্গির সরাসরি সংযোগ

১ · ম্যাট্রিক্স = ভেক্টর থেকে ভেক্টরে একটি ফাংশন

পাঠ ০৭-এ আমরা ম্যাট্রিক্স–ভেক্টর গুণন $\mathbf{Ax}$ শিখেছি একটি হিসাব হিসেবে। এখন এটাকে ভিন্নভাবে দেখা যাক — $\mathbf{A}\in\mathbb{R}^{m\times n}$-কে একটি রৈখিক রূপান্তরLinear Transformationএমন একটি ফাংশন $T:\mathbb{R}^n\to\mathbb{R}^m$ যা $T(\mathbf{u}+\mathbf{v})=T(\mathbf{u})+T(\mathbf{v})$ এবং $T(c\mathbf{u})=cT(\mathbf{u})$ মেনে চলে। হিসেবে ভাবুন — একটি ফাংশন $T:\mathbb{R}^n\to\mathbb{R}^m$ যেখানে $T(\mathbf{x})=\mathbf{Ax}$। "রৈখিক" শব্দটি এসেছে এই কারণে যে এটি যোগ ও স্কেলিং সংরক্ষণ করে: $\mathbf{A}(\mathbf{u}+\mathbf{v})=\mathbf{Au}+\mathbf{Av}$ এবং $\mathbf{A}(c\mathbf{u})=c\mathbf{Au}$। প্রতিটি ইনপুট ভেক্টর $\mathbf{x}$-এর জন্য একটি নির্দিষ্ট আউটপুট ভেক্টর $\mathbf{y}=\mathbf{Ax}$ আছে — ঠিক যেমন $f(x)=2x$ একটি সংখ্যাকে আরেকটি সংখ্যায় পাঠায়, $\mathbf{A}$ একটি ভেক্টরকে আরেকটি ভেক্টরে পাঠায়।

কেন এই দৃষ্টিভঙ্গি গুরুত্বপূর্ণ

যখন আমরা ম্যাট্রিক্সকে শুধু "সংখ্যার একটি বাক্স" না ভেবে "স্পেসে একটি কাজ করা রূপান্তর" হিসেবে দেখি, তখন নিউরাল নেটওয়ার্কের প্রতিটি লেয়ার একটি জ্যামিতিক পদক্ষেপ হয়ে ওঠে — ইনপুট স্পেসকে ঘুরিয়ে, স্ট্রেচ করে, নতুন একটি স্পেসে নিয়ে যাওয়া, যেখানে পরের লেয়ারের জন্য প্যাটার্ন আলাদা করা সহজ হয়।

২ · Rotation ম্যাট্রিক্স

দ্বিমাত্রিক স্পেসে একটি ভেক্টরকে মূলবিন্দুর চারদিকে $\theta$ কোণে ঘোরাতে (counter-clockwise) এই ম্যাট্রিক্স ব্যবহার হয়:

$$ \mathbf{R}_\theta = \begin{pmatrix}\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta\end{pmatrix} $$

যেমন $\theta=90°$ হলে $\cos90°=0$, $\sin90°=1$, তাই $\mathbf{R}_{90°}=\begin{pmatrix}0&-1\\1&0\end{pmatrix}$। এটি ভেক্টর $(1,0)$-এর ওপর প্রয়োগ করলে: $\mathbf{R}_{90°}(1,0)^T = (0\cdot1+(-1)\cdot0,\ 1\cdot1+0\cdot0)^T=(0,1)$ — ঠিক যা প্রত্যাশিত, $x$-অক্ষের ধনাত্মক দিকের ভেক্টরকে $90°$ ঘোরালে $y$-অক্ষের ধনাত্মক দিকে যাওয়ার কথা।

৩ · Scaling ম্যাট্রিক্স

একটি ডায়াগোনাল (diagonal) ম্যাট্রিক্স প্রতিটি অক্ষ বরাবর ভিন্ন হারে স্কেল (সংকোচন/প্রসারণ) করে:

$$ \mathbf{S} = \begin{pmatrix}s_1 & 0 \\ 0 & s_2\end{pmatrix}, \qquad \mathbf{S}\mathbf{x} = (s_1 x_1,\ s_2 x_2) $$

যেমন $\mathbf{S}=\begin{pmatrix}2&0\\0&0.5\end{pmatrix}$ প্রথম অক্ষে দ্বিগুণ প্রসারিত করে, দ্বিতীয় অক্ষে অর্ধেক সংকুচিত করে। $s_i$ ঋণাত্মক হলে সেই অক্ষ বরাবর প্রতিফলন (reflection)-ও ঘটে।

৪ · Projection ম্যাট্রিক্স

একটি প্রজেকশন ম্যাট্রিক্স একটি উচ্চ-মাত্রিক ভেক্টরকে একটি নিম্ন-মাত্রিক সাবস্পেসে "চ্যাপ্টা" করে দেয়। $x$-অক্ষে প্রজেক্ট করার ম্যাট্রিক্স:

$$ \mathbf{P} = \begin{pmatrix}1&0\\0&0\end{pmatrix}, \qquad \mathbf{P}\mathbf{x} = (x_1,\ 0) $$

এটি $y$-উপাদানকে সম্পূর্ণ মুছে ফেলে — তথ্য হারিয়ে যায় (এই কারণে প্রজেকশন সাধারণত ইনভার্সিবল নয়, যা আমরা পাঠ ০৯-এ দেখব)।

৫ · রূপান্তর যোগ করা = ম্যাট্রিক্স গুণ করা

ধরুন আমরা প্রথমে একটি ভেক্টরকে $\mathbf{R}$ দিয়ে ঘোরাতে চাই, তারপর $\mathbf{S}$ দিয়ে স্কেল করতে চাই। ধাপে ধাপে করলে: $\mathbf{y}=\mathbf{R}\mathbf{x}$, তারপর $\mathbf{z}=\mathbf{S}\mathbf{y}=\mathbf{S}(\mathbf{R}\mathbf{x})$। কিন্তু ম্যাট্রিক্স গুণন সংযোজিত (associative), তাই:

$$ \mathbf{z} = \mathbf{S}(\mathbf{R}\mathbf{x}) = (\mathbf{SR})\mathbf{x} $$

অর্থাৎ দুটি রূপান্তর একের পর এক প্রয়োগ করার বদলে, আগে থেকেই $\mathbf{M}=\mathbf{SR}$ হিসাব করে রাখলে, একটিমাত্র ম্যাট্রিক্স–ভেক্টর গুণনেই একই ফলাফল পাওয়া যায়। লক্ষ করুন ক্রম গুরুত্বপূর্ণ — $\mathbf{SR}\neq\mathbf{RS}$ (পাঠ ০৭-এর non-commutativity), অর্থাৎ "আগে ঘোরাও, পরে স্কেল করো" আর "আগে স্কেল করো, পরে ঘোরাও" সাধারণত ভিন্ন ফলাফল দেয়।

একে একটি রেসিপির ধাপের মতো ভাবুন: "প্রথমে ময়দা মাখাও, তারপর বেক করো" আর "প্রথমে বেক করো, তারপর ময়দা মাখাও" — একই দুটি ধাপ, কিন্তু ক্রম বদলালে সম্পূর্ণ ভিন্ন ফলাফল। ম্যাট্রিক্স গুণনও ঠিক তেমন ক্রম-সংবেদনশীল।

এটিই একটি গভীর ML সংযোগের ভিত্তি — একটি নিউরাল নেটওয়ার্কের একটি লেয়ার $\mathbf{z}=\mathbf{Wx}+\mathbf{b}$ হলো একটি অ্যাফাইন রূপান্তর (রৈখিক রূপান্তর $\mathbf{Wx}$ + একটি shift $\mathbf{b}$), এরপর একটি নন-লিনিয়ার অ্যাক্টিভেশন ফাংশন (মডিউল ৪-এ কভার হবে) সেই সরল রৈখিক জগৎটাকে "বাঁকিয়ে" দেয়। একাধিক লেয়ার স্ট্যাক করা মানে একাধিক রূপান্তর ও ওয়ার্প একের পর এক প্রয়োগ করা — যার মাধ্যমে নেটওয়ার্ক ইনপুট স্পেসকে ধীরে ধীরে এমন একটি আকারে রূপান্তরিত করে যেখানে ক্লাসগুলো আলাদা করা সহজ হয়ে যায়।

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

নিচে rotation ও scaling ম্যাট্রিক্স প্রয়োগ করে দেখানো হলো যে ধাপে ধাপে রূপান্তর প্রয়োগ করা এবং একটি একক combined ম্যাট্রিক্স প্রয়োগ করা একই ফলাফল দেয়।

Python · NumPy
import numpy as np

theta = np.pi / 2  # ৯০ ডিগ্রি
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta),  np.cos(theta)]])

S = np.array([[2.0, 0.0],
              [0.0, 0.5]])

x = np.array([1.0, 0.0])

# ধাপে ধাপে: আগে ঘোরাও, তারপর স্কেল করো
y = R @ x
z_step_by_step = S @ y

# একক combined ম্যাট্রিক্স দিয়ে একবারে
M = S @ R
z_combined = M @ x

print("ধাপে ধাপে:", z_step_by_step)
print("Combined ম্যাট্রিক্স দিয়ে:", z_combined)
print("দুটি সমান?", np.allclose(z_step_by_step, z_combined))

# ক্রম বদলালে ভিন্ন ফলাফল
M_reversed = R @ S
print("উল্টো ক্রমে (আগে স্কেল, পরে ঘোরাও):", M_reversed @ x)

    

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

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

প্র ০১ একটি projection ম্যাট্রিক্স ($y$-উপাদান মুছে ফেলা) প্রয়োগ করার পর, কি সেই রূপান্তর থেকে মূল ভেক্টর ফিরে পাওয়া সম্ভব?

না। একবার $y$-উপাদান মুছে ফেললে (শূন্য করে দিলে), সেই তথ্য চিরতরে হারিয়ে যায় — অসীম সংখ্যক ভিন্ন মূল ভেক্টর একই প্রজেকশন আউটপুট দিতে পারে (যেমন $(3,5)$ ও $(3,-2)$ উভয়ই $x$-অক্ষে প্রজেক্ট হলে $(3,0)$ দেয়)। এই কারণেই পাঠ ০৯-এ আমরা দেখব প্রজেকশন ম্যাট্রিক্সের কোনো ইনভার্স থাকে না — একাধিক ইনপুট একই আউটপুটে ম্যাপ হলে ফাংশনটি বিপরীতমুখী (invertible) হতে পারে না।

প্র ০২ যদি একটি নিউরাল নেটওয়ার্কে অ্যাক্টিভেশন ফাংশন (নন-লিনিয়ারিটি) না থাকত, তাহলে ১০টি লেয়ার স্ট্যাক করে কী পাওয়া যেত?

শুধুমাত্র একটি বড় রৈখিক রূপান্তর — কারণ একাধিক রৈখিক রূপান্তরের কম্পোজিশন নিজেই একটি রৈখিক রূপান্তর (একটি একক ম্যাট্রিক্স $\mathbf{W}_{10}\mathbf{W}_9\cdots\mathbf{W}_1$-এর সমতুল্য)। অর্থাৎ ১০টি লেয়ার গাণিতিকভাবে ১টি লেয়ারের চেয়ে বেশি কিছু প্রকাশ করতে পারত না। নন-লিনিয়ারিটিই গভীরতাকে অর্থবহ করে তোলে।

প্র ০৩ একটি rotation ম্যাট্রিক্স ভেক্টরের দৈর্ঘ্য (norm) বদলায় কি? কেন এটি গুরুত্বপূর্ণ হতে পারে?

না, rotation ভেক্টরের দৈর্ঘ্য অপরিবর্তিত রাখে — এটি শুধু দিক বদলায়, মাত্রা নয় (একে বলে orthogonal transformation)। এই বৈশিষ্ট্যটি গুরুত্বপূর্ণ কারণ কিছু নিউরাল নেটওয়ার্ক আর্কিটেকচার ইচ্ছাকৃতভাবে এমন ওজন ম্যাট্রিক্স ব্যবহার করার চেষ্টা করে যা norm প্রায় সংরক্ষণ করে — এতে গ্রেডিয়েন্ট অনেকগুলো লেয়ার পার হয়েও অতিরিক্ত বড় বা ছোট হয়ে যায় না (vanishing/exploding gradient সমস্যা, মডিউল ৪-এ আসবে)।

অনুশীলন

  1. হাতে হিসাব করুন: $\theta=180°$-এর জন্য rotation ম্যাট্রিক্স লিখুন এবং $(2,3)$-এর ওপর প্রয়োগ করে দেখুন এটি কী করে।

    $\cos180°=-1$, $\sin180°=0$, তাই $\mathbf{R}_{180°}=\begin{pmatrix}-1&0\\0&-1\end{pmatrix}=-\mathbf{I}$। $(2,3)$-এ প্রয়োগ করলে $(-2,-3)$ পাওয়া যায় — অর্থাৎ $180°$ ঘোরানো মানে মূলবিন্দুর সাপেক্ষে ভেক্টরটিকে সম্পূর্ণ উল্টে দেওয়া।

  2. যাচাই করুন: কোড সেলে theta-কে np.pi/4 (৪৫°) করে এবং S-কে identity matrix বানিয়ে চালান — combined ম্যাট্রিক্স $\mathbf{M}$ কি শুধুই rotation matrix-এর সমান হয়?

    হ্যাঁ — $\mathbf{S}=\mathbf{I}$ হলে $\mathbf{M}=\mathbf{I}\cdot\mathbf{R}=\mathbf{R}$, কারণ আইডেন্টিটি ম্যাট্রিক্স (পাঠ ০৭) দিয়ে গুণ করলে অন্য ম্যাট্রিক্স অপরিবর্তিত থাকে। এটি প্রমাণ করে যে scaling "না করা" আসলে ঠিক $\mathbf{I}$-এর সমতুল্য।

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

পূর্ববর্তী পাঠ
ম্যাট্রিক্স ও ম্যাট্রিক্স মাল্টিপ্লিকেশন