Supervised Learning - قسمت اول

.سلام. من امیر داعی هستم و با قسمت سوم از مجموعه هوش مصنوعی برای همه در خدمتتونم

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

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

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

نکته ی دیگه ای که هست اینه که من اعتقادی به فارسی سازی کلمات تخصصی ندارم، چون این کار میتونه موجب گیج کننده شدن متن بشه و کسی که دنبال مطالعه بیشتر از سورس های خارجی میره رو با مشکل رو به رو میکنه، بنابراین من از کلمات اصلی برای هر مفهوم استفاده میکنم و فقط موقع معرفی اگر معادل فارسی داشت اون رو بیان میکنم. در ضمن کلمات خلاصه شده اصطلاحات مختلف رو هم خوبه یاد بگیریم، چون در متن من زیاد استفاده میکنم تا حجم مطالب کمتر بشه. به بعضی از این خلاصه ها در قسمت قبل اشاره کردم و برای مفاهیم جدید هم موقع معرفی اشاره خواهم کرد. از جمله کلمات کاربردی و خلاصه شون مخصوصا برای این قسمت: machine learning:ML - Artificial Intelligence:AI - Artificial Neural Networks:ANN - Deep Neural Networks:DNN

بریم سراغ Supervised Learning یا یادگیری با نظارت. تعریف خیلی ساده ریاضی این مفهوم یا تعریفش به زبان فارسی سخت!!! یه جورایی میشه همون curve fitting یا برازش منحنی (نگران نباشید بحثو زیاد ریاضیاتی نمیکنم?). تابع y=f(x) رو درنظر بگیرید (باور کنید زیاد نمیریم سراغ ریاضیات). این تابع به ازای گرفتن هر مقدار ورودی x، یک مقدار خروجی y ارائه میده. مقدار خروجی هم خودش میتونه پیوسته یا گسسته باشه. برای مثال یک تابع که با گرفتن مقدار ولتاژ خروجی از سنسور دما به عنوان ورودی، با عملیات ریاضی مقدار ولتاژ را به دما بر حسب سانتیگراد به عنوان خروجی میده یک تابع با خروجی پیوسته است (زیرا هر مقدار عددی رو به عنوان خروجی میتواند بده) و یک تابع دیگه که با گرفتن مقدار ولتاژ خروجی از سنسور دما به عنوان ورودی، صرفا یکی از اعداد ۱ یا ۲ یا ۳ را به عنوان خروجی میده که هر یک به ترتیب بیانگر سرد، معتدل و گرم بودن محیط میباشد یک تابع با خروجی گسسته است (زیرا هر مقداری را در خروجی نمیده).

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

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

تابعی که معرفی کردیم خیلی ساده است، درحالی که در عمل توابع مورد استفاده که نیاز هست رابطه ریاضی آن کشف بشه خیلی پیچیده ترن. تابع معرفی شده صرفا یک ورودی داشت ولی توابع درعمل تعداد خیلی بیشتری ورودی میگیرند و به ازای آن ها یک خروجی میدهند. مثلا تابعی رو فرض کنید که با گرفتن دما، سرعت باد، شاخص UV و ... در ۱۰۰ نقطه متفاوت از شهر (حداقل ۳۰۰ ورودی)، مقدار بارندگی روز آینده را پیشبینی کرده و به عنوان خروجی بده و یا تابعی که با گرفتن مقدار تک تک پیکسل های یک تصویر (مثلا ۱۰۰۰۰ پیکسل) در خروجی بگه این تصویر یک سگ است یا گربه یا اسب. این نوع از توابع برای یافتن به وسیله روش های کلاسیک برازش خیلی خیلی پیچیده هستن و عملا یافتن اون ها غیر ممکنه.

در اینجا یادگیری ماشین مثل یک قهرمان وارد رینگ میشه?. مثال هایی که در بالا زده شد، از سری مسائل supervised learning هستند که یکی از زیر شاخه های ML است. متد های جدید ML از جمله ANN میتونن پیچیده ترین توابع رو هم با استفاده از تعداد محدود آزمایش کشف کنن یا به عبارتی اون ها رو مدلسازی کنن. البته اکثر متد های ML به سادگی یک تابع جبری رو به عنوان تابع به ما نمیدن، ولی یک شی از مدل در محیط برنامه نویسی تشکیل میدن که کار کرد همون تابع رو داره.

یک مثال از مسائل supervised بخوام بگم، مثلا ۱۰۰۰ عکس از گربه دارید و ۱۰۰۰ عکس از اسب و ۱۰۰۰ عکس از سگ. هر عکس 128x128 پیکسل باشه میشه ۱۶۳۸۴ پیکسل در کل و هر پیکسل شامل سه عدد به عنوان مقادیر RGB هست. یعنی در آخر هرعکس برابر ۴۹۱۵۲ عدد به عنوان ورودی هست. در اصطلاح ML به هر یک از عکس ها یک data point و به هریک از ۴۹۱۵۲ عدد در هر تصویر feature و به اسب یا سگ یا گربه بودن هر عکس، label اون data point گفته میشه. حالا ما به الگوریتم ML تک تک data point ها و label های متناظرشونو میدیم و طی یک پروسه که اصطلاحا training گفته میشه، الگوریتم ما تابع رو مدل میکنه. از این به بعد هر عکس جدیدی که به عنوان ورودی تابع بدیم، تابع به صورت صحیح میگه این عکس از کدوم یکی از اون سه حیوانه. در supervised learning به مسائلی که خروجی اون گسسته باشه (مثل همین مثال)، مسئله classification یا طبقه بندی گفته میشه و به مسائلی که خروجی آن پیوسته است، regression گفته میشه. نمونه ای از مسائل regression، مثال مدل پیشبینی مقدار بارندگی در روز آینده بر اساس اطلاعات محیط کنونی است. برای مثال در ۱۰۰۰ روز گذشته (data point) اطلاعات محیطی از جمله دما، رطوبت و ... (feature) به همراه مقدار بارندگی روز آینده آن ها که مقداری پیوسته است (در مسائل regression برخلاف classification به خروجی تابع به ازای هر data point اصطلاحا target value گفته میشه) ثبت شده. حالا ما به الگوریتم ML تک تک data point ها و target value های متناظرشونو میدیم و با پروسه training تابع میان متغیر های ورودی و خروجی رو مدل میکنه و از این پس با دریافت اطلاعات جدید محیط، مقدار بارندگی را پیشبینی میکنه.

در قسمت بعدی به الگوریتم های پیاده سازی ML خواهیم پرداخت.

برای نوشتن بخش بعدی نیاز دارم بدونم این مطلب چقدر برای مخاطبان قابل فهم بوده و چه جاهایی گنگ بوده. خوشحال میشم به من فیدبک بدید (اعم از خوب و بد). آی دی تلگرام: @amir_daaee

منتظر مطالب بعدی من باشید...

قسمت بعدی: Supervised Learning - قسمت دوم

قسمت پیشین: بیگ دیتا؟ یادگیری ماشین؟ هوش مصنوعی؟