علاوه بر توضیحات خوبی که آقای حسن پور درمورد batch size دادند چند نکته درمورد انتخاب batch size مناسب وجود دارد. بچ سایز تعداد تصاویری هست که شبکه عصبی برای هرمرحله اپدیت خودش آن ها را همزمان در نظر میگیرد. پایین ترین بچ سایز یعنی ۱ به این معنی هست که شبکه عصبی در هر اپدیت فقط ارور نسبت به یک نمونه را محاسبه کرده و وزن ها را با توجه به آن اپدیت می کند و بچ سایز به اندازه کل دیتاست هم یعنی شبکه عصبی برای هر اپدیت ارور نسبت به کل تصاویر دیتاست را محاسبه می کند.
بچ سایز بزرگ تر به این معنی هست که شبکه عصبی شما برای همگرا شدن نیاز به batch های کمتری دارد. البته این batch های بزرگ زمان خیلی بیشتری هم خواهند برد. بچ سایز کوچک هم عکس این موضوع هست.
حالا سوال مهم اینجاست که چه بچ سایزی مناسب هست؟
قبل از بررسی این موضوع باید با چند مفهوم اشنا بشویم:
۱- مفهوم کلییت بخشی یا Generalization . مفهوم کلییت بخشی یعنی اینکه درصورتی که شما چند نوع درخت مختلف مثلا سرو, کاج, بلوط را مشاهده کردید, نکته ی مشترک همه این ها را پیدا کنید که همون درخت بودن هست. فرض کنید شما یک دسته بند دارید که میخواهد تشخیص بدهد یک شی درخت هست یا خیر. درصورتی که دسته بند شما قابلیت Generalization خوبی داشته باشد به نوع خاصی از درخت محدود نمی شود و شما هر نوعی از درخت که به آن بدهید تشخیص می دهد که درخت هست. این نوع دسته بند اگر چه در مرحله آموزش انواع درخت های محدودی را مشاهده کرده اما بجای یادگیری شکل خاص هرکدام کلییت درخت را یاد گرفته است و به همین دلیل در مرحله ی تست نمونه های دیده نشده را به خوبی دسته بندی می کند.
۲- مفهوم تیزی مینیمم تابع یا Sharpness of Minima . تیزی مینیمم یک تابع به طور ساده یعنی بزرگی مقدار ویژه ی مشتق دوم ان تابع در نقطه ی مینیمم.
حالا می توانیم موضوع را به شکل دقیق تر بررسی کنیم. وظیفه الگوریتم های Solver مانند SGD/Adam و .. مینیمم کردن تابع هزینه (loss) هست. تابع loss مینیمم های بسیار زیادی دارد که هر solver ممکن است به یکی از آن ها برسد. مینیمم های یک تابع را می توان با ویژگی تیزی (sharpness) سنجید. یعنی بعضی مینیمم ها تیز تر و بعضی ها صاف (flat) تر هستند. .
رسیدن به مینیمم های تیز نیاز به دقت بیشتری برای توصیف این نقاط دارد چرا که این نقاط با تغییر کمی در تابع باعث تغییر زیادی در مقدار loss خواهند شد اما مینیمم های صاف به شکل ساده تری توصیف می شوند و حتی تغییر در تابع باعث از دست رفتن مینیمم نمی شود که این یعنی این نقاط مینیمم های general تری هستند و بنابرین شبکه عصبی دارای قابلیت generalization خیلی بهتری خواهد بود. این مفهوم را در تصویر زیر می توانید ببینید:
![enter image description here](http://www.axgig.com/images/85426104264003461736.png)
حالا اگر به مساله اصلی برگردیم, batch size تاثیر زیادی در مینیمم تابعی که solver به آن می رسد دارد. بچ سایز بزرگ باعث می شود تا به یک مینیمم خیلی تیز برسم و batch size کوچک باعث می شود که به یک مینیمم صاف و با generalization بهتر برسیم.
بنابرین انتخاب سایز بزرگ برای batch size خیلی مناسب نیست و بهتر هست که بچ سایز کوچک تر انتخاب شود,البته راه حل مشخصی برای محاسبه ی تعداد مناسب batch size وجود ندارد چون برای هر تابع loss متفاوت هست پس بهترین راه این هست که با حدس و آزمایش به batch size مناسب برسید.