سلام. وقت شما بخیر. بعد از تأخیر زیاد دوباره اومدیم با هم راجع به خاندانهای یادگیری ماشین صحبت کنیم.
امیر پورمند هستم و این قسمت ۲۲ام از ایستگاه هوش مصنوعی هست. امروز میخوایم به یکی از مهمترین چالشهای یادگیری ماشین بپردازیم. مسئله اینه که چطوری میتونیم مطمئن باشیم که چیزی که قبلاً جواب داده الان هم جواب میده؟
این سؤال اولین بار در قرن ۱۸ توسط آقای هیوم مطرح شد و همه چیز از تصمیمهای روزانهمون تا برنامههای کامپیوتری پیچیده رو تحت تأثیر خودش قرار میده. نویسنده میگه که: «هر الگوریتم یادگیری تلاشی برای پاسخ به این سؤال هست».
تو این قسمت به طور خلاصه به سه بخش میپردازیم. اول راجع به این صحبت میکنیم که افراد راجع به «یادگیری» چطوری فکر میکنند. دوم میگیم که چرا از نظر ریاضی یادگیری به نظر غیرممکنه و سوم این که راهحل متخصصان برای حل این مشکلات چی بوده؟ و روشهای نمادین در یادگیری ماشین رو معرفی میکنیم.
شنیدن اپیزود
همه اپیزودهای این پادکست تو کانال کست باکس منتشر میشه و البته میتونید از جاهای دیگه هم بشنوید.اینجا هم میتونید فایل صوتی این قسمت رو گوش بدید:
دو راه مختلف برای فکر کردن و چالش هیوم
بیاید با یک سؤال ساده شروع کنیم. آیا منطقگرا هستیم یا تجربهگرا؟ وقتی میخوایم یک مسئله رو حل کنیم، آیا ترجیح میدیم که ابتدا عمیقاً بهش فکر کنیم یا این که بریم چیزهای مختلف رو تجربه کنیم و ببینیم چی پیش میاد؟
منطقگراها معتقدند که استدلال منطقی بهترین مسیر برای دستیابی به دانش هست. به عنوان نمونهاش میشه به ریاضیدانان یا وکلا فکر کرد. تو ریاضی، خیلی زیبا از روی اصول، قضایای مختلف رو درست میکنند. بعد مسائل رو با چیزهایی که قبلاً اثبات کردند، تطبیق میدن و حل میکنند.
اما افراد تجربهگرا، باور دارند که دیدن و مشاهده بهتر از تفکر صرف هست و ترجیح میدن آزمایش کنند. اینجا اصلاً چیزی به نام اثبات معنا نداره. فقط آزمایشها یه سری نتایج رو نشون میدن. مثالش میشه پزشکان و دانشمندان تجربی که توی آزمایشگاه درمانهای مختلف رو تست میکنند.
جفتشون هم کار میکنند. حسابان و هندسه تحلیلی نتیجه استدلال منطقی هست و علوم تجربی نتیجه تجربهگرایی.
اینجاست که یک سؤال مهم پیش میاد. چگونه میشه مطمئن شد که چیزی که در گذشته دیدیم اطلاعاتی راجع به آینده بهمون میده؟ فلاسفه سالها بهش فکر کردند اما جواب قانعکنندهای ندارند.
برتراند راسل مسئله رو با «بوقلمون تجربهگرا» توضیح میده. تو اولین روزی که به مزرعه میاد، ساعت ۹ صبح بهش غذا میدن. بوقلمون ما نتیجهای نمیگیره چون دادهاش کمه. تو ماههای آینده هر روز بهش غذا میدن. بر اساس دادههای تجربی نتیجه میگیره که هر روز ۹ صبح قراره بهش غذا داده بشه. اما روز کریسمس سرش رو میبرن و میخورنش.
یک فرض اساسیای که تو یادگیری ماشین، میگذارند اینه که گذشته، چراغ راه آینده است. اگر این فرض رو حداقل تا حدی نپذیریم، قدم از قدم نمیتونیم برداریم. حتی رگرسیون خطی که اولین و سادهترین مدلی هست که تو کلاسهای یادگیری ماشین بهش اشاره میکنند، این فرض رو داخل خودش داره. به فلوچارتهای پزشکی فکر کنید که میگن وقتی بیمار اومد، چطوری درمانش کنیم. اگر این رو نپذیریم کلاً علم تجربی زیر سؤاله.
اما آیا مشکل ما رو حل میکنه؟ کاملاً نه. اگر من پزشک باشم و بیمار A دقیقاً نشانههای بیمار B رو داشته باشه، فرض میکنم که تشخیصشون یکیه. اما اگر بیمار B به هیچ بیمار قبلیای شبیه نباشه چی؟ چطوری میتونم دادههایی که دیدم رو به دادههایی که ندیدم تعمیم بدم (Generalization).
بخشی از تفاوت الگوریتمهای یادگیری ماشین هم همینجاست. مسئله هم با افزایش حجم داده حل نمیشه. شما هزار تا متغیر وضعیت صفر و یکی راجع به بیماران داشته باشید و هزار میلیارد داده جمع آوری کرده باشید، باز هم تقریباً یک درصد تمام حالتها رو دیدید. یکی میشه ۲ به توان هزار.
کلاً مسئله اینه که دادههای ما به شدت محدوده و باید با این دادهها یک سری «فرضیه» بسازیم که دادهها رو توضیح بدن. مثلاً فرض کنید با دوست دخترتون میخواید شام برید بیرون. بعضی وقتها قبول میکنه و بعضی وقتها نه. حالا میخواید بفهمید چرا.
اینجا شما میدونید که چه روزهایی برنامه تلویزیونی جالب داشته. چه روزهایی هوا خوب بوده. کجا دعوتش کردید. آخر هفته بوده یا وسط هفته. حالا میخواید چطوری از این دادههایی که دارید، از این پنج باری که بهش گفتید، نتیجهگیری کنید؟ چون تعداد دادههامون کمه فرضیههای خیلی زیادی میشه ساخت که همهشون هم برای دادههای شما درستند. مسئله اینه که کدوم فرضیهها رو انتخاب کنیم؟
یه فرضیه ممکنه این باشه که اگر هوا خوب باشه و تلویزیون برنامه نداشته باشه، میاد. یه فرضیه ممکنه این باشه که اگر آخر هفته نباشه، میاد. بر مبنای چه منطقی یک فرضیه رو بهتر از فرضیه دیگه میدونیم؟ بالاخره همه فرضیهها رو دادههای فعلی ما جواب میدن دیگه.
این چیزی هست که فلاسفه بهش میگن «مسئله استقراء». چطوری از تجربیات محدود، تعمیمهای گسترده بدست بیاریم؟
چرا یادگیری از نظر ریاضی غیرممکنه؟
در دهه ۱۹۹۰ میلادی، آقایی به نام ولپرت به سؤال هیوم از نظر تئوری یک جواب دقیق داد. کارش تحت عنوان «قضیه نهار مجانی» (No Free Lunch) شناخته میشه و اثبات میکنه از نظر ریاضی نهار مجانی وجود نداره (البته جز تو ایران که تو مراسمهای مذهبی نهار مجانی میدن.)
سؤال اینه که یک یادگیرنده چقدر میتونه خوب باشه؟ و جواب اینه که هیچ یادگیرندهای از حدسزدن تصادفی بهتر نیست!
عجیبه. نه؟ داره میگه از نظر ریاضی، باهوشترین برنامه کامپیوتری از سکه انداختن نمیتونه بهتر عمل کنه. چطوری میتونه این اتفاق بیافته؟ و اگر درست باشه این همه سیستمهای موفقی که برای تشخیص اسپم و پیشنهاد دهنده و مدلهای زبانی پس چین؟ پس کلاً همه حرفهامون الکی هست دیگه؟
بیاید راجع به استراتژیهای سرمایهگذاری فکر کنیم. یک نفر ادعا میکنه که بهترین استراتژی سرمایهگذاری رو داره که همیشه بهتر از میانگین عمل میکنه. نتایج ۱۰ سال گذشتهشون هم این رو تأیید میکنه. پس آیا تونستند یاد بگیرند؟
از نظر تئوری شما میتونید به ازای هر باری که طرف تصمیم گرفته بخره یا بفروشه، یک دنیا رو تصور کنید که دقیقاً استراتژی او بد جواب بده. پس به ازای هر استراتژیای که در هر بازاری موفق هست، میشه دنیایی رو تصور کرد که ناموفق باشه.
قضیه نهار مجانی، برای الگوریتمهای یادگیری ماشین هم همینطور عمل میکنه. اما مسئله مهم اینه که ما به کل دنیاهای ممکن اهمیت نمیدیم. ما فقط به دنیای خودمون اهمیت میدیم. پس بصورت عملی چیزی به نام یادگیری بدون بایاس وجود نداره!
بایاس ما میشه دانش فعلی ما از دنیایی که توش زندگی میکنیم. ما خیلی از دنیل کانمن و سوگیریهای مغزمون شنیدیم. این که چقدر بدن. باید حواسمون بهشون باشه. اما یادمون باشه بدون بایاس یادگیری از نظر تئوری ممکن نیست! پس عملاً ما نمیتونیم از داده به تنهایی یاد بگیریم. یک سری فرض یا بایاس یا دانش باید به داده اضافه کنیم تا قابل یادگیری باشه.
اینجاست که تو یادگیری ماشین، فرض میکنند که شکل و فرم حقیقت رو میدونیم و یادگیرندهمون بر اون اساس یاد میگیره. مثلاً تو رگرسیون خطی، فرض میکنیم حقیقت یک تابع خطی هست. حالا به یادگیرنده میگیم تو توابع خطی دنبال یک تابع بگرد که بهترین پیشبینی رو ارائه بده.
این رویکردی هست که تا حالا تو یادگیری ماشین پیشرفته. و کلاً بحثمون در این کتاب هم هست که متخصصان چه فرضهایی داشتند که فلان مدلها توسعه یافته.
نویسنده بعد از این به چند تا مشکلی که تو یادگیری پیش میاد اشاره میکنه. یکیش مسئله بیشبرازش (یا Overfitting) هست. بعضی وقتها فضایی که توش میخوایم دنبال حقیقت بگردیم خیلی بزرگه. تعداد فرضیههامون خیلی زیاده و از بین این فرضیهها نمیتونیم فرضیه خوب دربیاریم. انگار الگوهای پیچیدهای داخل داده پیدا میکنیم که واقعاً وجود ندارند.
مثلاً میگن که تو انجیل، پیشبینیهایی راجع به آینده هست. میگن که میتونید این پیشبینیها رو با برداشتن حروف nام کلمات استخراج کنی. یا مثلاً ۱۰ تا کاراکتر یکبار استخراج کنی. اما تعداد راههایی که میشه این کار رو انجام داد خیلی زیاده. مسئله عملاً overfit میشه. انجیل که چه عرض کنم، هر کتاب رمانی رو هم برداری و انقدر سیستماتیک توش دنبال الگو بگردی، الگوهایی پیدا میکنی که در دنیای واقعی وجود نداره.
به طور خاص، الگوریتمهای یادگیری ماشین بسیار مستعد پیدا کردن همچین چیزهایی هستند؛ چون خیلی سریع میتونند تو دادهها الگو پیدا کنند.
اینجا یک جملهای وجود داره که میگن «اگر داده رو به اندازه کافی شکنجه بدی به هر چیزی اعتراف خواهد کرد».
اما چطوری این مشکل رو حل کنیم؟ یکی از راههای حل این مشکل و یادگیری از دادهها، استفاده از درخت هست که یک خانواده از الگوریتمهای یادگیری هست.
مثال بخوام بزنم، درخت تصمیمهایی که تو شرکتهای ISP به پشتیبانها میدن، یه نمونه درخته. میگن اگر مشتری اومد، اول فلان سؤال رو بپرس. مشکلش رو تشخیص بده و بعد طبق فلوچارت باید عمل کنی و مشکلش رو حل کنی. شاید هم یاد سیستمهای IVR بیفتید (همون سیستم پاسخگوی صوتی تعاملی). این سیستمها هم مثل بقیه درخت تصمیمها خیلی سازمان یافته با دکمههای مختلف ما رو به سمت یک جواب خاص هدایت میکنند.
بگذارید مثال بزنیم: بازی ۲۰ سؤالی. تو بازی ۲۰ سؤالی، با جوابهای بله و خیر گزینهها رو محدود میکنیم تا نهایتاً به جواب (همون برگها) برسیم. مثلاً اول میپرسیم که جاندار هست یا بیجان؟ میشه خوردش؟ تو جیب جا میشه؟
درخت تصمیم هم همینطور کار میکنه. از دادههای ما شروع میکنه و سؤالاتی رو از دادهها میپرسه که بشه خیلی به گروههای معناداری تقسیمشون کرد. بعد به ازای هر گروه، دوباره سؤال میپرسه. انقدر سؤال میپرسه که به «پیشبینی» برسه.
مثلاً میخوایم تصمیم بگیریم که آیا طرف یک فیلم رو دوست داره یا خیر؟
اولین سؤال؟ آیا فیلمهای اکشن دوست داره؟ اگر بله آیا علمی-تخیلی هم دوست داره یا نه؟ اگر هم اکشن دوست داره و هم علمی تخیلی، فیلمی رو بهش معرفی کنیم که کسانی که مشابهش فکر میکنند دوست دارند. اینجا دقت کنید که درخت تصمیم عملاً میشه یک سری قاعده AND و OR.
خوبیش اینه که بر فرض این که بتونیم از روی دادهها یک درخت تصمیم خوب بسازیم، مدلی داریم که هم بسیار سریع خواهد بود. هم تفسیرپذیر خواهد بود؛ به این معنا که ما هم میفهمیم چرا مدل یک خروجی خاص رو داده. بعداً میبینیم بعضی مدلها مثل مدلهای یادگیری عمیق ذاتا تفسیرپذیر نیستند.
اما یک سؤال مهم بوجود میاد؟ سؤال اینه که چطوری درخت رو بسازیم اصلاً؟ اصلاً چه مواردی برامون مهم هست، هنگامی که میخوایم درخت تصمیم بسازیم؟
ساخت درخت تصمیم و کاربردهاش
یک روش ساخت درخت اینه که به تمام ویژگیهامون نگاه کنیم و ببینیم کدوم ویژگی میتونه برامون خلوص بیشتر یا آنتروپی کمتری ایجاد کنه.
بگذارید برای درک مفهوم آنتروپی مثال بزنم. فرض کنید تو یک جمع، ۵۰ نفر مخالف یک ایده هستند. ۵۰ نفر موافق و ۵۰ نفر هم ممتنع. این جمع بیشترین میزان آنتروپی رو داره. آنتروپی رو بعضاً با بینظمی ترجمه میکنند.
حالا اگر بتونیم بر اساس یک ویژگی آدمها رو دو گروه کنیم و مثلاً ۴۰ نفر موافق باشند و ۱۰ نفر مخالف، آنتروپی رو تونستیم کاهش بدیم.
پس نگاه میکنیم که چطوری میشه بصورت میانگین کمترین آنتروپی رو ایجاد کرد. این میشه اساس روشهای درختی تو یادگیری ماشین که خیلی هم مرسوم هستند.
حالا شما اگر بخواید دقیقتر بهش نگاه کنید، معمولاً یک فصل به روشهای مبتنی بر درخت اختصاص داده میشه و چیزی نیست که بشه تو نیم ساعت توضیح داد. حتی آنتروپی هم که برای ارزیابی خلوص گفتم، یک روشه. روشهای دیگهای هم مثل ضریب جینی هست.
یک سری شهود هم داریم. مثلاً اصل «تیغ اوکام» میگه که اگر دو تا توضیح برای یک پدیده داشتیم، در شرایط برابر ترجیح اینه که اونی رو قبول کنیم که سادهتره. ترجیح اینه که سادهترین فرضیهای که با دادههامون جور درمیاد رو قبول کنید.
اما اگر خاطرتون باشه گفتیم که دو روش برای یادگیری نمادین داریم. یکی تجربهگرایی هست که حدوداً معادل درست کردن درخت میشه. و یکی دیگه هم منطقگرایی.
منطقگرایی صرف یکی دیگه از روشهایی هست که تو هوش مصنوعی بهش پرداخته میشه. اینجا با زبانهای برنامهنویسیای مثل Prolog بصورت نمادین، گزارههای منطقی رو کد میکنند و ازشون خروجی میگیرند.
چطوری؟
- میدانیم که «سقراط انسان است».
- میدانیم که «همه انسانها بالاخره میمیرند».
- پس «سقراط هم بالاخره خواهد مرد».
اما به نظر میاد حداقل تو دهه اخیر این طرز نگاه به هوش مصنوعی کمرنگتر شده اما روشهای مبتنی بر درخت مثل XGBoost سرجای خودشون پایدار هستند. ما تو روشهای درختی ترکیبی از منطق و تجربه رو داریم.
حالا بیاید چند تا از کاربردهاش رو هم بررسی کنیم:
تو صنعت دارو میتونه کاربرد داشته باشه. میتونیم ترکیبهای سمی در بین داروها رو قبل از این که آزمایش انسانی انجام بدیم رو تشخیص بدیم. اگر ماده ۱ و ماده ۲ رو با هم داشته باشه یا ماده ۳ رو داشته باشه، خطرناکه. این میتونه کاندیداهای بد رو همون ابتدا حذف کنه و میلیاردها دلار صرفهجویی کنه.
حتی میتونیم ربات دانشمند داشته باشیم. رباتی به نام آدام کاشت سلول انجام میده. اول با یک دانش ژنتیک اولیه (همون بایاس) شروع میکنه و بعد فرضیههای مختلفی میسازه که کدوم ژنها کدوم پروتئینها رو میسازند و بعد آزمایشهایی طراحی میکنه که بتونه فرضهاش رو تست کنه و مقالاتش رو هم منتشر میکنه. اینکار خصوصاً الان با ترکیب LLMها خیلی راحتتر میشه انجام داد.
جالب اینه که والمارت با به کار بردن همین روشهای درختی روی دادهاش به این نتیجه رسیده که «آقایونی که پوشک بچه میخرند، بسیار محتملتره همراهش شراب هم بخرند». توضیحش چیه؟ توضیح اینه که مادر بچه، بابا رو میفرسته که پوشک بخره و بابا هم برای جبران لطف خودش، برای خودش شراب میخره. فروشگاه اگر این رو بدونه، قطعاً شراب رو کنار پوشک قرار میده.
اما این روش درختی بدون ایراد هم نیست و هر کاری رو نمیشه باهاش انجام داد. مثلاً شما خیلی سخت میتونید با یک تعداد قاعده ساده AND و OR (هر چقدر هم تعدادش زیاد باشه)، تشخیص بدید که گربه تو تصویر کجاست؟
دومین ایرادش اینه که هوش واقعی بعضی وقتها از قواعد خیلی صفر و یکی فاصله میگیره. این روزها هم که خیلی میشنویم که سیاه و سفید نباید نگاه کرد و خاکستری نگاه کنیم و این بحثها.
خیلی حرف زدم. اگر بخوام جمعبندی کنم از این شروع کردیم که یادگیری مبتنی بر منطق میتونه باشه یا تجربه. بعد گفتیم که از نظر ریاضی اگر بخوایم یادگیری داشته باشیم، حتماً بایاس خواهیم داشت. و اصلاً روشهایی مثل CNNها بایاس ذهنی ما رو داخل با توابع ریاضی به کامپیوتر میخورونند. یکی دیگه از بایاسهامون اینه که توضیحات سادهتر بهتره.
بعد راجع به ساخت درخت صحبت کردم و گفتم که دادهها رو میبینیم و به یه روشی تو درخت قرارشون میدیم. پس تو این قسمت روشهای نمادین یا درختی رو بررسی کردیم.
تو قسمت بعد میخوایم به این بپردازیم که چگونه میشه با شهود گرفتن از مغز انسان یاد گرفت؟