MatlabTips
891 subscribers
462 photos
72 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
🔵قسمت اول: از فکر بکر به مدل های انتشار (diffusion models)🔵

بازی فکر بکر (Mastermind) یک بازی ساده‌ی «کد شکنی» (code breaking) برای دو نفر است. یکی از بازیکنان نقش رمزگذار (کسی که کد را پنهان می‌کند) و دیگری نقش رمزشکن را دارد. این بازی با استفاده از موارد زیر انجام می‌شود:

یک صفحه‌ی حدس‌زنی که دارای یک پوشش است که چهار سوراخ بزرگ (محل قرارگیری کد) را می‌پوشاند، و ردیف‌هایی شامل چهار سوراخ بزرگ برای هر حدس و در کنار آن چهار سوراخ کوچک برای امتیازدهی دارد.

میخ‌های رنگی برای کد که معمولاً در شش رنگ مختلف هستند و باید در سوراخ‌های بزرگ قرار گیرند.

میخ‌های امتیاز که به رنگ‌های سیاه و سفید هستند.

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

برای طراحی یک الگوریتم (استراتژی) بهینه برای انتخاب بهترین حدس‌ها در این بازی، باید توجه داشت که یک استراتژی بهینه، حدس‌هایی را انتخاب می‌کند که «فضای امکان‌ها را به مؤثرترین شکل تقسیم کند». پیش از حل این بازی می‌توان به بازی دیگری فکر کرد که شباهت‌هایی با آن دارد و «بیست سؤال» نام دارد. هدف این بازی حدس زدن واژه‌ای است که در ذهن رمزگذار قرار دارد، با استفاده از کمترین تعداد سؤال. بهترین سؤال‌ها آن‌هایی هستند که بیشترین تقسیم را در فضای امکان‌ها ایجاد می‌کنند، به طوری که با هر سؤال بیشترین اطلاعات ممکن درباره‌ی واژه به دست آید. برای مثال، سؤال «آیا یک حیوان است؟» تقسیم بزرگ‌تری نسبت به سؤال «آیا اسب است؟» ایجاد می‌کند.

در سال ۱۹۰۱، چارلز سندرز پرس درباره‌ی عوامل صرفه‌جویی در پژوهش که حاکم بر انتخاب فرضیه هستند بحث کرد:

- ارزانی

- ارزش ذاتی (طبیعت غریزی و احتمال منطقی)

- نسبت (احتیاط، گستردگی و سادگی) به پروژه‌های دیگر (فرضیه‌ها و تحقیقات دیگر)

و با اشاره به احتیاط ماهرانه گفت:

بنابراین بیست فرضیه‌ی ماهرانه می‌تواند چیزی را مشخص کند که شاید دویست هزار فرضیه‌ی احمقانه از انجام آن عاجز باشند. راز این کار در احتیاطی نهفته است که یک فرضیه را به کوچک‌ترین اجزای منطقی آن تقسیم می‌کند، و تنها یکی از آن‌ها را در هر مرحله به خطر می‌اندازد.
🔵قسمت دو: از فکر بکر به مدل های انتشار (diffusion models)🔵

ددونالد کنوث (دانشمند مشهور علوم کامپیوتر) روشی بهینه برای حل «بازی حدس کد» ارائه کرده است که بر ایدۀ «مینیمم کردن بدترین حالت» (Minimax) استوار است. در این روش:

تعریف مسئله:
ما n رنگ و d جایگاه داریم و کد مخفی یک رشتۀ d-تایی از این رنگ‌ها است. پس در مجموع n^d کد ممکن وجود دارد.

مجموعه S تمام گزینه‌های فعلیِ «هنوز ممکن» را نشان می‌دهد. در ابتدا S برابر با همۀ کدهای ممکن (Ω) است.

