بازی های جالب آندروید

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

۱۹ مهر ۱۳۹۶

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

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

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

یادگیری ماشینی یک حوزهٔ همواره در حال گسترش است و آنچه در این مقاله مد نظر خواهیم داشت، نگاهی به روش‌های رایج در یادگیری ماشینی که در ۳ بخش یادگیری Supervised (نظارت‌شده)، Unsupervised (نظارت‌نشده) و  Reinforcement (تقویت شده) تقسیم‌بندی می‌شوند خواهیم انداخت و پس از آن رویکردهای الگوریتمی معمول در یادگیری ماشینی را مورد بررسی قرار خواهیم پرداخت. همچنین در انتها، نقاط قوت هر یک از  معمول‌ترین زبان‌های مورد استفاده در یادگیری ماشینی را نیز مورد بررسی قرار خواهیم داد.

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

Supervised Learning (یادگیری نظارت‌شده)
به منظور آموزش الگوریتم یادگیری در یادگیری نظارت‌شده، دیتایی به عنوان ورودی اولیه در اختیار کامپیوتر قرار می‌گیرد که قبلاً -توسط عامل انسانی- با خروجی مطلوب و مورد انتظار، به اصطلاح Labeled (برچسب‌زده) شده‌ است. بنابراین ورودی‌ها و خروجی‌های مطلوب متناظر با آنها به صورت جفت‌های ورودی/خروجی در اختیار کامپیوتر قرار می‌گیرند.

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

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

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

یکی از کاربردهای رایج یادگیری نظارت‌شده زمانی است که با استفاده از اطلاعات قدیمی، قرار است اتفاقات آیندهٔ نزدیک مورد پیش‌بینی قرار گیرند. به عنوان مثال، با این روش می‌توان اطلاعات چند ماه یا چند هفتهٔ اخیر بازار سهام را برای پیش‌بینی نواسانات بازار در هفته‌ها و ماه‌های آتی مورد استفاده قرار داد. یک نمونهٔ دیگر استفاده از این الگوریتم نیز در تشخیص ایمیل‌های اسپم (هرزنامه) از غیر اسپم است. از جمله الگوریتم‌های یادگیری نظارت‌شده می‌توان به Regression ،Decision Tree ،Random Forest ،KNN و Logistic Regression اشاره نمود.

Unsupervised Learning (یادگیری نظارت‌نشده)
در یادگیری نظارت‌نشده، دیتای ورودی فاقد هرگونه برچسبی است و از این رو الگوریتم یادگیری به دنبال مشابهت‌ها و ویژگی‌های مشترک دیتای ورودی می‌گردد. از آنجا که داده‌های بدون برچسب معمول‌تر و فراگیرتر از داده‌های برچسب‌دار هستند، این روش یادگیری از اهمیت ویژه‌ای برخوردار است.

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

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

در مثال فوق، با به‌کارگیری الگوریتم یادگیری Unsupervised، ممکن است در نهایت مشخص شود که مثلاً خانم‌هایی که در یک بازهٔ سنی خاص قرار دارند و صابون بدون‌بو خریداری نموده‌اند،‌ احتمالاً باردار هستند. بدین ترتیب با شناسایی این الگو  -از آنجا که این مشتریان احتمالاً به محصولات مرتبط با دوران بارداری و پس از بارداری نیاز دارند- اگر پیشنهادات مرتبط با بارداری و مراقبت نوزاد نیز در اختیار این دسته از مشتریان قرار گیرد، احتمال خرید این محصولات بالاتر خواهد رفت. Apriori algorithm و K-means مثال‌هایی از الگوریتم‌های یادگیری نظارت‌نشده هستند.

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

برای روشن‌تر شدن مطلب و به عنوان یک مثال کاربردی، می‌توان یک روبات فوتبالیست را در نظر گرفت که با قرار گرفتن در موقعیت‌های مختلف و اتخاذ تصمیم‌های متناسب با این موقعیت‌ها و رفع تدریجی خطاهای خود، سرانجام می‌آموزد که در هر موقعیتی درست‌ترین تصمیم را بگیرد. از Markov Decision Process می‌توان به عنوان یکی از الگوریتم‌های یادگیری به اصطلاح Reinforcement اشاره کرد.

ارتباط Machine Learning (یادگیری ماشینی) و Statistics (آمار) 
از آنجا که مقولهٔ یادگیری ماشینی ارتباط نزدیکی با آمار دارد، آشنایی با مفاهیم آماری در درک و به کارگیری الگوریتم‌های یادگیری ماشینی نقش به‌سزایی خواهد داشت. از این رو قبل از مطرح نمودن رایج‌ترین الگوریتم‌های یادگیری ماشینی، توضیح مختصری در مورد ۲ مفهوم آماری Correlation (همبستگی) و Regression (رگرسیون) ارائه خواهیم داد.

Correlation (همبستگی) عبارت است از میزان وابستگی دو متغییر نسبت به یکدیگر؛ همبستگی با ضریبی به نام ضریب همبستگی پیرسون نشان داده می‌شود که مقدار آن عددی مابین ۱ و ۱- است. ضریب همبستگی ۰ میان دو پارامتر به این معنا است که این پارامترها هیچ‌گونه وابستگی نسبت به یکدیگر ندارند. هر چقدر ضریب همبستگی دو پارامتر از ۰ دورتر باشد، به معنای این است که تغییرات دو پارامتر، وابستگی بیشتری به یکدیگر دارند.

مثبت بودن ضریب همبستگی هم به این معنا است که اگر یکی از دو پارامتر افزایش یابد، دیگری نیز افزایش خواهد یافت و اگر یکی از آن‌ها کاهش یابد، دیگری نیز کاهش خواهد یافت. منفی بودن ضریب همبستگی نیز به معنای وابستگی معکوس میان دو پارامتر است؛ به عبارت دیگر، اگر یکی از آن‌ها کاهش پیدا کند دیگری افزایش می‌یابد و اگر یکی افزایش پیدا کند دیگری کاهش خواهد یافت. به عنوان مثال همبستگی میان قد و وزن انسان‌ها، معمولاً یک همبستگی مثبت است و هر چه قد افراد بلندتر باشد، وزن آن‌ها نیز بیشتر است (البته همواره استثناءهایی وجود خواهد داشت).

Regression در لغت به معنای «بازگشت» است؛ هنگامی که دو متغیر با یکدیگر  همبستگی بالایی داشته باشند، رگرسیون به عنوان یک پارامتر آماری، پیش‌بینی و بیان تغییرات یک متغیر بر اساس تغییرات متغیر دیگر را امکان‌پذیر می‌سازد (برای آشنایی بیشتر با برخی مفاهیم آماری و آشنایی با نحوهٔ کدنویسی عملی در این خصوص، توصیه می‌کنیم به مقالهٔ درآمدی بر آمار با استفاده از لایبرری NumPy و زبان برنامه‌نویسی Python مراجعه نمایید).

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

K-nearest neighbor (نزدیک‌ترین همسایه)
الگوریتم K-nearest Neighbor که معمولاً‌ به طور خلاصه K-NN خوانده می‌شود، یک مدل شناسایی الگو است که هم در مورد طبقه‌بندی و هم در مورد تعیین رگرسیون داده‌ها قابل استفاده است. برای استفاده از این الگوریتم لازم است تا یک مجموعهٔ داده و یک معیار برای محاسبهٔ شباهت‌ها در دست داشته باشیم (همچنین مقدار K نیز باید تعیین شود). K در این الگوریتم یک عدد صحیح مثبت و معمولاً کوچک است و این در حالی است که معمولاً در نظر گرفتن مقادیر فرد برای K مناسب‌تر است. برای روشن‌تر شدن مطلب به این مثال توجه کنید.

در نمودار زیر ۲ دسته شکل وجود دارد، یکی مربع‌های آبی‌ رنگ و دیگری ستاره‌های نارنجی‌ رنگ. این اشکال در دو دستهٔ مجزا طبقه‌بندی شده‌اند که این دسته‌ها عبارتند از دستهٔ مربع و دسته‌ٔ ستاره:

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

فرض کنیم مانند آنچه که در نمودار زیر دیده می شود، یک دادهٔ جدید به مجموعهٔ داده‌ها اضافه شود (که در اینجا به شکل قلب سبز رنگ نشان داده شده است):

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

حال می‌خواهیم با استفاده از الگوریتم K-NN، این دادهٔ جدید را در یکی از دو دستهٔ‌ موجود قرار دهیم. حال اگر K را برابر با ۳ در نظر بگیریم، این بدین معنا است که به الگوریتم گفته‌ایم که ۳ تا از نزدیک‌ترین همسایه‌های این دادهٔ‌ جدید را شناسایی کرده و سپس با توجه به اینکه در بین این ۳ مورد اعضای کدام دسته غالب است، دادهٔ جدید را در همان دسته قرار بده. با توجه به نمودار زیر می‌بینیم که نزدیک‌ترین همسایه‌های این دادهٔ جدید عبارتند از ۲ ستاره و ۱ مربع؛ بنابراین این دادهٔ جدید در دستهٔ ستاره طبقه‌بندی خواهد شد:

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

Decision tree (درخت تصمیم‌گیری)
در کاربرد‌های عمومی، درخت تصمیم‌گیری به منظور نمایش دادن روند تصمیم‌گیری مورد استفاده قرار می‌گیرد اما این رویکرد در یادگیری ماشینی و کار با داده‌ها به عنوان یک مدل پیش‌بینی به کار می‌رود. هدف از به کار بردن درخت تصمیم‌گیری، ایجاد مدلی است که بتواند بر مبنای داده‌های ورودی، تصمیم مورد نظر را اتخاذ نماید.

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

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

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


همان‌طور که در تصویر فوق مشاهده می‌شود، هنگامی که پاسخ Yes و یا No مشخص شود، شاخه‌ها دیگر به شاخه‌های جدیدی تقسیم نخواهند شد.

