پایتونیستـــ

{ [ Deep ] Machine Learning , NLP, Mathematics , self } * { Python }

یادگیری و یادگیری ماشین

یادگیری ماشین به معنای یادگیری ماشین از روی داده­ ها است.یادگیری چه چیزی؟..

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

یادگیری در ماشین و یادگیری در انسان دو مقوله ­ی بسیار شبیه به هم هستند. این شباهت اتفاقی نیست. دلیل این شباهت آن است که کسانی که مفاهیم یادگیری ماشین را پایه گذاری کرده­ اند خود انسان بوده ­اند و همواره نیم ­نگاهی به آن چه در درون انسان می­ گذرد داشته­ اند البته بعضی به صورت خودآگاه و بعضی به صورت ناخودآگاه. بنا براین، ما در این بخش، انسان و نیز ماشین یادگیرنده را عامل یادگیرنده (learning agent می ­نامیم.

یادگیری، کلیت­ بخشی و خودمختاری

یادگیری (learning) و کلیت ­بخشی (generalization) دو مفهوم کاملا به هم نزدیک و تقریبا دو نام متفاوت برای یک چیز اند. در گام اول وقتی عامل یادگیرنده با انبوهی از داده­ ها مواجه می­شود ابتدا به دنبال داده ­های مفید برای یادگیری می­گردد. مثلا انسان همواره با انبوهی از داده ­های ورودی از طریق حواس پنج گانه درگیر است. حتی ذخیره­ ی­ این داده ها برای رایانه ­های بسیار بزرگ غیر ممکن است. بنا براین مغز انسان در میان این انبوه داده ­ها همواره به دنبال داده ­های مفید است. مفید برای چه؟ مفید برای هدف یا اهدافی که در آن لحظه برای رسیدن به آن در تلاش است. البته این فرآیند بسیار پیچیده و مهم، هنوز به طور قابل قبولی در ماشین ­ها پیاده سازی نشده و طراح ماشین قبل از به کار گیری ماشین ساعت ها بر روی انتخاب و پالایش داده ­ها فکر و برنامه ­ریزی می ­کند. هرچند  با معرفی مکانیزم توجه (attention) ،گام هایی بسیار کوچک در این راه برداشته شده است.

پس از این که عامل یادگیرنده داده­ های خود را دریافت کرد درگام دوم سعی می­ کند آن را درون خود بازنمایی (represent) کند. در این جا هم از  دست ماشین کار زیادی بر نمی­ آید و باز این طراح ماشین است که شیوه­ ی بازنمایی داده­ ها را مشخص می­کند. مثلا طراح ماشین ممکن است برای بازنمایی کلمات یک متن یکی از دو روش زیر را انتخاب کند:

1- استخراج لیست کلمات منحصر به فرد درون متن و انتساب اعداد منحصر به فرد به آن ها و تبدیل متن به رشته ای از اعداد

2-استخراج لیست کلمات منحصر به فرد درون متن و انتساب اعداد منحصر به فرد به آن ها و تبدیل متن به بردار وان هات (one-hot vector)



ماشین های یادگیرنده در گام سوم خودنمایی بیشتری دارند. یک ماشین یادگیرنده پس از آن که داده ­ها را دریافت و در درون خود بازنمایی کرد به دنبال کشف قواعد کلی از روی داده­ ها است. طیف وسیع الگوریتم­های یادگیری ماشین عمدتا در این گام قرار می­گیرند.**ذکر یک مثال ساده**

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

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

پس جا دارد که ما یادگیری بهتر را یادگیری عمیق ­تر بنامیم ؛ یادگیری ­ای که حاصل آن عبارات جهان شمول تر و اتکاپذیر­تر است و باعث می­ شود که عامل یادگیرنده خود را بهتر با محیط جدید سازگار (adopt) کند.  این سازگاری ناشی از آن است که عامل نیازی به یک جدول به شکل اگر-آن­گاه برای اعمال خود ندارد و می­تواند  (action) عملدرست را بر اساس قواعد کلی که آموخته استتنتاج پیداکند. به عبارت دیگر عمق زیاد دانش عامل یادگیرنده باعث می­شود که طراح عامل در مورد ناشناخته­ بودن فضای جدید و ادراکات جدید نگرانی­ کم تری داشته باشد. یعنی طراح عامل نیاز کم­تری به کسب اطلاعات از محیط به کارگیری عامل خواهد داشت. تصور کنید که دو ماشین یادگیرنده با انبوهی از عملیات جمع و ضرب بین اعداد متفاوت مواجه هستند. ماشین اول تنها آن­ها را حفظ می­کند. اما ماشین دوم میتواند روابط بین آن ها را کشف کند. طبیعی است طراح ماشین اول همواره نگران است که در محیط عمل، ورودی محاسباتی جدید و قبلا دیده نشده به ماشین داده نشود. اما طراح ماشین دوم از این بابت خیالش راحت تر است.

Overfit & Underfit

عامل یادگیرنده اگر بتواند فرآیند کلیت بخشی را بر اساس داده های ورودی به خوبی انجام دهد آن گاه یک عامل مفید و قابل استفاده است. اما سوال این جا است که چه روشی برای فهم این موضوع وجود دارد؟ چگونه می توان اطمینان پیدا کرد که عامل یادگیرنده کار خود را به خوبی انجام داده است؟ 
برای این کار کافی است بخشی از داده ها را ازعامل مخفی نگه داریم اگر عامل بتواند حتی بر روی داده های دیده نشده (unseen) هم به طرزمطلوبی عمل کند نشان می دهد که عامل، مفید و قابل استفاده است. اما اگر عامل بر روی داده های دیده شده به خوبی عمل کند  و روی داده های دیده نشده بد عمل کند نشان از این دارد که عامل نتوانسته قواعد کلی را از روی داده های دیده شده استنتاج کند و احتمالا آن ها را تنها در درون خود ذخیره کرده است. یا این که آن مقدار که باید دید عمیقی نسبت به داده ها و رابطه ی بین آنها پیدا نکرده است. چنین رویدادی اصطلاحا overfit نامگذاری میشود.
اما یک حالت بد تر نیز وجود دارد و آن حالتی است که ماشین حتی بر روی داده های دیده شده هم به خوبی عمل نمی کند. این رخداد عمدتا به دلیل کم بودن حجم داده ی دیده شده است یا به دلیل ضعف ماشین.
در ادبیات متداول یادگیری ماشین داده ی دیده شده را داده ی آموزش (train) و داده ی دیده نشده را داده ی آزمون (test) مینامند.

پس...

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

۱۰ دی ۹۶ ، ۱۸:۲۲ ۰ نظر موافقین ۰ مخالفین ۰
Moheb

دانلود کتاب گفت و شنودهایی در ریاضیات

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




۲۹ مهر ۹۵ ، ۲۲:۱۸ موافقین ۰ مخالفین ۰
Moheb