روند کلی:
یک «حدس» (g) هم یک رشتۀ d-تایی از رنگ‌هاست. پس از هر حدس، امتیازی دو بخشی دریافت می‌کنید:
A: تعداد رنگ‌هایی که دقیقاً در جای درست قرار گرفته‌اند.
B: تعداد رنگ‌های درستی که در جایگاه نادرست واقع شده‌اند.

به‌روزرسانی مجموعه گزینه‌ها:

با توجه به امتیازی که برای حدس g گرفته می‌شود، می‌توانیم تمام کدهایی از S را که چنین امتیازی نمی‌دهند حذف کنیم تا تعداد کدهای ممکن کمتر شود.

گزینش حدس بهینه:

در هر مرحله، ما می‌خواهیم حدسی بزنیم که در بدترین حالت کمترین تعداد کدِ ممکن را برای مرحلۀ بعد باقی بگذارد.

بنابراین، برای هر حدس کاندید g درΩ، نگاه می‌کنیم اگر آن را بزنیم، در بدترین حالت چقدر از کدهای S ممکن است باقی بماند. بعد حدسی را انتخاب می‌کنیم که این «بیشترین باقی‌مانده» را تا حد ممکن کوچک کند (مینیمم کردن بدترین حالت).
خلاصه:
این الگوریتم در هر مرحله حدسی می‌زند که بدترین حالت پس از دریافت امتیاز را بهتر (کوچک‌تر) کند. به این ترتیب، بعد از هر حدس، مجموعه کدهای ممکن S تا جای ممکن کوچک می‌شود و در نهایت با کمترین تعداد حدس‌های ممکن به جواب می‌رسیم.

(در این پروژه ی پایتون این بازی ساده را همراه با یک اکتور بسیار ساده که می تواند بازی را در ۵ قدم یا کمتر ببرد پیاده سازی کرده ام. این تمرین خوبی برای دیدن این است که یک «بازی گر» دیجیتال چگونه ممکن است کار کند)

روش مینیمم کردن بدترین حالت یک اسراتژی کلی برای بازی کردن در هر بازی ای رقابتی هم هست. به طور مثال در شطرنج شما فقط به حرکات خود فکر نمیکنید بلکه به اینکه هر مهره ای که حرکت دهید چقدر برایتان خوب یا بد است هم فکر میکنید. برای اینکه می توان گفت یا حداکثر امتیاز طرف مقابل را کمینه (minimax) یا کمترین ضرر طرف مقابل را بیشینه (maxmin). همین روش بسیار ساده در چارچوب شطرنج باز های کلاسیک مانند دیپ بلو (deep blue) در سال ۱۹۸۴ گری کاسپاروف قهرمان شطرنج جهان را شکست دهد. البته دیپ بلو به جای فقط یک قدم چندین قدم این کار را کرد. به این ترتیب که درخت جستجوی مینیمکس عمیقی ساخت و با آن تعدادی زیادی حالت را بررسی کرده و با یک حرکت برگشتی مشخص میکرد چه حرکتی بهترین است!

دقت کنید این روش نیازمند این است که اول بتوانید تخمین بزنید که هر صفحه ی شطرنج چقدر به نفع شما (یا برعکس به ضرر شما) است. برای چنین چیزی میتوان تخمین های کلی بر اساس تعداد مهره ها و محل قرار گیری آنها که شطرنج باز ها برای قرن ها آن ها مطالعه کرده اند استفاده کرد.

«کمینه کردن بدترین حالت» یا به طور خلاصه «مینیمکس» یک اپراتور است که فضای امتیاز ها را ارزیابی و به شما یک «حدس» می دهد! «حدس» منجر به یک عمل (action) می شود که بهترین عمل است! به این ترتیب می توان رابطه حدس و نظریه بازی ها را هم دید. در قسمت بعد میبینیم که همین عملگر ساده کلید حل بسیاری از مسايل هوش مصنوعی و بخصوص مدل های انتشار (دیفیوژن) است.
🔵آنتروپی = هندسه🔵


