یادگیری ماشین به زبان ساده – بخش اول (سری صفر تا قهرمان)

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

قبل از این که شروع کنیم، قصد دارم از آدام گایتگی (Adam Geitgey) تشکر کنم که درخواست من برای گرفتن حق امتیاز ترجمه مقالاتش در سایت Medium را با روی خوش پذیرفت و حتی در ابتدای مقاله اولش لینک این صفحه را قرار داد.

.   .   .

می‌شنوید که مردم در مورد یادگیری ماشین صحبت می‌کنند ولی ایده خاصی در مورد این که واقعاً چه چیزی هست ندارید؟ آیا از این که هنگام بحث‌ با دوستان و همکاران نمی‌توانید نظری در این مورد بدهید خسته شدید؟ پس بیایید تغییرش بدهیم.

.   .   .

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

هدف این است که هر کسی به سادگی متوجه بشود، و این یعنی که مفاهیم به صورت کلی بیان خواهد شد. اما چه ایرادی دارد؟ اگر این مطالب باعث بشود حتی یک نفر بیشتر به یادگیری ماشین علاقمند شود، ما مأموریتمان را انجام داده‌ایم.

.   .   .

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

یادگیری ماشین (Machine Learning) یعنی این که الگوریتم‌هایی وجود دارند که بدون نیاز به نوشتن کد اختصاصی برای مجموعه‌ای از داده‌ها، می‌توانند اطلاعات جالبی در مورد آن‌ها به ما بگویند. به جای نوشتن کد، داده‌ها را به عنوان ورودی به این الگوریتم‌ها می‌دهیم و الگوریتم بر مبنای داده‌ها خودش منطق خودش را می‌سازد.

برای مثال، یکی از این الگوریتم‌ها، الگوریتم دسته‌بندی (classification) است که می‌تواند داده‌ها را در گروه‌های مختلفی قرار دهد. از همان الگوریتم دسته‌بندی که اعداد را در دست خط انسان تشخیص می‌دهد، می‌توان برای دسته‌بندی ایمیل‌ها به دو دسته هرزنامه و غیرهرزنامه نیز استفاده کرد، بدون این که لازم باشد حتی یک خط کد را تغییر دهیم. این همان الگوریتم است با این تفاوت که مجموعه داده‌های آموزشی (training data set) متفاوتی به آن داده شده. بنابراین منطق دسته‌بندی نهایی نیز متفاوت خواهد بود.

در مورد مجموعه آموزشی که از این به بعد مجموعه train صدایش می‌کنیم، بعداً بیشتر توضیح می‌دهم، ولی فعلاً در همین حد بدانید که مجموعه‌ای از داده‌ها است که الگوریتم را با آن آموزش می‌دهیم تا بدون این که لازم باشد ما کار خاصی انجام دهیم، خودش یاد بگیرد. هر چقدر این مجموعه بزرگتر باشد، یادگیری بهتر و دقیق‌تر انجام می‌شود.

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

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

«یادگیری ماشین» اصطلاحی است که مثل یک چتر انواع این الگوریتم‌ها را پوشش می‌دهد.

دو نوع مختلف الگوریتم‌های یادگیری ماشین

اکثر الگوریتم‌های یادگیری ماشین را می‌توان در یکی از این دو دسته اصلی قرار داد: یادگیری بانظارت (Supervised Learning) و یادگیری بدون نظارت (Unsupervised Learning). تفاوت این دو ساده ولی بسیار مهم است.

یادگیری با نظارت

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

برای کمک به کارآموزها (و شاید ایجاد فرصتی برای کمی استراحت بیشتر)، تصمیم می‌گیرید یک برنامه بنویسید که بر اساس اندازه، محله و دیگر مشخصات خانه‌های مشابهی که تا کنون فروخته شده، قیمت هر خانه را تخمین بزند.

سپس شما به مدت سه ماه اطلاعات هر خانه‌ای که در نزدیکی شما فروخته می‌شود را یادداشت می‌کنید. اطلاعاتی مانند: تعداد اتاق خواب، مساحت، محله‌ای که خانه در آن قرار دارد و از همه مهمتر قیمتی که فروخته شده.

این همان مجموعه train ما است.

این همان مجموعه train ما است.

با استفاده از این مجموعه train، می‌خواهیم برنامه‌ای بنویسیم که تخمین بزند هر خانه دیگری در اطراف شما چقدر ارزش دارد:

