نزول گرادیان یا گرادیان کاهشی برای مبتدیان
چکیده
این وبلاگ بهطور کامل دربارهی نزول گرادیان است. موضوعات ابتدایی شامل رگرسیون خطی، بهینهسازی تابع هزینه و نرخ یادگیری بهگونهای مطرح میشوند که از زبان ریاضی و جبر خطی پیچیده پرهیز شود. در این آموزش، موضوع نزول گرادیان دستهای که بر روی کل دادهها محاسبه میگردد، بررسی میشود؛ سپس نزول گرادیان تصادفی که گرادیان را فقط بر روی نقطه فعلی محاسبه میکند، معرفی و در نهایت نزول گرادیان مینی-بچ که ترکیبی از دو روش پیشین است، پوشش داده میشود.
پس از بررسی الگوریتمهای مختلف و نقاط قوت و ضعف آنها، این آموزش به معرفی چند روش برای مقابله با این مشکلات میپردازد. مومنتوم و آداگراد به عنوان روشهایی تحلیل میشوند که نرخ یادگیری را تغییر میدهند تا نقاط ضعف الگوریتم نزول گرادیان را جبران کنند.
انگیزه
دلیل ایجاد این آموزش آن است که در تحقیقات انجام شده متوجه شدیم بسیاری از آموزشهای موجود به شدت وابسته به درک عمیق جبر خطی هستند. بنابراین، این آموزشها با استفاده از مفاهیمی مانند ماتریسها و ضرب نقطهای ارائه میشوند که درک و تجسم آنها آسان نیست. لذا، ما این آموزش را بر اساس تشبیه و تصویرسازی ایجاد کردیم تا مفاهیم بهصورت واضح و قابل فهم مطرح شود.
معرفی و پیشزمینه
رگرسیون خطی
قبل از ورود به بحث در مورد نزول گرادیان، لازم است رگرسیون خطی را مطرح کنیم. این سادهترین نوع رگرسیون است که افراد با آن آشنایی دارند. هدف آن اطمینان از تطابق یک خط با یک مجموعه داده است. این روش مدلسازی دادهها برای نمایش همبستگیهای بین متغیرها بسیار مؤثر است. با این حال، این روش تنها زمانی کار میکند که دادهها بهطور خطی توزیع شده باشند. اگر دادهها غیرخطی باشند، این نوع رگرسیون مدل مناسب برای تطبیق آنها نخواهد بود. دو پارامتری که ما در مدل تغییر میدهیم شامل شیب و تقاطع خط هستند. نزول گرادیان به دنبال تغییر و بهینهسازی این دو پارامتر است.
بهینهسازی
تعریف بهینهسازی چیست؟ بهطور بنیادی، بهینهسازی به معنای بهینهتر کردن چیزی یا استفاده از منبع یا شرایط به بهترین شکل ممکن است. در زمینه علم داده، ما تلاش میکنیم مدل خود را به گونهای تنظیم کنیم که بهینهترین مدل را با کمترین میزان "هزینه" ارائه دهد. این هزینه به عنوان فاصله بین پیشبینی مدل ما و نقطه داده واقعی تعریف میشود. هزینهها میتوانند بهصورت توابع بصریسازی شوند — به همین دلیل است که به آنها "توابع هزینه" میگویند — که به ما کمک میکند تصمیماتی در مورد پارامترهایی که بهترین کاهش این مقدار را دارند، بگیریم. به منظور سادگی، این آموزش عمدتاً بر روی هزینه مربعی تمرکز خواهد کرد. این هزینه با مربع کردن تفاوت بین نقطه داده واقعی و پیشبینی ما محاسبه میشود. هدف اصلی نزول گرادیان، یافتن نقطهای در تابع هزینه است که در آن شیب برابر صفر باشد. "چرا؟" ممکن است بپرسید. بیایید به این موضوع از طریق یک تشبیه نزدیک شویم.
با توجه به تصویر بالا از یک تابع هزینه مربعی (بر روی شکل تمرکز کنید)، تصور کنید که این نشاندهنده یادگیری ما در طول سال تحصیلی است. هنگامی که شروع به یادگیری میکنیم، هنوز مفهومی جدید نیاموختهایم و بنابراین شیب ما در جهت نزولی بزرگ است، که نشان میدهد ما به سرعت یاد میگیریم و ذهنمان مفاهیم را به خوبی جذب میکند. تا پایان ترم بهار، همه چیزهایی که میتوانستهایم یاد بگیریم را آموختهایم و از آنجا که در تعطیلات تابستان هستیم، شروع به فراموش کردن مفاهیمی میکنیم که آموختهایم، بنابراین شیب ما در حال افزایش است و به سطح بالایی میرسد. نقطهای که ما از کسب دانش به از دست دادن دانش منتقل میشویم، نقطهای است که ما در بهترین حالت یادگیری خود قرار داریم. این نقطه، هدف اصلی نزول گرادیان است.
تشبیه
قبل از ورود به بحث نزول گرادیان، بیایید یک تشبیه معرفی کنیم که در طول آموزش وجود خواهد داشت. تصور کنید که در بالای یک کوه قرار دارید، چشمهایتان بسته است و گم شدهاید. شما باید راهی برای پایین آمدن پیدا کنید تا زنده بمانید. تنها ابزاری که دارید، ابزاری است که شیب کوه را با استفاده از یکی از سه روش اندازهگیری کرده و سپس به شما میگوید کجا قدم بگذارید و چند قدم بردارید. هدف شما این است که در ایمنترین و کارآمدترین راه ممکن به پایین کوه برسید.
اشکال نزول گرادیان
نزول گرادیان دستهای (ونلا)
نزول گرادیان دستهای چیست؟ اگر به تشبیه کوه بازگردیم، نزول گرادیان دستهای مشابه گم شدن در بالای کوه و تلاش برای یافتن بهترین راه برای پایین آمدن است. برای برگشت به قاعده، ابزار باید دادههای کل کوه را بگیرد تا گرادیان را محاسبه کرده و تعیین کند که حرکت بعدی شما چیست. این بهترین شکل با مثالی توضیح داده میشود که در آن از رگرسیون خطی به عنوان مدل و مجموع مربعات باقیمانده به عنوان تابع هزینه برای انطباق دادهها استفاده میشود. در زیر فرمولی ارائه میشود که نزول گرادیان دستهای از آن برای پیشبینی بعدی به سمت یک نقطه بهینه که تابع هزینه را به حداقل میرساند، استفاده مینماید. با توجه به اینکه از رگرسیون خطی به عنوان مثال استفاده میکنیم، تلاش میکنیم که مقادیر شیب و تقاطع خود را بهگونهای بهینه کنیم تا مدلی پیدا کنیم که هزینه ما را به حداقل برساند.
فرمول: 𝜃 = 𝜃₀ — η × ▽ᶿ𝑱(𝜃)
𝜃 : پارامترهای دادههای آموزشی
η : نرخ یادگیری
▽ᶿ𝑱 : گرادیان (مشتق جزئی)
معایب نزول گرادیان دستهای شامل کندی و مصرف بالای انرژی آن است. انتخاب نرخ یادگیری اهمیت زیادی دارد زیرا تعیین میکند که نزول گرادیان دستهای چهقدر زمان نیاز دارد تا ارزش بهینه را پیدا کرده و هزینه را به حداقل برساند. این انتخاب معمولاً به صورت دستی و از طریق آزمایش و خطا انجام میشود. برگردیم به تشبیه کوه؛ انتخاب بین یک نرخ یادگیری بسیار بالا و بسیار پایین به معنای اسکی کردن از لبه یک صخره در مقابل پایین آمدن به آرامی از کوه است. اگر از لبه کوه اسکی کنید، به جایی خواهید رفت، اما ممکن است آنجا مناسب نباشد؛ و باید بارها تلاش کنید تا به مقصد برسید.
اگر با نرخی بالا حرکت کنید، گامهای بزرگی در سراشیبی هزینهتان خواهید برداشت، اما ممکن است به هدف نرسید. در طرف دیگر، اگر به آرامی پایین بیایید و هر مسیر برای نشانههایی از بازگشت به کمپ را بررسی کنید، در نهایت راه خود را پیدا خواهید کرد، اما این فرآیند زمانبر است و انرژی زیادی مصرف میکند. نرخهای یادگیری پایین شما را به کمینه محلی میرسانند، مگر آنکه قبل از رسیدن به آنجا از زمان یا انرژی خود خالی شوید.
نزول گرادیان تصادفی
حال به نزول گرادیان تصادفی (SGD) میپردازیم و بیایید تشبیه کوه را با یک تغییر کوچک دوباره تجزیه و تحلیل کنیم. حال فرض کنید که کوه شدیداً برفی است و این موضوع باعث میشود که ابزار تنها شیب قدم فعلی شما را نشان دهد. در این صورت چگونه از کوه پایین خواهید آمد؟ یکی از راهها این است که به جای استفاده از اطلاعات کل وضعیت کوه برای محاسبه قدم بعدی به روش نزول گرادیان معمولی، فقط از اطلاعات شیب قدم فعلی استفاده کنید تا حدس بزنید باید کجا قدم بگذارید. طبق الگوریتم عمومی نزول گرادیان، این به این معنی است که نزول گرادیان تصادفی پارامترها را نقطه به نقطه بهروزرسانی خواهد کرد، به جای اینکه آن را بر روی تمام دادهها بهروز کند.
فرمول: 𝜃 = 𝜃₀ — η × ▽ᶿ𝑱(𝜃, 𝑥ⁱ, 𝑦ⁱ)
𝑥ⁱ، 𝑦ⁱ : نقطه داده فعلی
یکی از پیامدهای این موضوع این است که حرکات فردی در SGD پُرسروصدا خواهند بود، اما این به این معنی است که الگوریتم واریانس بیشتری داشته و به روزرسانیها بهصورت مکرر اتفاق میافتند. این موضوع باعث میشود که SGD در پذیرش دادههای در حال تغییر مداوم بیشتر سازگار باشد؛ زیرا اگر یک نقطه تغییر کند، نیازی به محاسبه مجدد تمام گرادیانها نیست و شما تنها کافی است گرادیان نقطه جدید را محاسبه کنید. همچنین، این نوسانات در SGD میتوانند واقعاً به ما در یافتن کمینههای محلی بهتر کمک کنند.
به عنوان مثال، یک نمودار چندجملهای را با کمینهها و حداکثرهای متعدد در نظر بگیرید. در حالی که نزول گرادیان معمولی ما را به نزدیکترین کمینه هدایت میکند که ممکن است بهینه نباشد، نوسانات موجود در SGD به ما اجازه میدهد که از آن کمینه بپریم و به کمینه بهتری برسیم، زیرا اینکه نقاط کمینه یا حداکثر یک نقطه با دیگری متفاوت است و ما را به حل بهتری راهنمایی میکند. به همین دلیل است که SGD در یادگیری ماشین بیشتر مورد استفاده قرار میگیرد.
نزول گرادیان مینی-بچ
باز هم به بالای کوه بازمیگردیم، جایی که مدتها پیش گم شدهایم. این بار، ما از بودن در کوه خسته و کلافهایم زیرا قبلاً دو بار گم شدهایم. از ابزار مورد اعتماد خود استفاده کردیم تا به پایین برویم، با این حال، واقعاً نتوانست همه تفاوتهای موجود در زمین را در نظر بگیرد بدون اینکه ما را مانند SGD به همه جا ببرد (به عبارت دیگر، حرکات نرمتر). این بار، ما از الگوریتمی متفاوت برای پیدا کردن مسیر استفاده خواهیم کرد، به طوری که کوه را به بخشهای کوچکتر تقسیم کنیم و سپس با اسکن کردن فقط آن بخشها، ایمنترین و کارآمدترین مسیر به سمت پایین را محاسبه کنیم، به جای اینکه تمام کوه یا قدم فعلی خود را بررسی کنیم. این به عنوان نزول گرادیان مینی-بچ شناخته میشود.
فرمول: 𝜃 = 𝜃₀ — η × ▽ᶿ𝑱(𝜃, 𝑥⁽ⁱ ⁱ⁺ⁿ⁾, 𝑦⁽ⁱ ⁱ⁺ⁿ⁾)
n : اندازه بچ
همانطور که از فرمول مشخص است، این روش بسیار مشابه با SGD است و به این معناست که دادههای ورودی ما به عنوان ورودی گرفته میشوند. با این حال، ما یک متغیر جدید به نام اندازه بچ تعریف میکنیم تا به الگوریتم بگوییم که چه ابعاد ناحیهای را میخواهیم نرم کنیم.
این اساس نزول گرادیان مینی-بچ است. این روش به دنبال ارائه بهترین ویژگیهای هر دو جهان نسبت به الگوریتمهای نزول گرادیان معمولی و تصادفی است. بنابراین، به ما اجازه داده میشود که نسبت به تغییرات پیچیده در دادهها سازگار باشیم، در حالی که هنوز هم خیلی ناپایدار نیستیم و نظم کمتری داریم. این روش بهویژه در شبکههای عصبی به کار میرود چون دادهها پیچیده و غیر یکنواخت هستند.
اکنون که به پایین رسیدهاید، لطفاً از یک مینی-بچ از کوکیهای تازه لذت ببرید!
نقاط ضعف نزول گرادیان
در حالی که نزول گرادیان کمک زیادی در بهینهسازی مدلها میکند، اما نقاط ضعفی نیز دارد. اولین مشکل انتخاب یک نرخ یادگیری بهینه است. همانطور که قبلاً اشاره شد، داشتن نرخ یادگیری بسیار بالا یا بسیار پایین میتواند مشکلزا باشد. نرخ یادگیری بسیار بالا میتواند شما را به طور غیرقابل کنترل در تابع هزینه خود پرش کند، در حالی که نرخ یادگیری بسیار پایین میتواند موجب شود که شما به نقطه بهینه با سرعت بسیار کمی برسید و یا در کمینه محلی یک تابع غیرمحدب گرفتار شوید. ضعف دیگر به این مشکل کیفیت محدب مربوط میشود. در توابع محدب، شما مطمئن خواهید بود که نقطه بهینه را پیدا خواهید کرد، اما در توابع غیرمحدب، ممکن است در یک کمینه محلی گرفتار شوید یا به نقاط ناهمواری برسید که در زیر به آن اشاره شده است.
اینجا یک نقطه رکابی است؛ نقطه قرمز نمایانگر شماست. اگر کوهی به این شکل باشد و شما در این نقطه متوقف شوید، ابزار به اشتباه تشخیص میدهد که شما به پایین کوه رسیدهاید در حالی که در واقع اینگونه نیست. بنابراین این سوال مطرح میشود که چگونه میتوانیم این مشکلات را حل کنیم؟ راههای زیادی برای ارائه وجود دارد؛ بیایید به چند مورد بپردازیم.
بهینهسازی نزول گرادیان
مومنتوم
آیا قوانین نیوتن را که در فیزیک دبیرستان یاد گرفتهاید به خاطر دارید؟ اگر بله، بنابراین نظریهای به نام مومنتوم را به یاد خواهید آورد که تنها تابعی از جرم و سرعت شماست. این یک تابع بسیار ساده است که یک نیروی پیچیده از طبیعت را تعریف میکند. مومنتوم بهوضوح در نوسانسازها قابل مشاهده است؛ هنگامی که دو نوسانساز با جرمهای متفاوت تحت تأثیر یک سرعت یکسان قرار میگیرند، آنکه جرم بیشتری دارد، بیشتر از نقطه مرکزی دور میشود قبل از اینکه به عقب برگردد.
تابع : 𝑣ₜ = ℽ𝑣ₜ₋₁ — η × ▽ᶿ𝑱(𝜃, 𝑥ⁱ, 𝑦ⁱ)
𝜃 = 𝜃₀ — 𝑣ₜ
ℽ : عدد اسکالر کمتر از 1
𝑣ₜ : بردار بهروزرسانی در زمان t
این مفهوم مومنتوم همچنین میتواند در نزول گرادیان استفاده شود. تابع فوق آن را به اصطلاح معادله SGD توصیف میکند، اما میتوان بهطور مشابه به مینی-بچ نیز تعمیم داد. مومنتوم با پارامتر جدیدی به نام ℽ مشخص میشود که به ما اجازه میدهد تا اندازه تأثیر بهروزرسانیهای قبلی (𝑣ₜ) بر بهروزرسانی فعلی خود را مقیاسدهی کنیم. این مدولاسیون نرخ یادگیری به ما اجازه میدهد که در اطراف کمینهها منحرف شویم، به امید کشف اینکه آیا آنها نقطه بهینه ما هستند یا خیر. مجدداً در تشبیه کوه، این شبیه به زمانی است که شما یک توپ را از تپه پایین میزنید و آن توپ سرعت میگیرد، اما وقتی به یک افت در تپه نزدیک میشود، به آرامی کاهش سرعت میبخشد چون دوباره از آن افت بالا میرود. در نهایت، مومنتوم به توپ این اجازه را میدهد که مقداری از سرعت خود را برای بالا رفتن از آن افت حفظ کند و به پایین تپه ادامه دهد.
آداگراد
این یک الگوریتم پیشرفته است که میتواند نرخ یادگیری را بر اساس گرادیانهای گذشته محاسبه کند. آداگراد به این شکل عمل میکند که هر گام برداشته شده در یک پارامتر ذخیره میشود، سپس تمام گامها میانگینگیری میشوند و معمولاً تقسیم بر جذر این میانگین میشود. حال چگونه این به کمک ما میآید؟ این به ما اجازه میدهد که بهصورت خودکار نرخ یادگیری خود را بر اساس شیب فعلی تنظیم کنیم. اگر شیب مشابهی با چیزی که فقط یک گام پیشتر ثبت کردیم، ثبت شود، منطقی است که فرض کنیم هنوز در همان بخش هستیم و کمینهای در نزدیکی ما نیست. اما اگر شیب تفاوت زیادی داشته باشد، ممکن است بخواهیم آرامتر شده و زمان خود را صرف نماییم تا چیزی که میتواند ما را به حل بهینه برساند، را از دست ندهیم.
نتیجهگیری
در نهایت، به عنوان الگوریتمی برای بهینهسازی، نزول گرادیان یک ابزار بسیار قوی است و در بسیاری از برنامههای مشهور نظیر CatBoost، XGBoost و غیره مورد استفاده قرار میگیرد. این روش به ما کمک میکند تا نقطه بهینهای در یک تابع هزینه پیدا کنیم که در آن یادگیری ما با کمترین هزینه ممکن بهینه شده باشد. این فرآیند بهطور پیوسته به دنبال نزدیکترین نقطه به آن تابع هزینه میباشد تا زمانی که در نهایت به پایین برسد. هر نوع نزول گرادیان دارای قوتهایی است ولی در برخی جنبهها نیز نسبت به دیگر روشها دچار ضعفهایی میشود. با این حال، همگی آنها نقاط ضعف مشابهی مانند انتخاب نرخ یادگیری بهینه دارند. در حالی که این انتخاب معمولاً بهصورت دستی و از طریق آزمایش و خطا انجام میشود، الگوریتمهایی مانند مومنتوم و آداگراد وجود دارند که به تنظیم نرخ یادگیری ما در طول این فرآیند کمک میکنند تا همواره در اوج عملکرد باقی بمانیم. امیدواریم این اطلاعات به شما کمک کند تا بهسلامتی به پایین کوه هزینه برسید!
منبع
https://raed-asdi.medium.com/gradient-descent-for-dummies-1eda90f269b