افسانه‌ای خاموش، سال‌هاست در کلاس‌ها و کتاب‌ها زمزمه می‌شود—چنان آرام و چنان فراگیر که کمتر کسی در صحتش تردید می‌کند. این افسانه می‌گوید: آنتروپی یعنی بی‌نظمی. یعنی گسترش آشوب. یعنی فروریختن نظم کیهانی.

اما اگر این باور، با همه‌ی شهرتش، ناقص باشد چه؟
اگر آنتروپی، نه پایان نظم، بلکه الگوی پنهانیِ شکل‌گیریِ نظم باشد چه؟

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

اما هندسه چیست؟ بیش از خط و زاویه و دایره است. هندسه، معماریِ واقعیت است. قانونی‌ست که بر فضا حکم می‌راند: بر فاصله‌ها، جهات، موقعیت‌ها. بدون هندسه، جهان به بی‌فرمی فرو می‌غلتد—نه آزادی، بلکه خلأی بی‌معنا.

و با این حال، هر جا که چشم می‌دوزیم، نظم هندسی را می‌بینیم. سیاره‌ها سرگردان نمی‌چرخند؛ با دقتی بی‌نقص در مدارهایی بیضی‌وار حرکت می‌کنند. کوه‌ها با تقارن‌های طبیعی قد علم می‌کنند. و حیات—از DNA خاموش گرفته تا شاخه‌های مغز بیدار—همه در نظمی شگفت جریان دارند.

در پس این جلوه‌ها، عناصر بنیادین—کربن، هیدروژن، اکسیژن و دیگران—در روابطی پیچیده اما دقیق با یکدیگر می‌رقصند؛ هندسه‌ای ناپیدا که جهان ما را می‌سازد. ما قواعد جهان را، از دل همین هندسه، بیرون می‌کشیم.

و این‌جاست که آنتروپی وارد می‌شود. نه برای نابود کردن نظم، بلکه برای اندازه‌گیری آن.

بیایید به یک مولکول آشنا نگاه کنیم: ایبوپروفن. وقتی این دارو سنتز می‌شود، دو تصویر آینه‌ای از آن پدید می‌آید. از نظر شیمیایی یکسان‌اند، اما تنها یکی در بدن انسان اثر دارد. چرا؟ چون گیرنده‌های بدن ما «دست‌سان» هستند—جهت‌مندند، و فقط یکی از آن دو تصویر در چارچوب هندسه‌ی زیستی جا می‌افتد. طبیعت، بی‌سروصدا، هندسه را ترجیح می‌دهد.
تنها مولکول سمت راست (و نه تصویر آینه ای) باعث کم شدن سردرد میشود!
و این، تنها قطره‌ای‌ست از اقیانوس. تمام زیست‌شناسی ما وابسته به پیکربندی‌های دقیق ماده است. و این دقیقاً همان چیزی‌ست که آنتروپی آن را ثبت می‌کند.

در زبان دقیق‌تر، «هندسه»ی یک سامانه، یعنی ساختار فضای حالت آن—مجموعه‌ی تمام حالت‌هایی که می‌تواند در آن‌ها قرار گیرد. حتی در ساده‌ترین سامانه‌ها نیز این هندسه پیداست. مسئله‌ی سه‌جسمی را تصور کنید: حرکت سه جرم در فضای گرانشی، با نظمی عجیب و ظاهراً بی‌قاعده. اما اگر دقیق‌تر بنگری، می‌بینی که راه‌حل‌های پایدار، از هندسه‌ی قوانین نهفته در سامانه نشئت می‌گیرند.

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

برای فهم آنتروپی، باید پرسید: در این سامانه، محتمل‌ترین توزیع چیست؟ پاسخ این است: توزیعی که بیشترین آنتروپی را دارد. آنتروپی، تابعی‌ست که یک توزیع را می‌گیرد و عددی بازمی‌گرداند که پیچیدگی آن را توصیف می‌کند. و این توزیع، حاصلِ قوانین و قیود سامانه است

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

اما حالا نیروی گرانش وارد می‌شود.

