MatlabTips
890 subscribers
462 photos
72 videos
54 files
304 links
آموزش MATLAB با "استفاده از ویدئو و متن" در سطوح مبتدی تا پیشرفته
پاسخ به سوالات تخصصی:
@roholazandie
Download Telegram
و این، تنها قطره‌ای‌ست از اقیانوس. تمام زیست‌شناسی ما وابسته به پیکربندی‌های دقیق ماده است. و این دقیقاً همان چیزی‌ست که آنتروپی آن را ثبت می‌کند.

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

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

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

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

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

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

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

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

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) ، ریاضی‌دان فرانسوی را جلب کرد. او در سال ۱۹۶۷ مقاله‌ای معروف با عنوان «خط ساحلی بریتانیا چقدر طول دارد؟ خودشباهتی آماری و بُعد کسری» منتشر کرد. اون دریافت که اشکال طبیعی مانند خط ساحلی، طول دقیقی در معنای کلاسیک ندارند. این اشکال دارای خودشباهتی هستند؛ یعنی الگوهای مشابهی در مقیاس‌های مختلف ظاهر می‌شوند. مندلبرو مفهوم بُعد فرکتالی را برای اندازه‌گیری این پیچیدگی معرفی کرد.

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

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

آن که پرنقش زد این دایره مینایی کس ندانست که در گردش پرگار چه کرد (حافظ)


در بخش پیشین از «بعد» سخن گفتیم از فراکتال‌ها، این سایه‌های اسرارآمیز در مرز میان نظم و آشوب. اما اکنون، بیایید فراتر رویم. «بعد»، میتواند از دیدگاهی عمومی تر هم دیده شود. بگذارید آن را در دل پویایی ببینیم: در ماشین‌هایی که نه تنها می‌اندیشند، بلکه انتخاب می‌کنند.

فرض کنید جهانی را داریم که در آن هر لحظه، آینده ی دقیقاً مشخص دارد؛ آینده‌ای که با بی‌رحمی ریاضی تعیین شده است. در چنین جهانی، شما آزادی ندارید. تنها یک مسیر است که باید آن را پیمود. این همان دنیای ماشین‌های متعین (deterministic automata) است، اتومات‌هایی که بدون تردید و بدون رؤیا، از یک وضعیت به وضعیت بعدی می‌خزند. شما قفل شده‌اید. در اسارت علیت. شکل زیر یک مثال از چنین حالتی است:
اما در جهانی دیگر، در ساختاری دیگر از ماشین‌ها، «آزادی» (انتخاب آزاد) از تارهای علیت سر برمی‌کشد. در اینجا، در هر نقطه می‌توانید بایستید یا حرکت کنید، انتخاب کنید یا نکنید. این همان آزادی است: جایی که امکان معنا می‌یابد. ساده ترین مثال آن شکل زیر است: در اینجا زبان ما فقط دو نماد ۰ و ۱ دارد و دو حالت برای حرکت بین آن ها:
و آنگاه، نوعی میانجی، میان این دو جهان می‌زاید: اتوماتای جابجایی با نسبت طلایی.(golden mean shift automata) نه کاملاً آزاد، نه کاملاً مقید. گاه انتخاب دارید، گاه ندارید. چیزی شبیه به ساحت وجود ما، در مرز میان تقدیر و اراده. در شکل زیر ساده ترین نمونه ی اتوماتای طلایی را می بنید (که قبلا هم آن را بررسی کردیم)