می‌خواهیم به کمک مجموعه train قیمت خانه‌های دیگر را پیش‌بینی کنیم.

می‌خواهیم به کمک مجموعه train قیمت خانه‌های دیگر را پیش‌بینی کنیم.

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

برای ساخت برنامه، مجموعه train را به عنوان ورودی به الگوریتم یادگیری ماشین می‌دهیم. الگوریتم در تلاش است تا بفهمد چه نوع ریاضیاتی به کار رفته تا این اعداد به دست بیاید.

این مشابه این است که در امتحان ریاضی جواب مسئله‌ها را داشته باشیم ولی عملگر بین اعداد مجهول باشد.

اوه نه! یک دانش‌آموز علامت عملگرها را از کلید تصحیح معلم پاک کرده!

اوه نه! یک دانش‌آموز علامت عملگرها را از کلید تصحیح معلم پاک کرده!

آیا با استفاده از چیزی که موجود است می‌توانید حدس بزنید سوال‌های امتحان چه بوده؟ شما می‌دانید باید کاری با اعداد سمت چپ انجام دهیم تا به جواب سمت راست برسیم.

در یادگیری بانظارت، شما از کامپیوتر می‌خواهید تا این ارتباط را برای شما پیدا کند. و یک بار که ریاضیات به کار رفته برای این مسئله را پیدا کنید، می‌توانید به هر مسئله دیگر از این نوع نیز پاسخ دهید!

یادگیری بدون نظارت

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

حتی اگر در تلاش برای پیش‌بینی یک عدد ناشناس (مثل قیمت) نباشید، باز هم می‌توان با استفاده از یادگیری ماشین کاری کرد.

حتی اگر در تلاش برای پیش‌بینی یک عدد ناشناس (مثل قیمت) نباشید، باز هم می‌توان با استفاده از یادگیری ماشین کاری کرد.

این مثل وقتی است که یک نفر کاغذی به شما بدهد که روی آن تعدادی عدد نوشته شده و بگوید: «من هیچ نظری ندارم که این عددها چه معنی و مفهومی دارند ولی شاید تو بتوانی الگو، گروه‌بندی یا چیزی پیدا کنی. موفق باشی!»

ولی با این داده‌ها چه کار می‌توان کرد؟ برای شروع، می‌شود یک الگوریتم استفاده کرد که به صورت خودکار دسته‌بندی‌های مختلف بازار را روی داده شما شناسایی کند. شاید شما متوجه شوید که خریداران خانه نزدیک به دانشگاه، خانه‌های کوچک با اتاق‌های زیاد دوست دارند ولی خریداران خانه در اطراف شهر، خانه‌های سه خوابه ولی بزرگ دوست دارند. دانستن انواع مشتری‌ها می‌تواند کمک کند بازاریابی بهتری داشته باشید.

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

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

نکته: انواع دیگری از الگوریتم‌های یادگیری ماشین نیز وجود دارد. ولی فعلاً برای شروع از پرداختن به آن‌ها صرف نظر می‌کنیم.

جالبه، ولی آیا توانایی حدس زدن قیمت یک خانه، واقعاً یادگیری به حساب می‌آید؟

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

اما الگوریتم‌های یادگیری ماشین فعلی هنوز اینقدر قوی نیستند و فقط وقتی کار می‌کنند که بر روی مسائل محدود و کاملاً مشخصی متمرکز باشند. شاید معنی بهتر برای یادگیری در حال حاضر «یافتن یک معادله برای حل مسئله‌ای مشخص بر اساس تعدادی داده نمونه» باشد.

متأسفانه این تعریف زیاد جالب نیست. برای همین ما از عبارت «یادگیری ماشین» استفاده می‌کنیم.

البته اگر شما ۵۰ سال آینده این متن را می‌خوانید احتمالاً الگوریتم‌های هوش مصنوعی قوی کشف شده و این مقاله کمی عجیب به نظر می‌رسد. پس نیازی نیست ادامه‌ آن را بخوانید و بهتر است به ربات خود بگویید به جای آن یک ساندویچ برای شما آماده کند، ای انسان آینده.

بیاید آن برنامه را بنویسیم!

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

اگر هیچ چیزی از یادگیری ماشین نمی‌دانستید احتمالاً تلاش می‌کردید تا قوانین ساده‌ای برای تخمین قیمت یک خانه مانند این بنویسید:

 