گرانش یک قاعده‌ی جدید به سیستم اضافه می‌کند: مولکول‌هایی که به بالا می‌روند باید انرژی بیشتری داشته باشند. در نتیجه، بیشتر مولکول‌ها در پایین تجمع می‌کنند، جایی که انرژی پتانسیل کمتر است. و در ارتفاعات بالا، چگالی گاز به‌طرز چشم‌گیری کاهش می‌یابد.

به‌عبارت دیگر، توزیع احتمال حضور یک مولکول در فضا، دیگر یکنواخت نیست—بلکه وابسته به ارتفاع و انرژی است. این همان توزیع بولتزمن است. این توزیع نشان می‌دهد که هرچه بالا می‌رویم، احتمال یافتن مولکول کمتر می‌شود. و این هندسه‌ای در فضای حالت ایجاد می‌کند که از دل قوانین فیزیکی (گرانش و ترمودینامیک) پدیدار شده است.

در نهایت، پرسش واقعی این نیست که آنتروپی چیست؛ بلکه این است که شکلِ امکان‌ها در این جهان، چه شکلی‌ست؟
و اگر آن شکل را بیابیم… هندسه‌ی هستی را یافته‌ایم.
یکی از وبلاگ های درجه ی یک در زمینه ی هوش مصنوعی (به فارسی) از زبان مجتبی کمیلی یکی از پیشگامان این عرصه. به شدت توصیه میکنم

https://mojtaba-komeili.github.io/writtings_fa/simpleAI.html
🔵قسمت سوم: از فکر بکر به مدل های انتشار (diffusion models)🔵

در دل بی‌کران محاسبات، جایی در میان خطوط سردِ کد و داده، مسئله‌ای سر برمی‌آورد که شاید بیش از آن‌که صرفاً ریاضی باشد، تصویری از درک، تصمیم، و آینده است. مسئله‌ای ساده در ظاهر، اما ژرف در معنا:

"کامپیوتر کدام حرکت را باید انتخاب کند؟"

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

در این فضا، مینی‌ماکس وارد می‌شود؛ نه به‌عنوان یک الگوریتم خشک، بلکه همچون ذهنی منطقی که آینده را پیش‌بینی می‌کند. آنچه می‌خواهد، تنها یک چیز است: بیشترین سود در برابر بدترین سناریوی ممکن.

تصور کنید سه حرکت ممکن داریم. برای هر حرکت، طرف مقابل می‌تواند پاسخ دهد، و پاسخ او نیز می‌تواند پیامدی خاص داشته باشد. پس ما به این صورت تصمیم می‌گیریم:

max(min(3,12,8),min(2,4,6),min(14,5,2))=max(3,2,2)=3


و بدین ترتیب، حرکت a1 انتخاب می‌شود—حرکتی که ما را از میان تاریک‌ترین سناریوها، به روشن‌ترین مسیر ممکن هدایت می‌کند.
اما این پایان راه نیست.
اگر به‌جای آنکه تنها یک لایه از آینده را ببینیم، به عمق‌های بیشتری فرو رویم، آنگاه می‌توانیم از تابع امتیاز ساده‌تری استفاده کنیم، چرا که خود عمق محاسبه، بار پیش‌بینی را به دوش می‌کشد.
و اینجاست که هرس کردن درخت—با تکنیک‌هایی چون آلفا-بتا—ضرورت می‌یابد؛ (در اینجا به آن نمی پردازیم) برای آن‌که این درخت، در وسعت بی‌نهایت خود، ما را در پیچیدگی غرق نکند.

و ناگهان، در ژرفای این الگوریتم، چهره‌ای آشنا پدیدار می‌شود: لاپلاسین.

اپراتوری که زمانی تنها به عنوان توصیف‌گر گرما، جریان، یا احتمال می‌شناختیم، اینک در قلب نظریه بازی‌ها سکونت گزیده.
مینی‌ماکس، در جوهر خود، همان لاپلاس بی‌نهایت (∞-Laplacian) است—حد نهایی لاپلاسین که در آن تصمیم‌ها با قاطعیت مطلق گرفته می‌شوند: یا بیشینه، یا کمینه.

