چند نکته بسیار مهم در مورد یادگیری ماشین
روح الله زندیهدر این نوشته یکی از کارهای بسیار مهم و ارزشمند پترو دومینگوس پروفسور دانشگاه واشنگتن برای شما خلاصه و ترجمه کرده ایم. این نوشته در مورد نکات بسیارمهمی از یادگیری ماشین است که حتی متخصصان هم در فهم آن مشکل دارند.

Petro Domingos
الگوریتم های یادگیری ماشین برای عمومی سازی بر اساس تعداد محدودی نمونه توسعه یافته اند. هر روز بر تعداد کاربردهای دنیای واقعی یادگیری ماشین افزوده می شود. اما در عمل پروژه های یادگیری ماشین پیچیده تر و پیاده سازی دشوار تری دارند. بعد از مدتی متوجه می شوید پیاده کردن یک پروژه یادگیری ماشین پر است از چیز هایی که به سختی در کتاب ها پیدا می شود و اصطلاحا فوت کوزه گری یادگیری ماشین هستند که در کار یاد میگیرید. این مقاله بر آن است که بسیاری از این فوت های کوزه گری قابل انتقال هستند. در اینجا لیستی از آن ها آورده شده است.
یادگیری=بازنمایی+ارزیابی+بهینه سازی
اولین سوالی که در یک مساله یادگیری ماشین پیش می آید این است که از کدام الگوریتم استفاده کنم؟ در واقع هزاران الگوریتم وجود دارند و هر ساله هم به تعداد آن ها افزوده می شود. اما می توان گفت همه الگوریتم ها سه بخش اساسی دارند:
۱- بازنمایی: هر الگوریتم باید یک بازنمایی داشته باشد به شیوه ای که برای کامپیوتر قابل فهم باشد. به این فضای فرضیه ی(hypothesis space) یادگیرنده هم گفته می شود.
۲- ارزیابی: یک تابع ارزیابی نیاز هست تا یادگیرنده ی خوب را از بد تشخیص داده شود.
۳- بهینه سازی: در نهایت ما به روشی احتیاج داریم تا بین دسته بند های مختلف بهترینشان را انتخاب کنیم. انتخاب روش بهینه سازی برای دسته بند اساسی است.
در جدول زیر لیستی از این سه بخش که بیشتر مورد استفاده قرار می گیرد را قرار داده ایم.به طور مثال knn یک نمونه را با یافتن نزدیک ترین (شبیه ترین) در داده های آموزش دسته بندی می کند.
البته که تمام ترکیب های ممکن از هر ستون با دیگران معنی ندارد. به طور مثال بازنمایی های گسسته همراه با بهینه سازی های combinatorial می آید و بازنمایی های پیوسته همراه با بهینه سازی های پیوسته می آیند. بیشتر کتاب ها با بازنمایی دسته بندی شده اند. در حالی که با دو ستون دیگر هم به همان خوبی قابل دسته بندی هستند.
عمومی سازی مهم است!

