گرادیان نزولی (کاهشی) برای یادگیری ماشین

بهینه ­سازی، بخش بزرگی از یادگیری ماشین هستش. تقریبا هر الگوریتم یادگیری ماشین یک الگوریتم بهینه سازی در بطن خودش داره.

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

گرادیان نزولی (کاهشی) چیه؟

  • چطور میشه از گرادیان کاهشی در الگوریتم هایی مثل رگرسیون خطی استفاده کرد؟
  • چطور میشه گرادیان کاهشی رو در مجموعه داده های بسیار بزرگ اسکیل بندی کرد؟
  • چه نکاتی برای بیشترین بهره بردن از گرادیان کاهشی وجود داره؟

گرادیان نزولی (کاهشی)

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

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

درک گرادیان کاهشی

به یک کاسه بزرگ فکر کنید، مثل چیزی که غلات یا میوه رو توش میزارید. این کاسه یک نمودار تابع هزینه (f) هستش.

یک موقعیت تصادفی روی سطح کاسه، هزینه مقادیر فعلی ضرایب (هزینه)، و کف کاسه هزینه بهترین مجموعه از ضرایب، یعنی حداقل تابع، هستش.

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

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

روند گرادیان نزولی

این روش با مقادیر اولیه ضریب یا ضرایب برای تابع شروع میشه. اینها می تونن 0.0 یا یک مقدار تصادفی کوچیک باشن.

coefficient = 0.0

هزینه ضرایب با اتصال اونها به تابع و محاسبه هزینه ارزیابی میشه.

cost = f(coefficient)

یا

cost = evaluate(f(coefficient))

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

delta = derivative(cost)

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

coefficient = coefficient – (alpha * delta)

این فرآیند تا وقتی که هزینه ضرایب (cost) 0.0 یا به اندازه کافی به صفر نزدیک بشه تا به اندازه کافی خوب باشه، تکرار میشه.

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

گرادیان نزولی (کاهشی) دسته ای (Batch) برای یادگیری ماشین

هدف همه الگوریتم‌ های یادگیری ماشینی تحت نظارت، بهترین تخمین یک تابع هدف (f) هستش که داده‌ های ورودی (X) رو بر روی متغیرهای خروجی (Y) ترسیم می‌کنه. این، همه مشکلات طبقه­ بندی و رگرسیون رو توصیف می کنه.

بعضی از الگوریتم های یادگیری ماشین ضرایبی دارن که برآورد الگوریتم ها رو برای تابع هدف (f) مشخص می­کنه. الگوریتم ‌های مختلف بازنمایی ها و ضرایب متفاوتی دارن، اما خیلی از اونها به فرآیند بهینه‌ سازی برای پیدا کردن مجموعه‌ ای از ضرایب نیاز دارن که منجر به بهترین تخمین تابع هدف میشه.

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

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

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

هزینه برای یک الگوریتم یادگیری ماشین در کل مجموعه داده آموزشی برای هر تکرار الگوریتم گرادیان کاهشی محاسبه میشه. به یک تکرار از الگوریتم یک دسته (بچ) گفته میشه و این شکل گرادیان کاهشی، گرادیان کاهشی دسته ای (Batch gradient descent) هستش.

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

گرادیان کاهشی تصادفی برای یادگیری ماشین

اجرای گرادیان کاهشی ممکنه در مجموعه داده های بسیار بزرگ، کند باشه.

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

در شرایطی که داده های زیادی دارید، می تونید از یک مدل گرادیان کاهشی به اسم گرادیان کاهشی تصادفی استفاده کنید.

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

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

روال آپدیت برای ضرایب مثل همونیه که در بالا گفته شد، با این تفاوت که هزینه در تمام الگوهای آموزشی خلاصه نمیشه، بلکه برای یک الگوی آموزشی محاسبه میشه.

یادگیری ممکنه با گرادیان کاهشی تصادفی برای مجموعه داده های آموزشی خیلی سریعتر باشه و اغلب شما فقط به تعداد کمی از گذرها از مجموعه داده نیاز دارید تا به مجموعه ای از ضرایب خوب یا کافی برسید؛ به عنوان مثال، 1 تا 10 از مجموعه داده گذر می کنه.

نکاتی برای گرادیان نزولی (کاهشی)

در این بخش چند نکته و ترفند برای استفاده حداکثری از الگوریتم گرادیان کاهشی برای یادگیری ماشین آورده شده.

  • هزینه پلات (Plot Cost) در مقابل زمان: مقادیر هزینه محاسبه شده توسط الگوریتم در هر تکرار رو جمع آوری و ترسیم کنید. مساله مورد انتظار از اجرای گرادیان کاهشی خوب، یک کاهش هزینه در هر تکراره. اگه کاهش پیدا نکرد، سعی کنید سرعت یادگیری رو کم کنید.
  • نرخ یادگیری: مقدار نرخ یادگیری یک مقدار واقعی کوچیک مثل 0.1، 0.001 یا 0.0001 هستش. مقادیر مختلف رو برای مشکلتون امتحان کنید و ببینید کدومیک بهتر عمل می کنه.
  • ورودی ‌های مقیاس مجدد: اگه شکل تابع هزینه منحرف و مخدوش نشه، الگوریتم سریع ‌تر به حداقل هزینه می ‌رسه. شما می تونید با تغییر مقیاس همه متغیرهای ورودی (X) به همون محدوده، مثل         [0, 1] یا [-1, 1] به این هدف برسید.
  • گذرهای اندک: گرادیان کاهشی تصادفی اغلب به بیش از 1 تا 10 گذر از مجموعه داده آموزشی نیاز نداره تا روی ضرایب خوب یا کافی خوب همگرا بشه.
  • هزینه میانگین پلات: آپدیت ‌های هر نمونه مجموعه داده آموزشی ممکنه منجر به یک نمودار آشفته از هزینه در طول زمان حین استفاده از گرادیان کاهشی تصادفی بشه. در نظر گرفتن میانگین بیش از 10، 100 یا 1000 آپدیت می تونه ایده بهتری از روند یادگیری الگوریتم به شما بده.

خلاصه

در این پست شما گرادیان کاهشی برای یادگیری ماشین رو کشف کردید. شما یاد گرفتید که:

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

آیا در مورد گرادیان کاهشی برای یادگیری ماشین یا این پست سؤالی دارید؟ کامنت بذارید و سوال خودتون رو بپرسید و من تمام تلاش خودم رو می کنم تا بهشون جواب بدم.  



دیدگاه‌ خود را بنویسید

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