تفاوت بین ماتریس و تانسور چیست؟

مقدمه ای بر Tensor & TensorFlow
آگوست 19, 2023
یک بحث مفصل در مورد تانسورها، چرا در یادگیری عمیق اینقدر مهم است؟
آگوست 19, 2023

تفاوت بین ماتریس و تانسور چیست؟

ماتریس شبکه ای از n × m (مثلاً 3 × 3) اعداد است که با پرانتز احاطه شده است. ما می‌توانیم ماتریس‌های هم‌اندازه را اضافه و کم کنیم، یک ماتریس را در ماتریس دیگری ضرب کنیم تا زمانی که اندازه‌ها با هم سازگار باشند ((n × m) × (m × p) = n × p)، و کل یک ماتریس را در یک ثابت ضرب کنیم. بردار ماتریسی است که فقط یک سطر یا ستون دارد . بنابراین یکسری عملیات ریاضی وجود دارد که می توانیم با هر ماتریسی انجام دهیم.

با این حال، ایده اصلی این است که یک ماتریس فقط یک شبکه دو بعدی از اعداد است.

تانسور اغلب به عنوان یک ماتریس تعمیم یافته در نظر گرفته می شود. یعنی می تواند یک ماتریس 1 بعدی (بردار در واقع چنین تانسوری است)، یک ماتریس سه بعدی (چیزی شبیه به مکعب اعداد)، حتی یک ماتریس 0-D (یک عدد منفرد) یا یک ماتریس بالاتر. ساختار ابعادی که تجسم آن دشوارتر است.

بعد تانسور را رتبه آن می گویند

اما این توصیف مهم ترین ویژگی یک تانسور را از دست می دهد!

تانسور یک موجود ریاضی است که در یک ساختار زندگی می کند و با دیگر موجودات ریاضی در تعامل است.

این ویژگی «دینامیکی» یک تانسور کلیدی است که آن را از یک ماتریس صرف متمایز می کند. این یک بازیکن تیمی است که وقتی تغییری ایجاد می‌شود که بر همه آنها تأثیر می‌گذارد، مقادیر عددی آن به همراه مقادیر هم تیمی‌هایش تغییر می‌کند.

هر تانسور رتبه-2 را می توان به عنوان یک ماتریس نشان داد، اما هر ماتریس واقعاً یک تانسور رتبه-2 نیست.

این پاسخ ممکن است برای اهداف شما کافی باشد، اما ما می‌توانیم یک مثال کوچک برای نشان دادن نحوه عملکرد این کار انجام دهیم. این سوال در یک کارگاه آموزشی عمیق مطرح شد، بنابراین بیایید به یک مثال در این زمینه نگاه کنیم.

فرض کنید من یک لایه پنهان از 3 گره در یک شبکه عصبی دارم. داده ها به آنها سرازیر شد، از توابع ReLU آنها عبور کرد و مقادیری را بیرون آورد. فرض کنید، به ترتیب 2.5، 4 و 1.2 دریافت کردیم. (نگران نباشید، به شکل زیر نگاه کنید ) ما می توانیم خروجی این گره ها را به عنوان یک بردار نشان دهیم.

فرض کنید یک لایه دیگر از 3 گره وجود دارد. هر یک از 3 گره از لایه اول دارای یک وزن مرتبط با ورودی خود به هر یک از 3 گره بعدی است. بنابراین، نوشتن این وزن ها به عنوان یک ماتریس 3 × 3 از ورودی ها بسیار راحت خواهد بود. فرض کنید شبکه را بارها به روز کرده ایم و به وزن ها رسیده ایم (به صورت نیمه تصادفی برای این مثال انتخاب شده است)،

در اینجا، وزن‌های یک ردیف همه به همان گره در لایه بعدی می‌روند، و وزن‌های یک ستون خاص همه از همان گره در لایه اول می‌آیند. به عنوان مثال، وزنی که ورودی گره 1 به خروجی گره 3 کمک می کند 0.2 است (ردیف 3، ستون 1). می‌توانیم کل مقادیر وارد شده به لایه بعدی گره‌ها را با ضرب ماتریس وزن در بردار ورودی محاسبه کنیم.