اما اگر تصمیم‌ها را نرم‌تر بگیریم، اگر اندکی احتمال برای حرکت‌های غیرمطلوب هم قائل شویم—چرا که دنیای واقعی سرشار از تصادف است—آنگاه دوباره به لاپلاسین معمول بازمی‌گردیم. پس:

مینی‌ماکس و لاپلاسین، دو نسخه‌ی یک اصل‌اند. یکی در خدمت انتخاب، دیگری در خدمت انتشار.

برای دریافت شهودی این حقیقت، بیایید بازی «فکر بکر» را در دوباره نظر بگیریم. در این بازی، ما با یک حدس تصادفی آغاز می‌کنیم. بازخوردی دریافت می‌کنیم. الگویی می‌سازیم. سپس دوباره حدس می‌زنیم. و این فرآیند—این یادگیری از بازخورد—در جوهر خود، چیزی جز یک مینی‌ماکس ساده نیست.

در مدل‌های انتشار (diffusion models) نیز همین روند برقرار است. ما از نویز (توزیع تصادفی یکنواخت یا گاوسین) شروع می‌کنیم، از آشوب، و با حرکت معکوس، به سمت ساختار می‌رویم. اینجا، یک شبکه‌ی عصبی، همانند ذهن بازیکن، یاد گرفته است که چقدر هر وضعیت تصادفی از یک توزیع هدف فاصله دارد.

حرکت در این فضا، یعنی در «فضای امتیاز توزیع‌ها»، همان اجرای مینی‌ماکس است. با این تفاوت که در انتشار، جهت حرکت از نظم به بی‌نظمی‌ست؛ و در بازسازی، این مسیر برعکس پیموده می‌شود.

و قسمت شگفت انگیز آن است که اگر به شطرنج نگاه کنیم، می‌بینیم که آن نیز نوعی انتشار است. از یک وضعیت دلخواه (حالت اولیه را کنار بگذاریم که کاملا منظم است)، که تصادفی است بازی به‌تدریج به سمت یک الگوی نهایی ساده که همان کیش و مات است، می‌رود. هر بازی، سفری‌ست در فضا-زمان تصمیمات، و پیکربندی نهایی همان الگویی است که به دنبالش هستیم
🔵چند نکته در مورد خواندن مقالات هوش مصنوعی قسمت اول: اسکالر، بردار، ماتریس و تانسور🔵

احتمالا شما هم تجربه ی باز کردن یک مقاله ی هوش مصنوعی مثل ترنسفورمر یا مدل های انتشار (دیفیوژن)‌ را داشته اید: به محض اینکه فرمول ها شروع می شوند موضوع پیچیده و غیر قابل فهم می شود. این موضوع حتی برای کسانی که پیش زمینه ی ریاضی خوبی مثل ریاضی دبیرستان یا دانشگاه دارند هم گاهی خیلی دشوار است. در اینجا چند نکته که در طول سالیان زیاد به تجربه به آن رسیدم را لیست میکنم که شاید برای بقیه هم مفید باشد:

