در سکانسی در فیلم امیلی، شخصیت اصلی داستان یعنی خود امیلی منتظر یک قرار با معشوقه اش نینو است اما نینو در موعد مقرر حاضر نمی شود. امیلی که آشفته شده شروع می کند به فرضیه سازی که چه اتفاقی ممکن است برای نینو افتاده باشد. دو فرضیه به ذهن اون میرسد. اولی این است که شاید نینو عکسی که امیلی برای آدرس قرار گذاشته را ندیده باشد و بنابراین سر قرار هم نیامده است اما فرضیه دوم این است که قبل از پیدا کردن عکس یه دسته از سارقین بانک او را گروگان گرفته اند بعد پلیس ها او را تعقیب میکنند و آنها فرار میکنند ولی تصادف میکنند و وقتی نینو بهوش میاد حافظه ش رو از دست میدهد، یه کلاه بردار او را سوار کرده و با یه پناهنده اشتباهش میگیرد و او را با کشتی به استانبول می فرستد. در اونجا چند تا مهاجم افغان رو میبینه که برای دزدیدن کلاهک های موشکی روسیه اون رو دستگیر میکنن ولی در تاجیکستان کامیونش میره روی مین و از اون حادثه نجات پیدا میکنه و میره مجاهد میشه!!
این بخش شاید فقط یه طنز در فیلم باشد اما سوالی را به ذهن می آورد که چرا فرضیه دوم اینقدر احمقانه و دور از ذهن است؟ چرا ما فرضیات ساده را برای توضیح یک اتفاق ترجیح می دهیم؟
مساله انتخاب بین توضیحات رقیب برای یک اتفاق با یک مجموعه از شواهد را مساله انتخاب مدل می نامیم. این کار بیشتر شبیه به کاری است که کارآگاه ها انجام می دهند. آن ها یه مجموعه شواهد و داده دارند و دنبال توضیح برای اتفاق هایی هستند که افتاده است. روش علمی هم بسیار مشابه با این روند است. ما به دنبال نظریات برای توضیح داده ها هستیم. اما همانطور که در بخش های قبلی هم گفتیم این جستجو برای توضیح نمیتواند یک توضیح بدون بایاس باشد. ترجیح دادن یک توضیح ساده به یک توضیح پیچیده خود یک نوع بایاس است! چرا ما باید فکر کنیم که چیزی که در پشت پرده رخ داده یک توضیح ساده می طلبد؟
حالا حالت دیگر را در نظر بگیریم. اگر فرضیه ما بسیار پیچیده باشد می تواند داده های بیشتری را توضیح دهد. شما می توانید بعد از دیدن یک صحنه جرم برای هر قسمت کوچک از حوادث یک داستان درست کنید و با دشواری زیاد آن ها را به هم متصل کنید. اما آیا کسی آن را باور میکند؟ (گذار به مفهوم توضیح از david deutsch)
هر قدر اتفاقی که افتاده باشد منظم تر باشد شواهد راحت تر قابل توضیح هستند. به این ترتیب شواهد دیگر که ممکن است بعدا پیدا بشوند هم با فرضیه ما همخوانی دارند. این دقیقا مفهوم یادگیری است. یعنی برداشت یک فرضیه از تعداد محدودی داده برای توضیح بقیه داده ها. اگر ما نظم ساده ای را کشف کرده باشیم نیاز به داستان ساختن های جدید (یا وصله پینه کردن فرضیه امان) برای داده های جدید نداریم. همان نظم ساده می تواند بقیه شواهد را هم بخوبی توضیح دهد. این چیزی است که همه پژوهشگران به دنبال آن هستند.
اصل کوتاه ترین توضیح (minimum description length) یا MDL یک ساختار ریاضی و الگوریتمی برای کمّی کردن تمام این حرف هاست. در این نظریه "یادگیری" با یافتن نظم ها و الگوهایی تعریف می شود که داده ها را برای ما فشرده تر می کنند. یک مثال میزنم. فرض کنید شماره تلفن دوستتان ۰۹۱۲۳۷۰۲۴۶۹ باشد و بخواهید این عدد را برای دوست دیگرتان آن طرف خط بخوانید. خوب! ظاهرا راهی برای کوتاه کردن وجود ندارد شما همه عدد ها را باید تک تک بخوانید. اما فرض کنید شماره دوستتان ۰۹۱۲۳۳۳۳۵۵۵ باشد. خوب کارتان این بار ساده می شود چون نظمی در این اعداد هست که کار را راحت میکند: شما براحتی می توانید بگویید ۰۹۱۲ چهار تا سه و سه تا پنج. نظم با خود "فشردگی در توضیح" هم می آورد. به عبارتی شماره دوم ساده تر از شماره اول است! اما چگونه می توان پیچیدگی را تعریف کرد.
این شروع تلاشی گسترده توسط دانشمندان حوزه نظریه اطلاعات الگوریتمی برای کمی کردن پیچیدگی بود. سه دنباله زیر را در نظر بگیرید:
001001001001001001001001...001001
011100110100110100110110...1001100
00001100000101010...0010000001000
دنباله اول یک دنباله ساده از 001 است که برای n بار تکرار می شود. دنباله دوم از پرتاب سکه درست شده است و حاصل تصادف محض است و دنباله سوم یک سکه خراب است که صفر ها (شیرها) به طور متوسط چهار برابر یک (خط) هاست. بنابراین دنباله اول منظم ترین و ساده ترین و دنباله دوم نامنظم ترین و پیچیده ترین و در نهایت دنبال سوم چیزی ما بین آنها قرار می گیرد. اما روش هوشمندانه ای که کولموگروف (Kolmogorov) ریاضیدان روسی، برای تعریف پیچیدگی یافت به این صورت است:
پیچیدگی یک دنباله از اعداد متناظر است با طول کوتاه ترین برنامه ای که آن دنباله را تولید کرده است.
اینجا مهم نیست زبان برنامه نویسی چه هست چون زبان برنامه نویسی فقط یک قرارداد است و با عوض کردن زبان برنامه نویسی تغییر در طول برنامه فقط یک عدد ثابت است(بخاطر سینتکس های مختلف). بنابراین برنامه ای که دنباله اول را تولید کرده بسیار ساده است. فرض کنید در پایتون این کار را انجام دهیم. بنابراین برنامه ای برای تولید دنباله ای از 001 ها به طول 3n می شود:
طول این برنامه بسیار کوتاه است.
اما برای دنباله دوم نمی توان هیچ کاری کرد. به عبارتی این دنباله غیر قابل ساده سازی است و بنابراین ساده ترین برنامه برای آن صرفا خروجی دادن کل آن دنباله است:
print(“01110100110100110110...1001100”)
بنابراین اگر طول دنباله n باشد طول برنامه هم در حدود n خواهد بود: هیچ فشردگی!
شاید به نظر برسد که سومین دنباله هم اینطور باشد. اما قضیه برای آن به همین سادگی ها هم نیست. در قسمت بعدی بیشتر در مورد دنباله سوم بحث می کنیم. دنباله سوم نشان دهنده بیشترین نوع داده هایی است که اطراف خود میبینیم: داده های احتمالاتی!
اما بسیاری از ساختارهای کامل ریاضی مواردی مانند اولی هستند. با این دید مثلا عدد پی یا اعداد اول «ساده» است چون برنامه درست کردن عدد پی بسیار کوتاه است. طول برنامه های قضایای و ساختارهای ریاضی بسیار کوتاه هستند!
پس در اینجا برنامه چیزی شبیه به فرضیه برای توضیح یک دنباله از داده ها است. ساده سازی ای که انجام دادیم باعث شد که درک کنیم چگونه می توان پیچیدگی را تعریف کرد.
در این جا فقط باید دقت کرد که باید در مورد استفاده از کلمه «ساده» یا «پیچیده» بسیار دقت کرد. اگر چیزی «ساده» باشد به این معنا نیست که ما همه آن را درک کرده ایم و هیچ رازی در مورد آن باقی نمانده است! ساده ترین مثال آن همین اعداد اول هستند که اگرچه از دیدگاه الگوریتمی بسیار «ساده» هستند اما در عین حال هنوز چیزهای بسیار زیادی در مورد آن ها نمی دانیم!