ماتریس را دوست ندارید؟ در اینجا یک گراف است. جریان داده ها از چپ به راست است.

عالی! تا کنون، تنها چیزی که دیده ایم، بکارگیری های ساده ماتریس ها و بردارها بوده است.

ولی!

فرض کنید من می‌خواهم مداخله کنم و از توابع فعال‌سازی سفارشی برای هر نورون استفاده کنم. یک راه ساده لوحانه برای انجام این کار، تغییر مقیاس هر یک از توابع ReLU از لایه اول به صورت جداگانه است. به خاطر این مثال، فرض کنید گره اول را با ضریب 2 افزایش می دهم، گره دوم را به حال خود رها می کنم، و گره سوم را 1/5 کاهش می دهم. این نمودار این توابع را مطابق تصویر زیر تغییر می دهد:

اثر این اصلاح تغییر مقادیر تفکیک شده توسط لایه اول به ترتیب با فاکتورهای 2، 1 و 1/5 است. این معادل ضرب L1 در ماتریس A است،

حال، اگر این مقادیر جدید از طریق شبکه اصلی وزن ها تغذیه شوند، مقادیر خروجی کاملاً متفاوتی دریافت می کنیم، همانطور که درشکل نشان داده شده است :

اگر شبکه عصبی قبلاً به درستی کار می کرد، اکنون آن را شکسته ایم. ما باید آموزش را دوباره اجرا کنیم تا وزن های صحیح را برگردانیم.

مقدار در اولین گره دو برابر بیشتر از قبل است. اگر تمام وزن های خروجی آن را 1/2 کاهش دهیم، سهم خالص آن در لایه بعدی بدون تغییر خواهد بود. ما هیچ کاری برای گره دوم انجام ندادیم، بنابراین می توانیم وزنه های آن را به حال خود رها کنیم. در نهایت، ما باید مجموعه نهایی وزن ها را در 5 ضرب کنیم تا ضریب 1/5 در آن گره را جبران کنیم. از نظر ریاضی، این معادل با استفاده از مجموعه جدیدی از وزن ها است که با ضرب ماتریس وزن اصلی در ماتریس معکوس A به دست می آوریم:

اگر خروجی اصلاح شده لایه اول را با وزن های اصلاح شده ترکیب کنیم، در نهایت مقادیر صحیح به لایه دوم می رسیم:

علیرغم تمام تلاش ما برعکس، شبکه دوباره در حال کار است!

بسیار خوب، ریاضیات زیادی انجام شده است، پس بیایید یک لحظه بنشینیم و خلاصه کنیم.

وقتی ورودی ها، خروجی ها و وزن ها را به عنوان مقادیر ثابت در نظر گرفتیم، آنها را بردار و ماتریس نامیدیم و با آن کار کردیم.

اما زمانی که شروع به بازی کردن با یکی از بردارها کردیم و آن را به روشی منظم تبدیل کردیم، مجبور شدیم با تبدیل وزن ها به روشی مخالف جبران کنیم. این ساختار یکپارچه اضافه شده، ماتریس اعداد را به یک شی تانسور واقعی ارتقا می دهد.

در واقع، ما می توانیم ماهیت تانسوری آن را کمی بیشتر مشخص کنیم. اگر تغییرات ایجاد شده در گره ها را کوواریانت بخوانیم (یعنی تغییر با گره و ضرب در A)، این باعث می شود که وزن ها یک تانسور کوواریانت (متغیر در برابر گره ها، به طور خاص، ضرب در معکوس A به جای خود A) شوند. یک تانسور می تواند در یک بعد کوواریانت و در بعد دیگر متضاد باشد، اما این یک داستان برای روز دیگر است.

و اکنون تفاوت بین ماتریس و تانسور را می دانید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *