گرادیان نزولی (Gradient Descent) یکی از محبوبترین و کارآمدترین الگوریتمها برای بهینهسازی، بهویژه در شبکههای عصبی است. این الگوریتم در اکثر کتابخانههای یادگیری عمیق پیادهسازی شده، اما معمولاً بهعنوان یک "جعبه سیاه" شناخته میشود. درک نقاط قوت و ضعف آن میتواند چالشبرانگیز باشد و نیاز به بررسی و آزمایشهای عملی دارد.
گرادیان نزولی چیست
گرادیان نزولی روشی است برای پیدا کردن کمترین مقدار یک تابع هدف J(θ)J(θ) که با پارامترهای θθ مشخص میشود. در این روش، ما پارامترها را بهگونهای بهروزرسانی میکنیم که به سمت پایینترین نقطه تابع حرکت کنیم، یعنی در جهت مخالف شیب تابع هدف. نرخ یادگیری ηη تعیین میکند که هر بار چقدر باید پارامترها را تغییر دهیم تا به حداقل (محلی) برسیم. بهعبارت دیگر، ما به دنبال شیب تابع هدف هستیم تا به یک دره برسیم و کمترین مقدار ممکن را پیدا کنیم.
انواع گرادیان نزولی
گرادیان نزولی به سه نوع اصلی تقسیم میشود که هر یک بر اساس میزان دادهای که برای محاسبه گرادیان تابع هدف استفاده میشود، متفاوت است. انتخاب نوع مناسب بستگی به تعادل بین دقت بهروزرسانی پارامترها و زمان مورد نیاز برای انجام هر بهروزرسانی دارد. این سه نوع عبارتند از:
- Batch gradient descent
- Stochastic gradient descent
- Mini-batch gradient descent
گرادیان نزولی تصادفی
گرادیان نزولی تصادفی (Stochastic Gradient Descent یا SGD) یک روش بهینهسازی است که در آن بهروزرسانی پارامترها برای هر مثال آموزشی x(i)x(i) و برچسب y(i)y(i) بهصورت زیر انجام میشود:
θ=θ−η⋅∇θJ(θ;x(i);y(i))
در مقایسه با گرادیان نزولی دستهای (Batch Gradient Descent)، که برای محاسبه گرادیانها به کل مجموعه داده نیاز دارد، SGD تنها به یک نمونه تصادفی از دادهها برای هر بهروزرسانی نیاز دارد. این امر باعث میشود که SGD بهطور قابل توجهی سریعتر عمل کند و همچنین برای یادگیری آنلاین مناسب باشد. با این حال، بهروزرسانیهای مکرر در SGD معمولاً واریانس بالایی دارند، که میتواند باعث نوسانات شدید در تابع هدف شود. این نوسانات بهویژه در مقایسه با گرادیان نزولی دستهای که محاسبات دقیقتری انجام میدهد، بیشتر است. بنابراین، SGD بهدلیل سرعت بالاتر و کارایی در پردازش دادههای بزرگ، بهویژه در مسائل یادگیری ماشین، بهطور گستردهای مورد استفاده قرار میگیرد.
آشنایی با الگوریتم Gradient Descent