مروری بر یادگیری ماشین (قسمت اول)

این پست تقریبا خلاصه‌ای از قسمت های اولیه‌ی فصل پنجم کتاب یادگیری عمیقه و اسم این فصل هست Machine Learning Basics. کتاب با فرمت HTML و فصل به فصل تو سایتی که لینک کردم به رایگان در دسترسه. Yoshua Bengio و Ian Goodfellow از نویسندگان این کتاب هستند.قسمت دوم این خلاصه رو می‌تونین اینجا ببینین.هدف نهاییِ یه الگوریتم یادگیری ماشین داشتن پرفورمنس خوب روی دادگان تسته و نه دادگان train. مثلا اگر معیارمون رو MSE در نظر بگیریم، هدف نهاییمون رو می‌تونیم کمینه کردن MSE روی دادگان تست در نظر بگیریم.MSE testاز اونجایی که وقتی تو مرحله‌ی train هستیم به دادگان تست دسترسی نداریم، ساده‌ترین راهی که ممکنه پیش رومون باشه اینه که MSE رو روی دادگانی که داریم، یعنی دادگان train کمینه کنیم و به دنبال وزن‌ها (W)یی باشیم که به ازای اون‌ها MSE روی دادگان train کمینه می‌شه.تا این جا فقط با یه مسئله‌ی بهینه سازی روبه‌رو هستیم. اما پس یادگیری ماشین کجای کاره؟! چیزی که بهینه سازی رو از یادگیری ماشین متمایز می‌کنه اینه که ما نمی‌خوایم فقط روی کمینه کردن MSE روی دادگان train بسنده کنیم و می‌خوایم الگوریتممون روی دادگان تست، یعنی داده‌هایی که تا حالا ندیدیم هم خوب کار کنه، یعنی generalization خوبی داشته باشه.چطور می‌تونیم با یادگیری رو دادگان train توقع داشته باشیم رو یه سری داده‌ی دیگه هم که تا حالا ندیدیم دقت خوبی داشته باشیم؟ اینجاست که آمار میاد به کمکمون! یادتون باشه که ما فرض کردیم هر نمونه‌ای که از کل جامعه‌ی آماری برداشتیم (که دادگان train و دادگان تست هم دو نمونه از کل جامعه هستند) iid هستند. یعنی مستقل از هم هستند و از یک توزیع احتمالاتی یکسان اومدن. بنابراین اگه تلاش کنیم از روی دادگان train اون توزیع احتمالاتی یکسان رو یاد بگیریم، احتمالا رو نمونه‌های دیگه از اون توزیع مثل دادگان تست هم دقت خوبی خواهیم داشت.ظرفیت مدل باید با کاری که ازش توقع داریم انجام بده (مثل پیش بینی کردن قیمت خونه یا تشخیص صورت تو یه عکس) متناسب باشه. مثلا تو رگرسیون خطی می‌تونیم ظرفیت مدل رو با درجه‌ی چندجمله ای که استفاده می‌کنیم نشون بدیم. هر چقدر درجه بالاتر، مدل پیچیده تر. اگر ظرفیت مدل کمتر از مقدار موردنیاز task باشه، قدرت کافی برای حل مسئله رو نخواهیم داشت و نمی‌تونیم مسئله رو حل کنیم و اگه ظرفیت مدل بیشتر از حد لازم باشه با overfitting مواجه می‌شیم.نظریه‌ی یادگیری آماری (statistical learning theory) میگه اگه کران بالای تفاضل بین خطای train و خطای تست رو مثلا UB در نظر بگیریم، با بالاتر رفتن ظرفیت مدل، UB افزایش پیدا می‌کنه و با بیشتر شدن دادگان train این کران کاهش پیدا می‌کنه. (و ما دنبال این هستیم که تفاضل بین خطای train و خطای تست کمتر شه و در نتیجه این کران کاهش پیدا کنه)تخمین زدن ظرفیت شبکه‌های عصبی برخلاف رگرسیون خطی کار ساده ای نیست و عوامل زیادی روش تاثیر دارن.شکل 1به طور کلی همونطور که تو شکل 1 می‌بینیم با افزایش ظرفیت مدل، خطای train همواره کاهش پیدا می‌کنه. اما خطای test یا همون خطای generalization بعد از یه مقدار ظرفیت خاص شروع می‌کنه به افزایش پیدا کردن. این همونجاییه که مدل شروع می‌کنه به overfit کردن و قابلیت generalization اش کم می‌شه (و ما دوست داریم این sweet spot رو پیدا کنیم)مدل‌های پارامتری مدل‌هایی هستند که به طور کلی با یه بردار پارامتر با طول ثابت (و متناهی) تعریف می‌شن و وقتی دادگان train رو می‌بینیم، سعی می‌کنیم این پارامترها رو طوری تغییر بدیم که مدل fit بشه روی دادگان یعنی اندازه‌ی این بردار پارامتر (تعداد پارامترها) تغییری نمی‌کنه اما مقدارشون تغییر می‌کنه، مثل رگرسیون خطی. مثلا اگه ورودی برداری با یک عنصر باشه، فرمول رگرسیون از قبل مشخصه و همونطور که تو شکل 2 می‌بینیم بردار پارامترمون همون w و b ئه که دو عضو داره. وقتی هم دادگان رو ببینیم تعداد پارامترها همین دوتا هستند و تغییری نمی‌کنند.شکل 2-مدل‌های غیرپارامتری این محدودیت مدل‌های پارامتری رو ندارند که مجبور باشن قبل از دیدن دادگان تعداد پارامترهای ثابتی داشته باشند. همین باعث می‌شه که ظرفیتشون خیلی بیشتر از مدل‌های پارامتری باشه. مثال این مدل ها k-nearest-neighbor ئه. قبل از دیدن دادگان این مدل پارامتر خاصی نداره و هر وقت هم بخوایم با این مدل پیش بینی کنیم به همه‌ی دادگان train احتیاج داریم.البته می‌تونیم با پیچیدن (!) یه الگوریتم پارامتری تو یه الگوریتم دیگه که تعداد پارامترها رو در موقع نیاز تغییر می‌ده، یک الگوریتم غیرپارامتری بسازیم. مثلا اگه بخوایم رگرسیون خطی رو غیرپارامتری کنیم می‌تونیم یه حلقه‌ی خارجی داشته باشیم که درجه‌ی چند جمله ای رو با توجه به داده‌ای که می‌بینه تغییر بده.به طور کلی حالت ایده‌آل برای الگوریتم‌های یادگیری، یه دانای کل یا oracle ئه که توزیع واقعی تولید داده رو بدونه. اما در این حالت هم ممکنه دقتمون 100% نباشه و مقداری خطا داشته باشیم، به این خطا می‌گن Bayes Error و ممکنه ناشی از دو چیز باشه: 1) ممکنه رابطه‌ی بین X و y که سعی داریم مدلش کنیم ذاتا و حقیقتا تصادفی باشه. 2) ممکنه ویژگی یا فیچری تو y موثر باشه که تو X نیومده باشه اصلا. یعنی confounding variable داشته باشیم.به طور کلی هر چقدر تعداد نمونه‌های train بیشتر باشه، قدرت generalization مدل بیشتر می‌شه و در نتیجه خطای test کمتر می‌شه.در مدل‌های غیرپارامتری داده‌ی train بیشتر همواره خطای تست رو پایین میاره تا جایی که به کمترین خطای ممکن یعنی خطای Bayes برسیم.اما اگر یه مدل پارامتری با ظرفیتی کمتر از ظرفیت بهینه (تو شکل 1 مشخصه) داشته باشیم، هر چقدر دادگان train رو بیشتر کنیم، خطاش به سمت خطایی که بیشتر از خطای Bayes ئه میل می‌کنه.