۱- پیش از هر چیزی باید توجه کنید که ریاضیات هوش مصنوعی اساسا ریاضیاتی بر اساس حساب برداری و تانسور است. توجه نکردن به این موضوع باعث می شود تمام فرمول ها غیر قابل فهم بنظر برسند. برای همین هر گاه یک فرمول می بینید اولین چیزی که باید از خود بپرسید این است که هر متغیر در اینجا چیست؟ (به زبان برنامه نویسی تایپ آن چیست). این تایپ می تواند اسکالر (عدد های عادی که تقریبا تمام ریاضیات دبیرستان است)، بردار، ماتریس یا تانسور باشد. این موضوع بسیار مهم است به همین خاطر هر فرمولی که می نویسید باید سایز آن را زیرش (به صورت اندیس) بنویسید و مطمئن شوید که سایز هر متغیر با بقیه هماهنگی دارد.
بیایید به یک مثال توجه کنیم: یکی از مهمترین عملیات در هوش مصنوعی جدید بخصوص در مدل های زبانی عملگر attention است. فرمول آن به صورت زیر است
این تابعی از سه متغیر است: Q یا کوئری (Query) K یا کلید (Key) و V یا مقدار (value). طرف دیگر معادله یک d_k را داریم که اندازه ی بعد کلید است. اما بیایید دقیق تر شویم. در اینجا Q یک ماتریس است که اندازه ی آن nxd_k است. که در آن n طول ورودی (تعداد توکن ها یه کلمه ها)اندازه ی ماتریس K برابر nxd_k و در نهایت اندازه V برابر است با n x d_v که در آن d_v اندازه تعداد کلمات دیکشنری است. در نهایت d_k یک اسکالر است که در اینجا رادیکال آن حساب شده است. حالا وقت آن است که این اندازه ها را بر روی فرمول بگذاریم و ببینیم که آیا اندازه ها با هم همخوانی دارند یا نه:
اگر از داخل تابع سافتمکس شروع کنیم متوجه می شویم که چون اول ترانهاده ی ماتریس K را حساب میکنیم تعداد ستون های Q و تعداد سطر های K با هم هماهنگی دارند. بنابراین نتیجه یک ماتریس nxn است. حالا اگر این ماتریس را بر جذر d_k تقیسم کنیم (تقسیم کردن بر روی هر کدام از درایه های ماتریس) و در نهایت تابع سافتمکس را بر روی هر داریه اعمال کنیم نتیجه همچنان یک ماتریس nxn باقی می ماند. به این ترتیب می بینیم که مشکلی در ضرب در V هم وجود ندارد چون باز هم تعداد ستون های نتیجه n و سطر های V با هم هماهنگ هستند. بنابراین کل نتیجه ی سمت راست معادله بالا می شود n x d_v

با این حال وقتی کد مربوط به حساب کردن attention را می بینید موضوع کمی پیچیده تر می شود. در عمل ما به جای کار کردن با فقط یک ورودی با یک batch کار میکنیم. دلیل این کار این است که با استفاده ازین روش می توانیم از محاسبات تانسوری که بر روی کارت های گرافیک مدرن تعبیه شده اند بهره ببریم. در عمل منطق کار هیچ تفاوتی نمی کند به جز اینکه به جای یک ماتریس شما B ماتریس را بر روی هم قرار می دهید و سپس ضرب ها را انجام می دهید. بنابراین سایز ها به صورت زیر می شوند
در اینجا باید به چند نکته دقت کنیم. اول اینکه وقتی بحث از تانسور می شود شما عملا با ماتریس های با بعد بالاتر کار میکنید (در بیشتر کاربردهای هوش مصنوعی معمولا این بعد ها بیشتر از ۴ نمی شوند). در ریاضیات و به‌ویژه در برنامه‌نویسی برای یادگیری ماشین (مانند PyTorch یا TensorFlow)، تانسور (tensor) ساختاری کلی‌تر از ماتریس است:

عدد (scalar): تانسور مرتبه ۰ (rank-0)

بردار (vector): تانسور مرتبه ۱ (rank-1)

ماتریس (matrix): تانسور مرتبه ۲ (rank-2)

تانسور مرتبه ۳ یا بیشتر: آرایه‌هایی با ابعاد بیشتر، مانند (batch,time,height,width)

به عنوان مثال:
‍‍‍‍‍‍x = torch.randn(32, 64, 128)  # یک تانسور 3-بعدی (rank-3) با شکل (batch_size, sequence_length, embedding_dim)
اما وقتی با تانسورهایی با بیش از دو بعد کار می‌کنیم، دیگر "سطر" و "ستون" معنا ندارد چون ابعاد بیشتر شده‌اند. مثلاً در یک تانسور با شکل (B,T,D) نمی‌توان به‌سادگی گفت کدام "سطر" است و کدام "ستون" — بنابراین به‌جای transpose، از تابعی به‌نام permute یا transpose(dim1, dim2) استفاده می‌شود.