Deep learning (یادگیری ژرف)
رویکرد یادگیری ژرف تلاش می‌کند تا نحوهٔ درک محرک‌های دیداری و شنیداری توسط انسان را شبیه‌سازی نماید. ساختار یادگیری ژرف که از شبکه‌های عصبی زنده الهام گرفته شده است شامل چندین لایه از شبکه‌های عصبی مصنوعی است که از CPU و GPU (واحد پردازش گرافیکی) و دیگر سخت‌افزارها تشکیل شده‌اند.

در این رویکرد از لایه‌های متعدد تبدیلات خطی به منظور پردازش سیگنال‌های حسی (مانند صدا و تصویر) استفاده می‌شود و به این ترتیب ماشین مفاهیم پیچیده‌تر را برای خود به مفاهیم ساده‌تر تبدیل می‌نماید. لازم به ذکر است که در یادگیری ژرف، الگوریتم‌ها می‌‌توانند نظارت‌شده و یا نظارت‌نشده باشند.

امروزه یادگیری ژرف در برخی موارد به هوش انسان بسیار نزدیک شده و از همین روی چنین رویکردی یکی از حوزه‌های مهم هوش مصنوعی به حساب می‌آید. از نمونه‌های کاربردی یادگیری ژرف می‌توان به Computer Vision (بینایی کامپیوتری) و Speech Recognition (تشخیص گفتار) و … اشاره نمود.

زبان‌های برنامه‌نویسی مورد استفاده در یادگیری ماشینی
به نظر می‌رسد که زبان برنامه‌نویسی Python مناسب‌ترین زبان برای مقاصد یادگیری ماشینی باشد و پس از آن می‌توان زبان‌های R ،Java و ++C را جزو گزینه‌های بعدی در نظر گرفت.

محبوبیت پایتون در زمینهٔ یادگیری ماشینی شاید به دلیل افزایش اخیر در تنوع فریمورک‌های یادگیری ژرف برای این زبان (مانند TensorFlow ،PyTorch و Keras) باشد. همچنین دلایلی مانند سینتکس ساده و خوانایی این زبان و قابلیت استفاده به عنوان یک زبان اسکریپ‌نویسی در این امر بی‌تأثیر نبوده‌ است. از دیگر عوامل محبوبیت این زبان در زمینه‌ٔ هوش مصنوعی، می‌توان به قدرت و سرعت آن در کار با داده‌ها و تحلیل داده‌ها اشاره نمود. مثلاً Scikit-learn که بر مبنای پکیج‌های Numby، SciPy و Matolotlib ایجاد شده، یکی از لایبرری‌های پایتون برای استفاده در زمینهٔ یادگیری ماشینی است (برای شروع یادگیری زبان Python،‌ به دورهٔ آموزش آنلاین و رایگان پایتون در بازی های جالب مراجعه نمایید).

زبان برنامه‌نویسی جاوا نیز زبانی است که توسط بسیاری از برنامه‌نویسان در سطوح تجاری و همچنین توسط برخی از برنامه‌نویسان با هدف پیاده‌سازی الگوریتم‌های یادگیری ماشینی در پروژه‌های خود مورد استفاده قرار می‌گیرد. هرچند این زبان برای دولوپرهایی که به‌ تازگی شروع به یادگیری آن نموده‌اند زبان مناسبی برای اهداف یادگیری ماشینی نیست، اما برای دولوپرهایی که تسلط خوبی بر این زبان دارند، انتخاب بسیار مناسبی است. زبان جاوا در برخی زمینه‌های یادگیری ماشینی مانند امنیت شبکه، تشخیص تقلب و کلاهبرداری و همچنبن حفاظت در مقابل حمله‌های سایبری از زبان پایتون نیز پرکاربردتر است. از جمله لایبرری‌‌های این حوزه‌ هم می‌توان به Deeplearning4j و MALLET برای مقاصد یادگیری ماشینی با زبان جاوا اشاره کرد (برای شروع یادگیری زبان برنامه‌نویسی Java، به دورهٔ آموزش آنلاین و رایگان جاوا در بازی های جالب مراجعه نمایید).

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

++C نیز یکی از زبان‌های مناسب برای استفاده در حوزهٔ یادگیری ماشینی و هوش مصنوعی -در زمینه‌هایی مانند ساخت بازی و روبات- است. توسعه‌دهندگان سخت‌افزار سیستم‌های Embedded و مهندسان الکترونیک، به دلیل کارایی زبان‌هایی مانند C و یا ++C بیشتر به استفاده از این زبان‌ها در یادگیری ماشینی علاقمندند چرا که این دو زبان به زبان ماشین (صفر و یک) نزدیک‌تر بوده و می‌توانند ارتباط بهتری با سخت‌افزار ایجاد کنند. برخی از لایبری‌های مورد استفاده در هوش مصنوعی مناسب برای زبان ++C عبارتند از mlpack ،Dlib و Shark.

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

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

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

منبع