آنچه در یادگیری ماشین مهم است عمومی سازی است زیرا خیلی بعید است که نمونه هایی که در آموزش داشتیم باز هم ببینیم. یکی از اشتباهات رایج در بین تازه وارد ها این است که الگوریتم را بر روی داده های آموزش اجرا می کنند و فکر می کنند موفق شده اند. ساده ترین کار برای جلوگیری از این اشتباه این است که داده ها را به دو دسته آموزش و آزمون تقسیم کنیم. علاوه بر آن بهتر است از روش k-fold cross validation استفاده کرد. بر خلاف دیگر روش های بهینه سازی، در یادگیری ماشین ما دسترسی مستقیم به تابعی که می خواهیم بهینه کنیم نداریم. تنها چیزی که داریم خطای داده های تست است و این باعث می شود اشتباهات زیادی کنیم که در قسمت های بعد به آن می پردازیم.
داده به تنهایی کافی نیست!
باید دانست که داده به تنهایی کافی نیست. فرض کنید که یک تابع بولین با 100 متغیر دارید و یک میلیون نمونه برای یادگیری آن. تعداد 2^100-10^6 نمونه وجود دارند که شما نمی دانید. چطور می توانید بدانید که کلاس آن تعداد بسیار زیاد نمونه ای که ندیده اید چیست؟ در واقع با نداشتن اطلاعات بیشتر نمی توان چیزی گفت. این واقعیت اولین بار توسط دیوید هیوم حدود 400 سال پیش مشاهده شد. هر یادگیرنده باید اطلاعاتی بیش از داده ها داشته باشد که بتواند فراتر از آن ها را عمومی سازی کند. این موضوع در یادگیری ماشین به نام قضیه "آش مجانی نداریم"(no free lunch theorem) شناخته می شود که بر طبق آن هیچ یادگیرنده ای بهتر از حدس تصادفی بر روی تمام توابعی که می توان یاد گرفت نیست.
پس با این حساب چطور می توان امید داشت که اصلا یادگیری انجام شود؟ خوشبختانه توابعی که می خواهیم در دنیای واقعی یاد بگیریم به صورت یکنواخت از مجموعه تمام توابع ریاضی ممکن انتخاب نمی شود. در واقع فرضیات بسیار کلی مانند پیوستگی(smoothness)، نمونه های مشابه متعلق به کلاس مشابه اند(clustering assumption)، پیچیدگی محدود(limited complexity) معمولا کافی هستند که یک کار خوب صورت بگیرد و اصلا به همین دلیل است که یادگیری ماشین به این خوبی کار می کند.
همانند استنتاج(deduction) استقرا(induction) هم یک اهرم دانش است: استقرا یک مقدار کم از دانش را به عنوان ورودی می گیرد و مقدار زیادی دانش به ما می دهد. این دانش به ما کمک می کند که جهت یادگیری را شناسایی کنیم. اگر ما اطلاعات خوبی از این که چه چیزی معیار شباهت بین نمونه ها است داشته باشیم روش های instance based خوب جواب می دهند. اگر در مورد وابستگی های احتمالی اطلاعات خوبی داریم روش های گرافیکی بهتر جواب می دهند و الخ.
بیش برازش چهره های زیادی دارد
اگر به اندازه کافی نمونه برای یادگیری یادگیرنده نداشته باشیم چه اتفاقی می افتد؟ ممکن است ما دچار توهم یک یادگیری کامل شویم. بیش برازش(overfitting) زمانی اتفاق می افتد که دسته بند ما بر روی نمونه های یادگیری دقت بالا دارد اما بر روی داده های آزمون دقت پایینی دارد.
هر کسی که بر روی یادگیری ماشین کار کرده باشد با بیش برازش آشنا است. اما باید دانست که بیش برازش در فرم های مختلفی ظاهر می شود. یکی از روش های درک آن این است که خطای یادگیری را به دو بخش بایاس و واریانس تقسیم کنیم.بایاس تمایل یادگیرنده به این است که به طور مکرر یک چیز غلط را یاد بگیرد. واریانس تمایل یادگیرنده به یادگیری داده های رندم است بدون توجه به سیگنال اصلی. شکل زیر این مشکل را با قیاس پرتاب کردن دارت مقایسه کرده است. یک دسته بند خطی دارای بایاس بالایی است زیرا وقتی با یک ابر صفحه نتوان بین نمونه ها تفاوت قائل شد یادگیرنده نمی تواند آن را استقرا کند. درخت های تصمیم این مشکل را ندارند اما می توانند از واریانس بالا رنج ببرند. درخت های تصمیمی که بر روی داده های آموزش متفاوت(اما از یک منبع) آموزش داده می شوند می توانند بسیار با هم متفاوت باشند. همین استدلال در مورد روشهای بهینه سازی هم وجود دارد: beam search دارای بایاس کمتری از greedy search است اما واریانس بالاتری دارد زیرا فرضیات بیشتری را بررسی می کند.
Cross validation می تواند برای جلوگیری از بیش برازش استفاده شود با این حال حتی آن هم حلال تمام مشکلات نیست زیرا اگر ما از Cross validation برای انتخاب تعداد زیادی پارامتر استفاده کنیم خودش می تواند بیش برازش برایش اتفاق بیوفتد. علاوه بر cross validation راههای دیگری هم برای مقابله با بیش برازش وجود دارند که یکی از محبوب ترین های آن ها اضافه کردن یک جمله تنظیم کننده(regularization term) به تابع ارزیابی است. این روش به طور مثال می تواند برای جریمه کردن تابعی با ساختار(یا پارمتر بیشتر) مورد استفاده قرار گیرد.
یک اشتباه رایج در مورد بیش برازش این است که بیش برازش نتیجه داده های نویز مانند نمونه های درست با برچسب غلط است اما این لزوما درست نیست زیرا بیش برازش در نبود داده نویز هم می تواند رخ دهد.(مانند داده های بولین در یک disjunctive normal form)
شکست شهود ما در ابعاد بالا!
پس از بیش برازش شاید بزرگترین مشکل در یادگیری ماشین، "مشکل ابعاد"(curse of dimentionality) باشد. عمومی سازی با افزایش ابعاد به صورت نمایی دشوار می شود زیرا تعداد ثابت نمونه ها تنها بخش کوچکی از فضا را پوشش می دهد. حتی با تعداد بعد معمولی 100 تا و تعداد بسیار زیاد یک میلیارد نمونه تنها 10^-18 درصد فضا پوشش داده می شود. همین کار یادگیری ماشین را لازم و دشوار می کند.
به همین منوال روش های مبتنی بر شباهت که الگوریتم های یادگیری ماشین بر اساس آن ها هستند در ابعاد بالا از بین می روند. حتی اگر تمام 100 ویژگی(بعدی) که داریم مربوط باشند روش نزدیک ترین همسایه (nearest neighbor) مشکل خواهد داشت زیرا در ابعاد بالا تمام نمونه ها شبیه به هم خواهند بود. به طور مثال فرض کنید یک شبکه داریم که نمونه های ما بر روی هر گره شبکه قرار گرفته باشند فرض کنید در نقطه ای از شبکه یک نمونه وجود دارد برای شبکه d بعدی 2d مثال نزدیک آن همه در یک فاصله از آن قرار دارند.برای مثال برای حالت یک بعدی(خط) دو نقطه (چپ و راست) نزدیک ترین اند. برای دو بعد چهار نقطه(شمال جنوب شرق غرب) و برای سه بعد شش نقطه(بالا پایین جنوب شمال شرق غرب) وقتی ابعاد افزایش یابد تعداد بیشتر و بیشتری از نمونه ها در نزدیک ترین فاصله قرار دارند طوری که کم کم نزدیک ترین فاصله بی معنی می شود.
در واقع در ابعاد بالا نمی توان شهود ابعاد پایین را اعمال کرد. به طور مثال در ابعاد بالا بیشتر وزن یک توزیع گاوسی چند بعدی نزدیک میانگین آن نیست بلکه در یک پوسته دور است: بیشتر حجم در پوسته است تا در مرکز! برای درک این موضوع فرض کنید یک دایره را در یک مربع محاط کرده اید. اگر اندازه فاصله بین این دو را حساب کنید عددی به دست می آید. حالا اگر همین را برای کره داخل مکعب حساب کنید عدد بزرگتری می شود و به همین منوال این عدد بزرگتر و بزرگتر می شود. شاید عجیب به نظر برسد اما اندازه یک ابرکره با شعاع ثابت با افزایش بعد کاهش می یابد و در بی نهایت به صفر میل میکند! در واقع حجم یک ابر کره برابر است با:

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

فرض کنید که ویژگی های خوبی هم تعریف کردید اما به نتایج مناسبی نرسیدید چکار میکنید؟ دو راه دارید یا یک الگوریتم بهتر طراحی کنید یا داده های بیشتر جمع آوری کنید. بیشتر محققین دنبال طراحی الگوریتم های بهتر هستند ولی در عمل داده های بیشتر بهتر عمل می کنند! به عنوان یک قاعده سر انگشتی، یک الگوریتم ساده با داده های زیاد یک الگوریتم هوشمند با داده های اندک راشکست می دهد.
البته این خود مساله ی دیگری به دنبال دارد: مساله مقیاس پذیری(scalability). در بیشتر کارهای علوم کامپیوتر دو محدودیت اساسی وجود دارد: زمان و حافظه. در یادگیری ماشین یک عامل دیگر هم اضافه می شود: داده های یادگیری. در دهه 1980 داده بود که مشکل اساسی بود. امروز بیشتر مشکل زمان وجود دارد. مقادیری بسیار بزرگی از داده در اختیار داریم. این منجر به تناقض جالبی می شود: در عمل وقتی داده بیشتر داریم یعنی فرصت یادگیری الگوریتم های پیچیده تر وجود دارند اما در عمل الگوریتم های ساده تر بهتر جواب می دهند. یک دلیل این قضیه این است که الگوریتم های پیچیده تر فایده کمتری از آنچه فکر می کنید دارند و در عمل بیشتر آن ها با یک تخمین درجه یک، یک کار می کنند!
مدل های بیشتری را یاد بگیر، نه فقط یک مدل!
در روزهای اولیه یادگیری ماشین هر کس یک دسته بند یا روش یادگیری مورد علاقه خودش را داشت که دلایلی هم برای آن داشت. و اگر روشی به خوبی کار نمی کرد یا روش را عوض می کرد یا با تغییر درپارامتر ها آن را متناسب با نیازش عوض می کرد. اما امروزه استفاده از مجموعه ای از دسته بند ها(ensemble of learners) بسیار استاندارد است. در یکی از ساده ترین روش ها به نام bagging به صورت ساده مدل های متفاوت از یادگیر با بخش های مختلف داده می سازیم و در نهایت هنگام دیدن نمونه جدید بین مدل ها یک رای گیری برقرار می کنیم. در روش boosting نمونه های یادگیری وزن داده می شوند و هر الگوریتم بر روی بخش هایی تمرکز می کند که دسته بند قبلی اشتباه دسته بندی کرده بود. روش های زیاد دیگری هم وجود دارند و امروزه روش های عملی و کارا بیشتر به سمت ensemble های بزرگ و بزرگتر میل کرده اند.
سادگی لزوما به معنای دقت بیشتر نیست
بر اساس اصل تیغ اکام بهتر است برای توضیح پدیده ها بیشتر به دنبال مدل های ساده تر باشیم. اما این لزوما همیشه درست نیست. روش ensemble که در بخش قبل گفتیم مثال نقض آشکار این ادعا است. مثال نقض دیگر ماشین های بردار پشتیبان هستند که عملا بینهایت پارامتر دارند و درعین حال بسیار کارا هستند.
همبستگی به معنای علیت نیست

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