مهمترین الگوریتم های کاربردی یادگیری ماشین چیست؟فصل چهارم

خلاصه ای از کتاب صد صفحه ای یادگیری ماشین، اثر آندری بورکوففصل چهارم: آناتومی یک الگوریتم یادگیریمن سعی دارم تو یک سری از مطالب پشت سر هم خلاصه ای از کتاب صدصفحه ای یادگیری ماشین نوشته آندری بورکوف رو اینجا بنوسیم. برای اینکه فصل قبل رو بخونید می تونید از لینک زیر استفاده کنید. https://virgool.io/@hamidreza.firooze/%D9%85%D9%87%D9%85%D8%AA%D8%B1%DB%8C%D9%86-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D8%AE%D8%B4-%D8%B3%D9%88%D9%85-i3hoyokk0eaw تو این فصل در مورد ویژگی های یک الگوریتم یادگیری ماشین قبل از انتخاب برای حل مسال خودمون باید درنظر بگیریمشون، صحبت می کنیم. 4-1 بلوک های سازنده یک الگوریتم یادگیری ماشیناگه فصل های قبل رو مطالعه کرده باشید، احتمالا متوجه شدید که هر الگوریتم یادگیری ماشین دارای سه بخشه:1- یک تابع هزینه2- یک معیار بهینه سازی بر اساس تابع هزینه3- یک روتین بهینه سازی که هدفش ساختن بهترین مدل برای داده های آموزشی بر اساس معیار بهینه سازیه.یکی از پرکاربردترین الگوریتم های بهینه سازی روش گرادیان دیسنت و یا گرادیان دیسنت تصادفیه. گرادیان دیسنت از یک نقطه تصادفی شروع میکنه و معمولا منجر به رسیدن به جواب بهینه محلی میشه. برای توابع هزینه ای که شکل محدب دارند مثل توابع هزینه الگوریتم های SVM، رگرسیون خطی و لجستیک، یک نقطه بهینه کلی وجود داره که مطمئنیم که گرادیان دیسنت اون رو پیدا خواهد کرد. برای الگوریتمی مثل شبکه عصبی این موضوع برقرار نیست ولی در اکثر مواقع رسیدن به یه جواب بهینه محلی هم می تونه کافی باشه.4-2 گرادیان دیسنتبرای اینکه نحوه کار گرادینت دیسنت رو یادبگیریم یه مثال رو برای یک رگرسیون خطی استفاده می کنیم. هدف این مساله پیدا کردن یک رابطه خطی بین میزان سرمایه گذاری در تبلیغات و میزان فروش یک شرکته. داده های مرتبط با 200 شرکت جمع آوری شده که نمونه اونرو می تونید تو جدول زیر ببینید.شکل زیر یه نمودار پراکندگی برای رابطه بین اندازه فروش و هزینه تبلیغات نشون میده.تابع ما به صورتf(x)=wx+b نوشته میشه که مقدار بهینه w و b رو نمی دونیم. برای این موضوع ما تابع هزینه رو به صورت زیر تعریف می کنیم.فرمول یکگرادیان دیسنت از تابع هزینه نسبت به مقادیر مجهول مشتق جزیی می گیره که میشه فرمولهای زیر.فورمول دوگرادیانت دیسنت در اپک های (epoch) مختلف عمل می کنه. هر اپک از یک مجموعه از داده های آزمایشی برای به روز رسانی پارامترها استفاده می کنه. در اپک اول مقدار w و b رو برابر با صفر قرار میدیم و مشتقات جزیی رو محاسبه می کنیم. در هر اپک مقدار پارامترها رو براساس یک نرخ یادگیری آلفا به روز می کنیم.فرمول سهدر اپک بعد ما مشتقات جزیی رو براساس فرمول دو دوباره محاسبه می کنیم و مراحل رو تکرار می کینم. این فرایند آنقدر تکرار میشه تا به شرایط همگرایی برسه. داخل کتاب می تونید کدهای پایتون این روش رو ببینید.شکل زیر خط رگرسیونی ایجاد شده رو بر اساس تعداد اپک های مختلف نمایش میده.مشکلاتی که روش گرادیانت دیسنت داره یکی حساسیت بالا به نرخ یادگیری و دیگری سرعت پایین در دیتاست های بزرگه. یکی از راه حل ها، استفاده از Minibatch stochastic gradient descent (minibatch SGD) خواهد بود که سرعت یادگیری رو با استفاده از زیرمجموعه ای از داده ها در هر اپک افزیش میده. تو اینجا می تونید بیشتر در مورد این روش بخونید. خود minibatch SGD چندین آپگرید داره. Adagrad با تغییر آلفا بر اساس هیستوری گرادیان سرعت رو بهبود میده. Momentum با جهت دهی گرادیان از نوسان کردن اون حول نقطه بهینه جلوگیری می کنه. در شبکه های عصبی ورژن های RMSprop و Adam خیلی پرکاربرد هستند.نکته مهمی که باید در نظر داشته باشید اینه که گرادیان دیسنت و ورژن های مختلف اونها الگوریتم های یادگیری ماشین نیستند بلکه روشهایی برای حل مساله بهینه سازی هستند.4-3 یک مهندس یادگیری ماشین چطور کار میکنه؟برای استفاده از روشهایی مثل گرادیان دیسنت لازم نیست که این فرمول ها رو خودمون پیاده سازی کنیم. کتابخانه های منبع باز زیادی وجود داره که این روشها رو پیاده سازی کردن. یکی از مهمترین کتابخانه های یادگیری ماشین Scikit-Learn در پایتون هست. لینک های زیر حل دوتا مساله با کمک این روش خواهد بود. https://virgool.io/MelkRadar/%D9%BE%DB%8C%D8%B4-%D8%A8%DB%8C%D9%86%DB%8C-%D9%82%DB%8C%D9%85%D8%AA-%D9%85%D9%84%DA%A9-%D8%A8%D9%87-%DA%A9%D9%85%DA%A9-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-oyed72v4vbjs https://virgool.io/@hamidreza.firooze/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D9%87%D8%A7%DB%8C-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%AF%D8%B1-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1%DB%8C%D8%A7%D8%A8%DB%8C-%D9%85%D8%AD%D8%A7%D8%B3%D8%A8%D9%87-%D8%B4%D8%A7%D9%86%D8%B3-%D8%A8%D8%A7%D8%B2%DA%AF%D8%B4%D8%AA-%D9%85%D8%B4%D8%AA%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-ioauzqnrqpdv یک مهندس یادگیری ماشین حتما باید با کتابخونه هایی مثل scikit-learn و یا روشهای مشابه آشنایی داشته باشه تا بتونه تو حل مساله ها بهینه عمل کنه. کتاب Hands-on Machine Learning with Scikit-Learn یکی از کتابهای خیلی خوب در این زمینه است که خودم به تازگی شروع به خودندش کردم و به نظرم خیلی جامع کتابخانه های لازم رو بررسی می کنه. اینجا می تونید یه ریویو از کتاب رو بخونید.4-4 خصوصیات مرتبط با یک الگوریتم یادگیری ماشین هر الگوریتم یادگیری ماشین ویژگی های مختص خودش داره که اون رو از بقیه الگوریتم ها متمایز می کنه. یکی از مواردی که احتمالا متوجه شدید اینه که هر الگوریتم هایپر پارامترهای مختص خودش رو داره.بعضی از الگوریتم ها مثل درخت تصیم گیری، ویژگی های رسته ای(categorical features) رو قبول می کنند. مثلا متغیری مثل رنگ می تونه رسته ای باشه. الگوریتم هایی مثل SVM، رگرسیون لجستیک و یا kNN فقط متغیرهای عددی قبول می کنند.بعضی از الگوریتم ها مثل SVM اجازه میدن که برای هر کلاس وزن تعیین کنیم که تاثیر روی نحوه کشیدن مرز تصمیم گیری خواهد داشت. بعضی از الگوریتم های مثل SVM و kNN تنها خروجی که دارند کلاس مرتبط با هر رکورد خواهد بود. اما بعضی الگوریتم ها مثل رگرسیون لجستیک یا درخت تصمیم گیری می تونند یه عدد بین صفر و یک بدند که می تونه به صورت احتمال عضویت در هر کلاس تعریف بشه.بعضی از الگوریتم ها مثل SVM، درخت تصمیم گیری یا رگرسیون لجستیک می تونند از کل داده ها برای ساخت مدل می تونند استفاده کنند. اگه دیتاهای جدید اضافه بشه باید کل مدل رو از ابتدا بسازیم. بعضی دیگر از الگوریتم ها مثل Naïve Bayes، multilayer perceptron، SGDClassifier/SGDRegressor، PassiveAggressiveClassifier/PassiveAggressiveRegressor می تونند در هر تکرار از یک بچ از داده ها برای آموزش استفاده کنند. در نهایت بعضی از الگوریتم ها مثل SVM، درخت تصمیم گیری و kNN می تونند هم برای مساله رگرسیون و هم طبقه بندی استفاده بشند، در صورتی که بعضی دیگه فقط برای یک دسته از مسائل قابل استفاده خواهند بود. تو فصل بعد در باره مسائلی که در یک پروژه یادگیری ماشین با اون روبرو میشیم و راه حل هاش صحبت خواهیم کرد.