x = torch.randn(32, 64, 128)  # shape: (B, T, D)
x_t = x.transpose(1, 2) # shape: (B, D, T)


ترتیب‌دهی مجدد کامل ابعاد تانسور:
x = torch.randn(32, 64, 128)
x_perm = x.permute(2, 0, 1) # shape: (128, 32, 64)


در attention ما معمولاً کاری مثل این انجام می‌دهیم:
Q @ K.transpose(-2, -1)


اگر دقت کنید ما فقط نیاز داریم که دو محور آخر را جابجا کنیم (با محور اول که برای batch ست کاری نداریم). حتما کد های بالا را اجرا کنید تا متوجه تفاوت بشوید
یکی از کارهایی که می توانید انجام دهید تا تصویر بهتری داشته باشید این است که عملا شکل تانسور ها را بکشید! یک نمونه از معماری ترنسفورمر را در این شکل میبنید. اما حتما شکل بکشید تا تصویر شخصی از آن پیدا کنید
طول خط ساحلی بریتانیا به خط کشی که استفاده می کنید بستگی دارد!!
🔵بعد بریتانیا چقدر است؟🔵

لوئیس فرای ریچاردسون (Lewis Fry Richardson) در نیمه ی قرن بیستم به مطالعه ی طول خط ساحلی کشور ها مشغول شد. او در حال بررسی این بود که آیا می‌توان احتمال درگیری بین کشورها را بر اساس طول مرز مشترکشان پیش‌بینی کرد یا نه. اما در این مسیر متوجه پدیده‌ای عجیب شد: منابع مختلف، طول بسیار متفاوتی برای یک مرز یا خط ساحلی یکسان گزارش می‌کردند. به‌ویژه برای کشورهایی مانند بریتانیا.

مثلاً یک منبع می‌گفت طول خط ساحلی بریتانیا حدود ۲۴۰۰ کیلومتر است، دیگری ۳۴۰۰ کیلومتر و حتی منابعی بودند که ۱۲۰۰۰ کیلومتر گزارش می‌دادند! چرا این‌همه تفاوت؟

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

این مشاهدۀ عجیب همان پارادوکس خط ساحلی است:

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

این وضعیت معنای «طول» به صورت کلاسیک آن را بی استفاده می کند!‌ پس باید چه کرد؟
این پارادوکس توجه بنوآ مندلبرو (Benoit Mandelbrot) ، ریاضی‌دان فرانسوی را جلب کرد. او در سال ۱۹۶۷ مقاله‌ای معروف با عنوان «خط ساحلی بریتانیا چقدر طول دارد؟ خودشباهتی آماری و بُعد کسری» منتشر کرد. اون دریافت که اشکال طبیعی مانند خط ساحلی، طول دقیقی در معنای کلاسیک ندارند. این اشکال دارای خودشباهتی هستند؛ یعنی الگوهای مشابهی در مقیاس‌های مختلف ظاهر می‌شوند. مندلبرو مفهوم بُعد فرکتالی را برای اندازه‌گیری این پیچیدگی معرفی کرد.

برای یک خط صاف (یک بعدی)، بُعد آن برابر با ۱ است.
برای یک صفحه (دو بعدی)، بُعد آن ۲ است.

اما بعد خط ساحلی بریتانیا بین خط و صفحه است!! مقدار اندازه گیری شده ۱.۳۳ است. اما یافتن بعد فقط محدود به چنین موجودیت های جغرافیایی نمی شود. هر چیزی اطراف ما یک بعد دارد حتی زبان! در قسمت های بعدی در مورد بعد «ماشین ها» و «ساختار های اطلاعاتی» بیشتر صحبت می کنیم!