ایلیا
ایلیا
خواندن ۳ دقیقه·۳ سال پیش

تفاوت بین batch_size ،epoch و iterations

تفاوت بین batch_size ،epoch و iterations
تفاوت بین batch_size ،epoch و iterations

حتماً برای شما هم پیش اومده که به مانیتور نگاه کنید و سرتونو بخارید و از خودتون بپرسید "چرا این سه عبارت را در کُدهام می‌نویسم؟ اصلاً فرقشون چیه؟" چرا که خیلی شبیه هم هستند.

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

در ادامه بصورت خیلی خلاصه به مفهوم گرادیان کاهشی اشاره می‌کنم.

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

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

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

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

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



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

دروره‌ها(epochs)

یک دوره یا epoch زمانی است که کل مجموعه داده تنها یک بار از طریق شبکه عصبی به جلو و عقب منتقل می‌شود.

از آنجایی که یک دوره آنقدر بزرگ است که نمی‌توان آن را به یکباره به سیستم وارد کرد، آن را به چند دسته کوچکتر تحت عنوان دوره یا epoch تقسیم می‌کنیم.

چرا از بیش از یک دوره یا epoch استفاده می کنیم؟

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

در واقع؛ یک دوره یا epoch منجر به عدم تناسب منحنی در نمودار (زیر) می‌شود.

با افزایش تعداد دوره‌ها(epochs)، تعداد دفعات تغییر وزن در شبکه عصبی بیشتر می‌شود و منحنی از کم‌برازش(Underfitting) به منحنی بهینه(Optimal) و بعد به منحنی بیش‌برازش(Overfitting) می‌رود.

خُب، پس تعداد مناسب دوره‌ها(epochs) چقدر است؟

متاسفانه پاسخ درستی برای این سوال وجود ندارد. پاسخ برای مجموعه داده‌های مختلف متفاوت است، اما می‌توانید بگویید که تعداد دوره‌ها به تنوع داده‌های شما مربوط می‌شود... بعنوان مثال - آیا فقط گربه‌های سیاه در مجموعه داده‌های خود دارید یا مجموعه داده‌ها بسیار متنوع‌تر است؟

اندازه دسته(Batch Size)

تعداد کل نمونه های آموزشی موجود در یک دسته.
توجه: اندازه دسته(batch size) و تعداد دسته(number of batches) دو چیز متفاوت هستند.

اما دسته(batch) چیست؟

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

درست مثل اینکه شما یک مقاله بزرگ را به مجموعه‌ها/دسته‌ها/قسمت‌های متعددی مانند مقدمه، گرادیان کاهشی، دوره(epoch)، اندازه دسته‌ای(batch size) و تکرار(iteration) تقسیم می‌کنید که خواندن کل مقاله و درک آن را برای خواننده آسان باشد. ?

تکرارها(iterations)

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

تکرارها؛ تعداد دسته‌های(batch) مورد نیاز برای تکمیل یک دوره(epoch) است.
توجه: تعداد دسته‌ها(batchs) برابر است با تعداد دفعات یک دوره(epoch).

فرض کنید 2000 نمونه آموزشی داریم که قرار است از آنها استفاده کنیم.

ما می‌توانیم مجموعه داده‌های 2000 نمونه را به دسته‌های(batchs) 500 تایی تقسیم کنیم، سپس 4 تکرار(iteration) طول می‌کشد تا یک دوره(epoch) کامل شود.

که در آن اندازه دسته 500، تکرارها 4 که برای 1 دوره کامل است.


منبع: https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9

شبکه‌های عصبییادگیری عمیقبچ سایرepochbatch size
Python{Django}, PHP{Laravel}, Javascript{ReactJS}, Linux{LPIC1,2,3}, Newtwork{CCNA}
شاید از این پست‌ها خوشتان بیاید