Mini-Batch Gradient Descent

Mini-Batch Gradient Descent

در بخش قبلی الگوریتم Stocastic Gradient Descent را معرفی کردیم و دیدیم که بسیار کاراتر و سریعتر از الگوریتم اصلی یعنی Gradient Descent عمل می‌کند. در اینجا نوع دیگری از این الگوریتم به نام Mini-Batch Gradient Descent را معرفی می‌کنیم، که در برخی موارد عملکرد آن می‌تواند بسیار سریع‌تر از Stocastic Gradient Descent باشد.

در الگوریتم Batch Gradient Descent از همه m نمونه موجود، در هر تکرار استفاده می‌شود. در Stocastic Gradient Descent تنها از یک نمونه در هر تکرار استفاده می‌شود و در روش Mini-Batch Gradient Descent در هر تکرار از b نمونه استفاده می‌شود. معمولاً b را بین ۲ تا 100 انتخاب می‌کنند. مثلاً فرض کنید که \(b = 10\) و \(m = 1000\) باشد.

$$\begin{eqnarray} Repeat \quad &\{& \nonumber \\ &\quad& \text{for} \quad i=1,11,21,31,...,991 \quad \{ \nonumber \\ &\quad& \quad \theta_j := \theta_j - \alpha \frac{1}{10} \sum^{i+9}_{i=1} \left(h_{\theta}(x^{(k)} - y^{(k)}\right)x^{(k)}_j \nonumber \\ &\quad& \quad (\text{for every} \quad j = 0, 1, ..., n) \nonumber \\ &\quad&\}\nonumber \\ \quad \quad &\}& \end{eqnarray}$$

بنابراین در اینجا هم مشاهده می‌کنید تنها با نگاه کردن به تعداد محدودی از داده‌ها (در اینجا 10 نمونه) در هر تکرار الگوریتم پیش می‌رود.

اما چرا به جای نگاه کردن به یک نمونه در هر تکرار مانند Stocastic Gradient Descent در هر تکرار b نمونه را انتخاب می‌کنیم؟ دلیل اصلی آن در برداری کردن الگوریتم است که سرعت آن را بهبود می‌بخشد. ولی عیبی که این روش دارد این است که یک پارامتر اضافی b را داریم که باید انتخاب شود و انتخاب آن ممکن است زمان‌بر باشد.