یادگیری ماشینی (Machine Learning) یکی از زیرشاخههای هوش مصنوعی (Artificial Intelligence) بوده و این در حالی است که یکی از اهداف یادگیری ماشینی درک ساختار دیتا و سپس قرار دادن دیتا در مدلهایی است که برای سیستم قابلفهم و استفاده باشد. در واقع، اگر سیستمی بتواند به صورت خودکار از محیط پیرامونش درس گرفته و عملکرد خود را بهبود بخشد، میگوییم یادگیری توسط آن سیستم صورت گرفته است.
هرچند یادگیری ماشینی یکی از رشتههای علوم کامپیوتر است، اما با روشهای محاسباتی مرسوم و رایج در این علم تفاوتهایی دارا است. در روشهای محاسباتی رایج، الگوریتمها به صورت مجموعهای از دستورات صریح و مشخص به منظور انجام محاسبات و یا حل مسئله و با هدف اجرا در کامپیوترها نوشته میشوند اما در یادگیری ماشینی سیستمها با دریافت ورودیهای مختلف و انجام تحلیلهای آماری برای ایجاد خروجیهایی در یک بازهٔ آماری مشخص، خود اقدام به یادگیری میکنند و از همین روی یادگیری ماشینی این امکان را برای کامپیوترها فراهم میکند تا پس از دریافت دیتای نمونه و مدلسازی آن، به طور خودکار قادر به انجام فرایند Decision Making (تصمیمگیری) در مورد دادههای ورودی جدید باشند.
امروزه در اغلب تکنولوژیها از یادگیری ماشینی استفاده میشود. برای مثال، میتوان به تکنولوژی تشخیص چهره، تکنولوژی تبدیل تصویر به متن و … اشاره نمود و به عنوان نمونه کاربردهای پیشرفتهتر هم میتوان به خودروهای خودران (بدون راننده) اشاره کرد که قادر هستند با استفاده از یادگیری ماشینی مسیریابی انجام دهند و در حین رانندگی تصمیمی درست اتخاذ کنند.
سه روش رایج در یادگیری ماشین
یادگیری ماشینی یک حوزهٔ همواره در حال گسترش است و آنچه در این مقاله مد نظر خواهیم داشت، نگاهی به روشهای رایج در یادگیری ماشین خواهیم انداخت که در سه بخش یادگیری Supervised (نظارتشده)، Unsupervised (نظارتنشده) و Reinforcement (تقویت شده) تقسیمبندی میشوند و پس از آن رویکردهای الگوریتمی معمول در یادگیری ماشینی را مورد بررسی قرار میدهیم و در انتها هم نقاط قوت هر یک از معمولترین زبانهای مورد استفاده در یادگیری ماشینی را نیز مورد بررسی قرار خواهیم داد.
در یادگیری ماشینی، تَسکها بر مبنای روش یادگیری و یا به عبارتی بر اساس نحوهٔ فیدبکدهی به سیستم در حین یادگیری در چند گروه عمده تقسیمبندی میشوند. به طور کلی، سه روش اصلی در یادگیری ماشینی مورد استفاده قرار میگیرد که عبارتند از:
1. Supervised Learning (یادگیری نظارتشده)
به منظور آموزش الگوریتم در یادگیری نظارتشده، دیتایی به عنوان ورودی اولیه در اختیار سیستم قرار میگیرد که قبلاً توسط عامل انسانی با خروجی مطلوب و مورد انتظار به اصطلاح Labeled (برچسبزده) شده است و از همین روی ورودیها و خروجیهای مطلوب متناظر با آنها به صورت جفتهای ورودی/خروجی در اختیار سیستم قرار میگیرند.
هدف از ارائهٔ این جفتهای ورودی/خروجی این است که الگوریتم با مقایسهٔ پاسخ درست که از پیش تعیین شده است و پاسخی که خود پیشبینی کرده، خطاهای موجود را شناسایی کند و به این ترتیب برای ایجاد خروجیهای بعدی آموزش دیده و مدل مورد استفادهٔ خود را بر اساس این آموزشها اصلاح نماید و فرایند آموزش تا زمانی که مدل پیشبینی الگوریتم به دقت کافی برسد و نتایج پیشبینی با نتیجهٔ از قبل تعیین شده یکسان باشند ادامه خواهد یافت و از همین روی در یادگیری نظارتشده سیستم پس از آموزش دیدن و با استفاده از الگوهایی که در طی آموزش ایجاد نموده، قادر خواهد بود تا در مواجهه با دیتای به اصطلاح Unlabeled (بدون برچسب)، خروجی مناسب را پیشبینی نماید (از جمله الگوریتمهای یادگیری نظارتشده میتوان به Regression ،Decision Tree ،Random Forest ،KNN و Logistic Regression اشاره نمود.)
به عنوان مثال، فرض کنید در این روش الگوریتم یادگیری با تصاویری از ماهی و تصاویری از اقیانوس که به ترتیب تحت عنوان Fish و Ocean برچسبدار شدهاند، مورد آموزش قرار گیرد. این الگوریتم پس از آموزش دیدن با این تصاویر و برچسبها، قادر خواهد بود تا تصاویر بدون برچسب ماهی و اقیانوس را به ترتیب به عنوان Fish و Ocean مورد شناسایی قرار داده و این تصاویر را با برچسب تصاویری که با آنها آموزش دیده یکسان قلمداد کند.
یکی از کاربردهای رایج یادگیری نظارتشده زمانی است که با استفاده از اطلاعات گذشته قرار است اتفاقات آیندهٔ نزدیک مورد پیشبینی قرار گیرند. به عنوان مثال، با این روش میتوان اطلاعات چند ماه یا چند هفتهٔ اخیر بازار سهام را برای پیشبینی نواسانات بازار در هفتهها و ماههای آتی مورد استفاده قرار داد. یک نمونهٔ دیگر استفاده از این الگوریتم نیز در تشخیص ایمیلهای اسپم (هرزنامه) از غیر اسپم است.
2. Unsupervised Learning (یادگیری نظارتنشده)
در یادگیری نظارتنشده، دیتای ورودی فاقد هرگونه برچسب است و از همین روی هم الگوریتم یادگیری به دنبال مشابهتها و ویژگیهای مشترک دیتای ورودی میگردد و از آنجا که دادههای بدون برچسب معمولتر و فراگیرتر از دادههای برچسبدار هستند، این روش یادگیری از اهمیت ویژهای برخوردار است. به عبارتی، هدف یادگیری نظارتنشده شناسایی الگویهای پنهان موجود در مجموعهٔ دادههای فاقد برچسب است. در واقع، با استفاده از الگوریتمهای یادگیری نظارتنشده، سیستم قادر خواهد بود تا ویژگیهای دادههای مختلف را شناسایی نموده و از این ویژگیها برای دستهبندی دادههای مد نظر استفاده نماید.
این روش یادگیری عمدتاً در مورد دادههای تجاری مورد استفاده قرار میگیرد. به عنوان مثال، ممکن است مجموعهای از اطلاعات مشتریهای یک شرکت شامل مشخصات فردی آنها و فهرست خریدهای ایشان در دسترس باشد. هر چند این اطلاعات ممکن است جامع و کامل باشند، اما شناسایی الگوی موجود در این دادهها حداقل به راحتی امکانپذیر نیست و برای تشخیص الگوی پنهان موجود در چنین دادههایی میتوان آنها را به یک الگوریتم یادگیری به اصطلاح Unsupervised وارد نمود (Apriori algorithm و K-means مثالهایی از الگوریتمهای یادگیری نظارتنشده هستند.)
در مثال فوق، با بهکارگیری الگوریتم یادگیری نظارتنشده ممکن است در نهایت مشخص شود که مثلاً خانمهایی که در یک بازهٔ سنی خاص قرار دارند و صابون بدونبو خریداری نمودهاند، احتمالاً باردار هستند. بدین ترتیب با شناسایی این الگو و از آنجا که این مشتریان احتمالاً به محصولات مرتبط با دوران بارداری و پس از بارداری نیاز دارند، اگر پیشنهادات مرتبط با بارداری و مراقبت نوزاد نیز در اختیار این دسته از مشتریان قرار گیرد، احتمال خرید این محصولات بالاتر خواهد رفت.
3. Reinforcement Learning (یادگیری تقویتی)
در یادگیری تقویتی، الگوریتم با وارد شدن به چرخه آزمون و خطا میآموزد که تصمیمات مشخصی را اتخاذ نماید و به این ترتیب با توجه به تصمیمات قبلی، پیشبینیها و تصمیمات بعدی خود را اصلاح نموده و به طور پیوسته در حال آموختن است (Markov Decision Process یکی از الگوریتمهای یادگیری تقویتی است.)
برای روشنتر شدن مطلب و به عنوان یک مثال کاربردی، میتوان ربات فوتبالیستی را در نظر گرفت که با قرار گرفتن در موقعیتهای مختلف و اتخاذ تصمیمهای متناسب با این موقعیتها و رفع تدریجی خطاهای خود، سرانجام میآموزد که در هر موقعیتی درستترین تصمیم را برای شوت زدن بگیرد.
درآمدی بر ارتباط مابین یادگیری ماشینی و آمار
از آنجا که مقولهٔ یادگیری ماشینی ارتباط نزدیکی با آمار دارد، آشنایی با مفاهیم آماری در درک و بهکارگیری الگوریتمهای یادگیری ماشینی نقش بهسزایی خواهد داشت و از همین روی قبل از مطرح نمودن رایجترین الگوریتمهای یادگیری ماشینی، توضیح مختصری در مورد دو مفهوم آماری Correlation (همبستگی) و Regression (رگرسیون) ارائه خواهیم داد.
Correlation (همبستگی) عبارت است از میزان وابستگی دو متغییر نسبت به یکدیگر که با ضریبی به نام ضریب همبستگی نشان داده میشود که مقدار آن عددی مابین ۱ و ۱- است. ضریب همبستگی ۰ میان دو پارامتر به این معنا است که این پارامترها هیچگونه وابستگی نسبت به یکدیگر ندارند و هر چهقدر ضریب همبستگی دو پارامتر از ۰ دورتر باشد، به معنای این است که تغییرات دو پارامتر وابستگی بیشتری به یکدیگر دارند.
مثبت بودن ضریب همبستگی هم به این معنا است که اگر یکی از دو پارامتر افزایش یابد، دیگری نیز افزایش خواهد یافت و اگر یکی از آنها کاهش یابد، دیگری نیز کاهش خواهد یافت اما منفی بودن ضریب همبستگی به معنای وابستگی معکوس میان دو پارامتر است. به عبارت دیگر، اگر یکی از آنها کاهش پیدا کند، دیگری افزایش مییابد و اگر یکی افزایش پیدا کند، دیگری کاهش خواهد یافت. به عنوان مثال، همبستگی میان قد و وزن انسانها معمولاً یک همبستگی مثبت است و هر چه قد افراد بلندتر باشد، وزن آنها نیز بیشتر است (البته همواره استثناءهایی وجود خواهد داشت.)
Regression در لغت به معنای «بازگشت» است. هنگامی که دو متغیر با یکدیگر همبستگی بالایی داشته باشند، رگرسیون پیشبینی و بیان تغییرات یک متغیر بر اساس تغییرات متغیر دیگر را امکانپذیر میسازد (برای آشنایی بیشتر با برخی مفاهیم آماری توصیه می کنیم به دوره آموزش مقدماتی آمار در پایتون مراجعه نمایید.)
آشنایی با الگوریتمهای کاربردی در یادگیری ماشین
الگوریتمها و رویکردهای بهکاررفته در یادگیری ماشینی همواره در حال تغییر و پیشرفت هستند که در ادامه چند مورد از مرسومترین آنها را مورد بررسی قرار دادهایم.
K-nearest Neighbor (نزدیکترین همسایه)
این الگوریتم یک مدل شناسایی الگو است که هم در مورد طبقهبندی و هم در مورد تعیین رگرسیون دادهها قابلاستفاده است. برای استفاده از این الگوریتم لازم است تا یک مجموعهٔ داده و یک معیار برای محاسبهٔ شباهتها در دست داشته باشیم (همچنین مقدار K نیز باید تعیین شود.) K در این الگوریتم یک عدد صحیح مثبت و معمولاً کوچک است و این در حالی است که معمولاً در نظر گرفتن مقادیر فرد برای K مناسبتر است. برای روشنتر شدن مطلب به این مثال توجه کنید.
در نمودار زیر دو دسته وجود دارد؛ یکی مربعهای آبی رنگ و دیگری ستارههای نارنجی رنگ. این اشکال در دو دستهٔ مجزا طبقهبندی شدهاند که این دستهها عبارتند از دستهٔ مربع و دستهٔ ستاره:
فرض کنیم مانند آنچه که در نمودار زیر دیده می شود، یک دادهٔ جدید به مجموعهٔ دادهها اضافه شود که در اینجا به شکل قلب سبز رنگ نشان داده شده است:
حال میخواهیم با استفاده از الگوریتم K-NN، این دادهٔ جدید را در یکی از دو دستهٔ موجود قرار دهیم. اگر K را برابر با ۳ در نظر بگیریم، این بدین معنا است که به الگوریتم گفتهایم که ۳ مورد از نزدیکترین همسایههای این دادهٔ جدید را شناسایی کرده و سپس با توجه به اینکه در بین این ۳ مورد اعضای کدام دسته غالب است، دادهٔ جدید را در همان دسته قرار بدهد. با توجه به نمودار زیر میبینیم که نزدیکترین همسایههای این دادهٔ جدید عبارتند از ۲ ستاره و ۱ مربع و از همین روی این دیتای جدید در دستهٔ ستاره طبقهبندی خواهد شد:
Decision Tree (درخت تصمیم)
در کاربردهای عمومی، درخت تصمیم به منظور نمایش دادن روند تصمیمگیری مورد استفاده قرار میگیرد اما این رویکرد در یادگیری ماشینی و کار با دادهها به عنوان یک مدل پیشبینی نیز به کار میرود. هدف از بهکارگیری درخت تصمیم ایجاد مدلی است که بتواند بر مبنای دادههای ورودی، تصمیم مورد نظر را اتخاذ نماید. به عبارتی، در درخت تصمیم دادهٔ اصلی بر مبنای شرایط مختلف به زیرشاخههایی تقسیم میشود و این زیرشاخهها نیز بسته به شرایط فرعیتر به زیرشاخههای دیگری تقسیم میشوند و پروسهٔ تقسیم شدن تا زمانی ادامه مییابد که در یکی از شاخهها، نتیجهٔ ایجاد شده با نتیجهٔ مورد نظر برابر شود.
به مثال زیر که بسیار ساده و ابتدایی بوده و صرفاً جهت روشن شدن مطلب ارائه شده است دقت کنید. در این مثال، یک درخت تصمیم ساده رسم شده است که میتواند در مورد رفتن یا نرفتن به ماهیگیری تصمیم بگیرد. این درخت بر اساس شرایط مؤثر در تعیین آبوهوا به سه زیرشاخه و سپس به زیرشاخههای دیگری تقسیم شده است:
همانطور که در تصویر فوق مشاهده میشود، هنگامی که پاسخ Yes و یا No مشخص شود، شاخهها دیگر به شاخههای جدیدی تقسیم نخواهند شد چرا که به هدف دست یافتهایم.
💎💎 در مورد تفاوتهای یادگیری ماشین، هوش مصنوعی و یادگیری عمیق در مقالهی مربوطه به صورت مفصل توضیح داده شده است.
زبانهای برنامهنویسی مورد استفاده در یادگیری ماشین
به نظر میرسد که زبان برنامهنویسی Python مناسبترین زبان برای پیادهسازی الگوریتمهای یادگیری ماشینی باشد و پس از آن میتوان زبانهای R ،Java و ++C را جزو گزینههای بعدی در نظر گرفت.
- پایتون: محبوبیت این زبان در زمینهٔ یادگیری ماشینی شاید به دلیل افزایش تنوع فریمورکهای مرتبط با هوش مصنوعی برای این زبان باشد که از آن جمله میتوان به TensorFlow ،PyTorch و Keras اشاره کرد. همچنین دلایلی مانند سینتکس سادهٔ زبان پایتون در محبوب بودنش بیتأثیر نبوده است. از دیگر عوامل محبوبیت این زبان در زمینهٔ هوش مصنوعی میتوان به قدرت و سرعت آن در کار با دادهها و تحلیل دادهها اشاره نمود. مثلاً Scikit-learn که بر مبنای پکیجهای Numby، SciPy و Matolotlib توسعه یافته است، یکی از لایبرریهای پایتون برای استفاده در زمینهٔ یادگیری ماشینی است (برای شروع یادگیری این زبان میتوانید به دورهٔ آموزش آنلاین و رایگان پایتون در سکان آکادمی مراجعه نمایید.)
- جاوا: زبان برنامهنویسی جاوا نیز توسط بسیاری از برنامهنویسان در سطوح تجاری و همچنین توسط برخی از برنامهنویسان با هدف پیادهسازی الگوریتمهای یادگیری ماشینی در پروژههای خود مورد استفاده قرار میگیرد. هر چند این زبان برای دولوپرهایی که به تازگی شروع به یادگیری آن نمودهاند زبان مناسبی برای اهداف یادگیری ماشینی نیست، اما برای دولوپرهایی که تسلط خوبی بر این زبان دارند انتخاب خوبی تلقی میگردد. زبان جاوا در برخی زمینههای یادگیری ماشینی مانند امنیت شبکه، تشخیص تقلب و کلاهبرداری و همچنین حفاظت در مقابل حملههای سایبری کاربرد دارد و از جمله لایبرریهای این حوزه هم میتوان به Deeplearning4j و MALLET اشاره کرد (برای شروع یادگیری زبان برنامهنویسی جاوا میتوانید به دورهٔ آموزش آنلاین و رایگان جاوا در سکان آکادمی مراجعه نمایید.)
- آر: زبان آر که ابتدا به ساکن با اهداف محاسبات آماری مورد استفاده قرار میگرفت به مرور در میان دولوپرها به محبوبیت رسید و در محافل دانشگاهی نیز محبوبیت بالایی به دست آورد. هر چند این زبان در محیطهای صنعتی کاربرد زیادی ندارد اما به دلیل پررنگتر شدن اهمیت دادهکاوی، شاهد کاربرد بیش از پیش آن در اپلیکیشنهای صنعتی هم هستیم. برای استفاده از این زبان در یادگیری ماشینی میتوان پکیجهایی مانند caret ،randomForest و e1071 را به کار برد.
- سیپلاسپلاس: این زبان نیز یکی از ابزارهای مناسب برای استفاده در حوزهٔ یادگیری ماشینی و هوش مصنوعی در زمینههایی مانند ساخت گیم و ربات است. توسعهدهندگان سختافزار سیستمهای اِمبِدد و مهندسان الکترونیک هم به دلیل کارایی زبانهایی مانند C و یا ++C، بیشتر به استفاده از این زبانها در یادگیری ماشینی علاقمندند چرا که این دو زبان به زبان ماشین (صفر و یک) نزدیکتر بوده و میتوانند ارتباط بهتری با سختافزار ایجاد کنند. برخی از لایبریهای مورد استفاده در هوش مصنوعی مناسب برای زبان ++C هم عبارتند از mlpack ،Dlib و Shark.
علاوه بر زبانهای فوقالذکر، زبانهای دیگری هم هستند که در حوزه ماشین لرنینگ یا همان یادگیری ماشین مورد توجه قرار گرفتهاند که برای آشنایی بیشتر با آنها میتوانید به مقالهٔ معرفی زبانهای برنامهنویسی مناسب برای یادگیری ماشینی مراجعه نمایید. همچنین جهت آشنایی با فریمورکهای رایج در این حوزه، میتوانید به مقالهٔ معرفی برخی فریمورکهای یادگیری ماشینی برای پایتون مراجعه نمایید.
نتیجهگیری
یادگیری ماشین و به طور کلی فناوری هوش مصنوعی امروزه جایگاه مهمی در علوم کامپیوتر به خود اختصاص داده و روز به روز در حال گستردهتر شدن و پیشرفت است. از آنجا که یادگیری ماشینی و جنبههای مختلف آن مقولهای بسیار گسترده است، در این مقاله به ذکر خلاصهای از مفاهیم، کاربردها، روشها، رویکردها و زبانهای مورد استفاده در یادگیری ماشینی بسنده نمودیم.
- دکتر سیدمصطفی کلامی هریس: یکی از دو بنیانگذار سازمان علمی-آموزشی فرادرس
- دکتر اسماعیل آتشپز گرگری: متخصص هوشمصنوعی، داده کاوی و دانش داده
- دکتر محمود کریمیان: متخصص در حوزهٔ هوش مصنوعی
- علی امیری: متخصص هوش مصنوعی و یادگیری ماشینی در گوگل
- نغمه غزاله: دکترای نوروساینس، متخصص ماشین لرنینگ و دیتا ساینس
- مصطفی اجللوییان: متخصص یادگیری ژرف، پردازش متن و پردازش زبان طبیعی
اگر علاقمند به کسب اطلاعات بیشتر پیرامون هوش مصنوعی، یادگیری ماشینی و دیگر حوزههای وابسته هستید، توصیه میکنیم به پادکستهای فوق از رادیو فولاستک سکان آکادمی که با متخصصین ایرانی این حوزه ضبط شدهاند نیز مراجعه نمایید.