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

اگر پیشزمینه فنی نداشته باشید، ممکن است فکر کنید که نوشتن یک برنامه، به همین راحتی است. ما خواستهمان را میگوییم و ماشین میتواند آن را برآورده کند. اما بر خلاف تصورتان، ماشینها شعور ندارند! ما باید آنها را قدم به قدم راهنمایی کنیم.
دنیای یادگیری ماشین، یک چاقوی همهکارهٔ سوئیسی دارد که برای حل کردن بسیاری از مسائل، از آن استفاده میشود. نام این چاقوی سوئیسی، «الگوریتم گرادیان کاهشی» یا Gradient Descent است. این الگوریتم در سال ۱۸۴۷، توسط آگوستین لویی کوشی، ریاضیدان و فیزیکدان فرانسوی طراحی شده است. در ادامه، توضیح میدهم که این الگوریتم چطور کار میکند.
الگوریتم گرادیان کاهشی و تابع زیان
این الگوریتم درباره مسئله بستنیفروشی به ماشین میگوید:
- یک خط روی صفحه بکش.
- آیا خط در جایگاه بهینه قرار گرفته (کمترین فاصله را با نقاط دارد)؟ اگر این طور است، یعنی به جواب رسیدهای.
- اگر ممکن است جواب بهتری وجود داشته باشد، از قطبنمای ویژهای که در اختیارت قرار دادهام، استفاده کن و اندکی خط را به سمت جایگاه مطلوب، هل بده.
- مرحله دو را تکرار کن.
در واقع به کمک این الگوریتم، ماشین در هر قدم، به میزان مشخصی به خط بهینه نزدیکتر میشود. این روند را تا جایی ادامه میدهد تا خط بهینه را پیدا کند.
الگوریتم بالا، دو جزء کلیدی دارد که باید با آنها آشنا شویم: اول، یک خطکش ویژه است که فاصله خطی را که کشیدهایم، با جایگاه مطلوبش اندازه میگیرد. از این خطکش ویژه، در مرحله ۲ استفاده میکنیم و نامش را «تابع هزینه یا زیان» میگذاریم.
شاید بگویید چرا تابع هزینه؟ زیرا وقتی ماشین اشتباه میکند، باید برایش گران تمام شود! در واقع، میخواهیم هرچقدر که خط، از جایگاه مطلوبش فاصله بیشتری داشت، تابع هزینه (یا همان خطکش ویژه) عدد بزرگتری را نشان دهد. با کوچک شدن تابع هزینه یا زیان، میفهمیم که در مسیر درستی قرار گرفتهایم.
جزء کلیدی دوم، یک قطبنمای ویژه است. اگر دقت کرده باشید، در واقع ما با یک مسئله بهینهسازی طرف هستیم: حالت بهینه زمانی اتفاق میافتد که خطکش ویژه ما، کمترین مقدار را نشان بدهد. از قطبنما انتظار داریم به ما نشان دهد که خط را به چه سمتی حرکت دهیم، تا خطکش مقدار کمتری را نشان دهد.
نام این قطبنما را «گرادیان کاهشی» گذاشتهاند. به زبان ساده، گرادیان کاهشی قطبنمای ماشین برای رسیدن به نقطه بهینه است. نام الگوریتم هم برگرفته از همین قطبنمای ویژه است.
البته، همه چیز به این سادگی هم نیست. الگوریتم گرادیان کاهشی، ریزهکاریهای فراوانی دارد که ممکن است هر کدام، روی سرعت رسیدن به جواب اثر بگذارند یا حتی، جواب مسئله را به کلی از دسترس الگوریتم دور کنند. خیلی وقتها، مسائل به قدری پیچیده میشود که تعریف کردن تابع هزینه، بسیار دشوار میشود.
چرا گرادیان کاهشی، یک چاقوی همهکاره است؟
در یادگیری ماشین، هنر دیتا ساینتیستها این است که مسائل را به گونهای تعریف کنند که توسط الگوریتم گرادیان کاهشی، قابلحل باشد؛ به عبارت دیگر، مسئله ما باید به یک مسئله بهینهسازی تبدیل شود. در مثال بستنیفروشی، دیدیم که چطور موضوع پیدا کردن خطی که از بین نقاط عبور میکند، تبدیل به یک مسئله بهینهسازی شد.
به ازای هر مسئله جدید، ما نیاز به یک خطکش جدید و یک قطبنمای جدید داریم. خطکش به ما میگوید که فاصلهمان با وضعیت مطلوب چقدر است و قطبنما میگوید که برای رسیدن به وضعیت بهینه، در کدام جهت باید حرکت کنیم.
بنابراین اگر بتوانیم هر مسئلهای را – مانند مثال بستنیفروشی – در قالب یک مسئله بهینهسازی تعریف کنیم، چاقوی همهکاره، همچنان به کارمان میآید.
این تعریف کلیتری از الگوریتم گرادیان کاهشی است که به موضوع بستنیفروشی، وابسته نیست و به طور کلی، برای حل مسائل بهینهسازی به کار میرود:
- یک پاسخ اولیه برای مسئلهات انتخاب کن.
- آیا این پاسخ، بهترین پاسخ ممکن است؟ اگر بله، یعنی به نتیجه رسیدهای.
- اگر احتمال میدهی پاسخ بهتری وجود دارد، از قطبنمای جادویی که در اختیارت گذاشتهام استفاده کن و اندکی در جهت بهبود، پاسخ را تغییر بده.
- مرحله دو را تکرار کن.
کلیدواژههای مهم
بعد از خواندن این مطلب، سعی کنید این کلیدواژهها/مفاهیم را به خاطر بسپارید:
- گرادیان کاهشی | Gradient Descent
- تابع زیان | Loss function
آنچه خواندید، بخشی از سلسله مطالبی درباره یادگیری ماشین است. این نوشتهها مخصوص مدیران و افراد غیرفنی است که میخواهند، بدون ورود به جزئیات، از هوش مصنوعی و یادگیری ماشین سر در بیاورند.
میتوانید به نوشته قبلی برگردید و با یادگیری ماشین آشنا شوید. در نوشتههای بعدی، این مباحث را ادامه خواهم داد.
نوشتههای روزانه من را درباره محصول، فناوری و کسبوکار در تلگرام دنبال کنید!
دیدگاهتان را بنویسید