اگر ساعت‌ها وقت صرف این کد کنید احتمالاً در نهایت به برنامه‌ای می‌رسید که تا حدی درست کار می‌کند، ولی هیچ گاه کامل و عالی نیست و با تغییر قیمت‌ها همه چیز به هم می‌ریزد.

بهتر نیست به کامپیوتر اجازه دهیم خودش نحوه پیاده‌سازی این تابع را پیدا کند؟ تا وقتی درست جواب بدهد چه اهمیتی دارد چگونه این کار را می‌کند:

 

یک راه برای نگاه کردن به این مسئله این است که فاکتور قیمت را مانند غذای خوشمزه‌ای در نظر بگیریم که مواد اولیه برای تهیه آن تعداد اتاق‌ها، مساحت و محله آن هستند. اگر می‌دانستید هر فاکتور به چه اندازه روی قیمت نهایی تأثیر می‌گذارد، احتمالاً می‌توانستید نسبت دقیق مواد اولیه را برای تهیه این غذا بدست آورید.

این کار تابع اصلی شما (با آن همه if و else) را تا چیزی در این حد ساده می‌کند:

 

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

یک روش احمقانه برای پیدا کردن وزن‌ها این است:

گام اول:

در ابتدا همه وزن‌ها را برابر ۱.۰ قرار دهید:

 

گام دوم:

به ازای خانه‌هایی که اطلاعات آن‌ها را از قبل داریم، هزینه نهایی را با وزن گفته شده محاسبه کنید و ببینید چقدر با هزینه واقعی اختلاف دارد:

از تابعی که نوشتید برای تخمین قیمت هر خانه استفاده کنید.

از تابعی که نوشتید برای تخمین قیمت هر خانه استفاده کنید.

برای مثال، اگر خانه اول به مبلغ ۲۵۰ هزار دلار به فروش رفته ولی تابع شما عدد ۱۷۸ هزار را تخمین زد، شما ۷۲ هزار دلار اختلاف (خطا) دارید.

حالا مربع میزان اختلاف را به ازای همه خانه‌های مجموعه train جمع بزنید. فرض کنید ۵۰۰ خانه در مجموعه شما وجود داشته و مجموعی که برای اختلاف‌ها به دست آوردید عدد ۸۶,۱۲۳,۳۷۳ دلار را نشان می‌دهد. این یعنی تابع شما در حال حاضر چقدر «اشتباه» است.

حالا، مجموع به دست آمده را بر ۵۰۰ تقسیم کنید تا میانگین اختلاف به ازای هر خانه مشخص شود. این مقدار میانگین، هزینه تابع شما است.

اگر بتوانید با تغییر وزن‌ها، این هزینه را به صفر برسانید، تابع شما عالی کار خواهد کرد. این یعنی در همه شرایط قبلی تابع شما قیمت نهایی را کاملاً دقیق تخمین زده است. پس هدف ما همین است که با امتحان کردن وزن‌های مختلف، هزینه تابع را تا کمترین حد ممکن کاهش دهیم.

گام سوم:

گام دوم را به ازای انواع ترکیب‌های ممکن وزن‌ها بارها و بارها تکرار کنید. وقتی به حالتی رسیدید که هزینه تابع به صفر نزدیک شد، شما مسئله را حل کرده‌اید!

زمان انفجار ذهن

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

اما در ادامه چند نکته را بررسی می‌کنیم که واقعاً می‌تواند ذهن شما را منفجر کند:

  1. تحقیقات در بسیاری از زمینه‌ها در ۴۰ سال گذشته نشان داده‌اند که این الگوریتم‌های یادگیری عمومی مشابه کاری که انجام دادیم، در مواقعی که نیاز است قوانین مشخص ارائه شود، نسبت به انسان عملکرد بهتری دارند. حتی احمقانه‌ترین روش یادگیری ماشین هم می‌تواند انسان‌های متخصص را شکست دهد!
  2. تابعی که شما نوشتید واقعاً احمقانه بود. چون حتی نمی‌دانست واحد مساحت و اتاق خواب چیست! تنها چیزی که می‌دانست این بود که باید مقدار مشخصی از آن اعداد را با هم ترکیب کند تا به جواب درست برسد.
  3. احتمالاً شما هیچ ایده‌ای ندارید که چرا مجموعه‌ای مشخص از وزن‌ها درست کار می‌کند. بنابراین شما تابعی نوشتید که نمی‌دانید چطور کار می‌کند ولی می‌توانید ثابت کنید که درست کار می‌کند!
  4. تصور کنید به جای مساحت و تعداد اتاق‌ها، تابع تخمین شما آرایه‌ای از اعداد را به عنوان ورودی می‌گرفت. برای مثال فرض کنید هر کدام از این اعداد میزان روشنایی یک پیکسل از یک تصویر گرفته‌شده توسط دوربین نصب‌شده روی ماشین باشد، خروجی تابع را «میزان زاویه چرخش فرمان خودرو» نام‌گذاری کنید. به همین راحتی شما برنامه‌ یک اتومبیل خودران را نوشتید!

