محمد امین رجایی
محمد امین رجایی
خواندن ۷ دقیقه·۴ سال پیش

یادگیری ماشین و انواع سامانه ها

سلام!

در این پست و پست بعدی قصد دارم اول به مفهوم کلی یادگیری ماشین اشاره کوتاهی کنم بعدش بیام و یه دستی بندی کلی راجع به انواع سامانه ها و الگوریتم هایی که امروزه در دنیای هوش مصنوعی و یادگیری ماشین ترند شده ارائه بدم.

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


خب مقدمه چینی بسه!

یادگیری ماشین چیست؟؟؟

خب همونطور که احتمالا خودتون مطلع هستید, ماشین لرنینگ یعنی علم یا هنر برنامه نویسی کامپیوتر ها بگونه ای که اون کامپیوتر ها بتونن یاد بگیرن! از چی؟ از اطلاعاتی که دریافت میکنن (حالا یا ما این اطلاعات رو بهشون میدیم یا اینکه خودشون این اطلاعات رو کسب میکنن).

خب حالا فرقش با برنامه نویسی معمولی چیه؟ اصن چرا نیاز داریم کامپیوتر یاد بگیره؟؟

اینجا رو یک مثال میزنم. فرض کنیم میخوایم یه برنامه یا بهتر بگیم یک الگوریتم طراحی کنیم که وقتی مشخصات یک خونه رو بهش میدیم قیمت خونه رو برای ما پیش بینی کنه. با توجه به اونچه که گفته شد ما با دو دیدگاه روبرو هستیم. اول اینکه بیایم و از روش های معمول برنامه نویسی استفاده کنیم. ینی فقط با تکیه بر ساختار های کنترل (حلقه ها و دستورات شرطی) بیایم و یکسری قوانینی ایجاد کنیم. مثلا بگیم اگر متراژ خونه A, موقعیت مکانی خونه B, قدمت خونه C و ... باشه, قیمت احتمالی خونه رو ʎ پیش بینی کن. خب احتمالا خودتون هم متوجه شدید که مشکل کجاست. اگر ما قرار باشه 5 تا شاخص (متراژ, موقعیت, ...) رو در نظر بگیریم و دست کم واسه هر شاخص 10 تا متغیر استفاده کنیم اونوقت ... اونوقت ما باید ده به توان 5 یعنی 100000 قانون رو در کدمون پیاده سازی کنیم! تازه فقط همین نیست, قیمت خونه بر حسب هر یک ازین شاخص ها دائما در حال تغییره و این یعنی ما باید بطور پیوسته اون 100000 تا قانون پیچیدمون رو بروزرسانی کنیم که این عملا با منطق جور در نمیاد!

دیدگاه دوم مون اینه که از تکنیک های یادگیری ماشین بهره ببریم. یعنی به کامپیوترمون یاد گرفتن یاد بدیم نه اینکه بیایم خودمون دستی پیاده سازی کنیم. الگوریتمی که با ماشین لرنینگ طراحی شده تا قیمت خونه رو پیش بینی کنه, با توجه به اون دیتایی که بهش میدیم (Data Set یا Training Set) خودش یاد میگیره که هر خونه با توجه به مشخصاتی که داره چه قیمتی براش پیش بینی میشه (و یا چه دامنه قیمت هایی). همچنین اگر قیمت بر اساس شاخص ها تغییر کنه, اون خودش این تغییر قیمت ها رو از طریق اون دیتایی که بهش میدیم یاد میگیره. در واقع اینجا کار ما کدنویسی نیست بلکه Training هستش, یعنی آموزش دادن کامپیوتر با انبوهی از دیتا ست ها که هر چی بیشتر باشه الگوریتم ما به روز تر و کار بلد تر میشه.


اگر یه سرچی انجامم بدید متوجه میشید که طبقه بنده های متعددی برای سامانه های یادگیری ماشین هست و ارائه شده. من در اینجا قصد دارم از سه دیدگاه این سامانه ها رو طبقه بندی کنم:

  1. آیا این سامانه ها نیاز دارند تحت نظارت انسان ها یاد بگیرند؟
  2. آیا این سامانه ها به یکباره یاد میگیرند یا به تدریج؟
  3. آیا این سامانه ها داده های جدید را با داده های قبلی مقایسه میکنند یا اینکه الگویی در داده های قبلی پیدا کرده, با استفاده از آن مدلی ساخته و داده های جدید را با این مدل مقایسه میکنند؟

بر اساس دسته بندی اول سامانه ها به چهار دسته تقسیم میشوند:

الف. یادگیری نظارت شده (Supervised Learning)

ب. یادگیری نظارت نشده (Unsupervised Learning)

د. یادگیری نیمه نظارت شده (Semi-supervised Learning)

ج. یادگیری تقویتی (Reinforcement Learning)

  • در یادگیری نظارت شده, اون دیتا ستی که به ماشین میدیم خودش حاوی صورت مسئله هست. یعنی چی؟ ینی ما از طریق اون دیتایی که به ماشین میدیم برای ماشین مشخص میکنیم که نتیجه ای رو که بدست میاره باید به چه شکلی باشه. اصطلاحا دیتا ست ما برچسب گذاری شده و ماشین از طریق اون برچسب هایی که بهش دادیم متوجه میشه که قراره با دیتای جدید چکار بکنه, ینی میفهمه قراره برای اون دیتای جدید اون برچسب رو پیش بینی کنه. مثلا همین مثال پیش بینی قیمت مسکن: دیتا ستی که به ماشین میدیم شامل یه سری برچسب هست و اون برچسب ها همون قیمت خونه ها بر اساس شاخص هاشون هستن (برچسب ها Label و اون شاخص ها که از روشون برچسب تعیین میشه Predictor نام دارن). این جور الگوریتم هایی که در اون ها ماشین مقدار عددی یک چیز رو پیش بینی میکنه, الگوریتم های رگرسیون نام دارن (Regression) که در آینده راجع بهشون صحبت خواهم کرد. نوع دیگه ای از مسائل که در یادگیری با ناظر باهاشون مواجه میشیم که عمومیت بالایی هم دارن مسائل طبقه بندی (Classification) هستن. در این مسائل باید مدلی طراحی کنیم که مشخص کنه هر نمونه ای که بهش میدیم در چه دسته ای قرار میگیره (شکل پایین). یکی از معروف ترین الگوریتم هایی که برای حل این جور مسائل بکار میره الگوریتم رگرسیون لجستیک هستش (Logistic Regression) که در آینده راجع بهش صحبت خواهم کرد.
دیتای برچسب گذاری شده در یادگیری نظارت شده
دیتای برچسب گذاری شده در یادگیری نظارت شده


  • در یادگیری بدون نظارت بر خلاف یادگیری نظارت شده اون دیتایی که باهاش الگوریتم و مدل مون رو train میکنیم برچسب گذاری نشده. سامانه خودش یاد میگیره قراره با اون دیتای خامی که بهش میدیم چجوری واکنش بده و دیتای جدید رو چجوری آنالیز کنه و دقیقا چی رو بدست بیاره. الگوریتم های متعددی وجود داره که معروف ترین اونها خوشه بندی (Clustering), تشخیص ناهنجاری (Anomaly Detection) و تشخیص نوظهوری (Novelty Detection) هستش. در اینجا من برای الگوریتم خوشه بندی یک مثال ارائه میدم. فرض کنیم یک سری اطلاعات یا دیتا راجع به مشتریان یک مغازه داریم. حالا ما میخوایم بیایم به یک شکلی این مشتری ها رو گروه بندی کنیم اما برای ماشین تعیین نمیکنیم که این گروه ها یا خوشه ها بر چه اساسی خوشه بندی بشن, لذا از الگوریتم خوشه بندی استفاده میکنیم. این الگوریتم میاد خودش اشتراکات میان قسمت های مختلف دیتا رو پیدا میکنه و اونهارو بر همون اساس خوشه بندی میکنه. مثلا میگه 30 درصد مشتری ها که سنشون بین 10 تا 20 سال هست نقدی خرید میکنن و مبلغ خریدشون کمتر از 50 هزار تومنه, در حالیکه 50 درصد سنشون بین 25 تا 30 سال هستش و با کارت بانکی خرید میکنن و مبلغ خریدشون غالبا بیشتره.
مقایسه classification و clustering
مقایسه classification و clustering


  • گاهی اوقات ما برای اینکه برچسب گذاری همه دیتامون وقت گیر و هزینه بر هستش, میایم و بخش کوچکی از دیتا رو برچسب گذاری میکنیم و مابقی رو بدون برچسب میگذاریم که این میشه یادگیری نیمه نظارت شده. این الگوریتم ها غالبا ترکیب الگوریتم های نظارتی و بدون نظارت هستن. یک مثال خوب ,سرویس هایی مثل Google Photos هستن. زمانی که شما عکس های خانوادگی تون رو آپلود میکنین الگوریتم های ماشین لرنینگ گوگل میان و از تکنیک خوشه بندی استفاده کرده و افراد رو مثلا فرد A رو در چند تا عکسی که اون فرد درش حضور داره شناسایی میکنه, و فرد B و تک تک افراد دیگه رو همینطور. تا اینجاش شد بدون نظارت. حالا کافیه اسم هر فرد رو در فقط یک عکس تعیین کنیم, بعد الگوریتم میاد و اسم تک تک افراد رو در تک تک عکس ها مشخص میکنه. در این مرحله ما به ماشین برچسب دادیم و ازش خواستیم طبق اون برچسب classification انجام بده.
مقایسه یادگیری نظارت شده و نیمه نظارت شده
مقایسه یادگیری نظارت شده و نیمه نظارت شده


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

TU Delft robot Leo learns to walk



خب امیدوارم تا اینجا سرتون رو به درد نیاورده باشم با پر حرفی هام ?

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

ممنون بابت وقتی که گذاشتید ? و لطفا اگر نظری یا ایده ای دارید حتما در نظرات با من در میون بگذارید!

یادگیری ماشینیادگیری نظارت شدهیادگیری نظارت نشدهیادگیری نیمه نظارتییادگیری تقویتی
دانشجوی مهندسی کامپیوتر
شاید از این پست‌ها خوشتان بیاید