جالبه، این طور نیست؟

اما بخش مربوط به «هر عدد ممکن را امتحان کنید» چه می‌شود؟

بله، البته که نمی‌شود هر ترکیب ممکن از وزن‌ها را امتحان کرد. این کار به معنای واقعی کلمه تا ابد طول خواهد کشید زیرا هیچ وقت اعداد تمام نخواهند شد.

برای جلوگیری از این اتفاق، ریاضی‌دان‌ها روش‌های هوشمندانه‌ای معرفی کرده‌اند که به کمک آن‌ها می‌توان به سرعت مقادیر مناسب وزن‌ها را بدون امتحان کردن تعداد خیلی زیادی از اعداد به دست آورد. یکی از این روش‌ها را در ادامه می‌بینیم:

ابتدا، معادله ساده‌ای برای محاسبه هزینه در گام دوم می‌نویسیم:

این همان تابع هزینه شما است.

این همان تابع هزینه شما است.

حالا بیایید همین معادله را به صورت دیگری طبق ریاضیات یادگیری ماشین (که فعلاً از پرداختن به جزئیات آن صرف نظر می‌کنیم) بنویسیم:

θ نماینده وزن‌های فعلی شما است. J(θ) یعنی هزینه به ازای این مجموعه از وزن‌ها.

θ نماینده وزن‌های فعلی شما است. و (j(θ یعنی هزینه به ازای این مجموعه از وزن‌ها.

این معادله نشان می‌دهد تابع تخمین قیمت ما به ازای وزن‌های فعلی تا چه حد اشتباه است.

اگر ما نمودار این معادله هزینه را به ازای تمام مقادیر وزن‌ها برای تعداد اتاق‌ها و مساحت را رسم کنیم، به نموداری شبیه به شکل زیر می‌رسیم:

نمودار تابع هزینه شبیه به یک کاسه است. محور عمودی بیانگر هزینه می‌باشد.

نمودار تابع هزینه شبیه به یک کاسه است. محور عمودی بیانگر هزینه می‌باشد.

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

بنابراین کافی است ما وزن‌ها را طوری تغییر دهیم که روی این نمودار به سمت پایین حرکت کنیم تا به پایین‌ترین نقطه برسیم. به این ترتیب نیازی نیست اعداد زیادی را امتحان کنیم.

اگر چیزی از ریاضیات به یاد داشته باشید، می‌دانید که با مشتق گرفتن از یک تابع، شیب منحنی در هر نقطه به دست می‌آید. به این روش می‌توان متوجه شد که روی نمودار به کدام سمت در حال حرکت هستیم.

پس اگر مشتق جزئی تابع هزینه را به ازای هر یک از وزن‌ها محاسبه کنیم، می‌توانیم مقدار آن را از هر وزن کم کنیم. و این یک قدم ما را به پایین منحنی نزدیک می‌کند. با ادامه دادن این کار، در نهایت به پایین‌ترین نقطه نمودار می‌رسیم و بهترین مقادیر را به ازای وزن‌ها خواهیم داشت. (اگر چیزی متوجه نشدید نگران نباشید و به خواندن ادامه دهید).

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

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

درسته، برای راحتی بیشتر از بعضی مسائل صرف نظر کردیم

الگوریتم سه مرحله‌ای که توضیح دادم رگرسیون خطی چندمتغیره نام دارد. در واقع شما معادله خطی که از روی نقاط داده‌های مربوط به خانه عبور می‌کند را تخمین می‌زنید. سپس از این معادله استفاده می‌کنید تا براساس محل قرارگیری نقاط، قیمت فروش خانه‌هایی که قبلاً ندیده‌اید را حدس بزنید. این ایده واقعاً قدرتمندی است که به کمک آن می‌توانید مسائل “واقعی” را حل کنید.

روشی که با هم دیدیم ممکن است در مثال‌های ساده جواب بدهد، ولی پاسخگوی همه مسائل نیست. یک دلیل آن این است که معمولاً قیمت خانه‌ها به این سادگی از روی یک خط پیوسته به دست نمی‌آید.

اما خوشبختانه راه‌های زیادی برای حل این مشکل هست. الگوریتم‌های یادگیری ماشین فراوان دیگری برای استفاده در داده‌های غیرخطی داریم (مانند شبکه‌های عصبی یا SVMها به همراه kernel). همچنین راه‌های دیگری هم هست که اجازه می‌دهد از رگرسیون خطی هوشمندانه‌تر استفاده کنیم و اجازه می‌دهد خطوط پیچیده‌تری را برازش یا به اصطلاح fit کنیم. با این حال در همه موارد، همچنان ایده اصلی این است که بهترین وزن‌ها را پیدا کنیم.

همچنین، من از مشکل بیش‌برازش (overfitting) صرف نظر کردم. این که وزن‌ها را طوری تعیین کنیم که همیشه برای داده‌های موجود در مجموعه اصلی جواب بدهد، کار ساده‌ای است. اما ممکن است هیچ گاه برای خانه‌های جدید که اطلاعاتشان در مجموعه اصلی موجود نبود، کار نکند. برای این مشکل هم راه حل‌هایی وجود دارد (مانند Regularization و استفاده از مجموعه داده cross-validation). یادگرفتن چگونگی کنار آمدن با این مشکل یکی از اساسی‌ترین گام‌های پیاده‌سازی موفق الگوریتم‌های یادگیری ماشین است.

به عبارت دیگر، در حالی که مفهوم اصلی بسیار ساده است، مهارت و تجربه نیاز است تا یادگیری ماشین را اعمال کنیم و نتایج مفید بگیریم. اما این مهارتی است که هر توسعه‌دهنده‌ای می‌تواند یاد بگیرد!

آیا یادگیری ماشین جادو است؟

یک بار که ببینید تکنیک‌های یادگیری ماشین به چه راحتی روی مسائل خیلی دشوار (مانند تشخیص دست خط) اعمال می‌شوند، حس می‌کنید راهی پیدا کرده‌اید که به شرط داشتن داده کافی هر مسئله‌ای را حل می‌کند. کافی است داده‌ها را وارد کنید و نگاه کنید کامپیوتر چطور جادوگرانه معادله متناسب با آن داده‌ها را کشف می‌کند!

اما یادتان باشد یادگیری ماشین تنها زمانی کار می‌کند که مسئله با داده‌هایی که دارید واقعاً قابل حل باشد.

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

تنها رابطه‌هایی را می‌توان مدلسازی کرد که واقعاً وجود داشته باشند.

تنها رابطه‌هایی را می‌توان مدلسازی کرد که واقعاً وجود داشته باشند.

پس به یاد داشته باشید، اگر یک انسان متخصص نمی‌تواند با داده‌ها به صورت دستی  مسئله را حل کند، کامپیوتر هم احتمالاً نمی‌تواند. به جای این، روی مسائلی تمرکز کنید که انسان می‌تواند حل کند، ولی چقدر خوب می‌شود اگر کامپیوتر با سرعت و دقت خیلی بیشتری این کار را انجام دهد.

چطور در مورد یادگیری ماشین بیشتر یاد بگیریم؟

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

دوره آموزشی رایگان آقای اندرو نگ (Andrew Ng) در سایت Coursera فوق‌العاده است. من شدیداً توصیه می‌کنم از این جا شروع کنید. این دوره برای هر کسی با حداقل دانش از علوم کامپیوتر و ریاضیات مناسب است.

همچنین، می‌توانید صدها الگوریتم یادگیری ماشین را با دانلود و نصب بسته SciKit-Learn برای پایتون ببینید و امتحان کنید.

.   .   .

 


جزییات این مطلب:

نویسنده : کورش سلیمانی

منبع رسمی : وبسایت صفر تا فهرمان

0 پاسخ ها

دیدگاه خود را ثبت کنید

آیا می خواهید به بحث بپیوندید؟
در صورت تمایل از راهنمایی رایگان ما استفاده کنید!!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *