به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

سلام
انتخاب batch size فقط ریط بهGPU که استفاده می کنیم دارد؟ یا هر مدل شبکه batch size مشخصی دارد؟ بهیترین حالتش رو چجوری می توان انتخاب کرد؟

توسط (105 امتیاز)

2 پاسخ

+1 امتیاز

با سلام
هر چقدر میزان batch_size بزرگتر باشه حجم داده بیشتری بایستی بر روی حافظه gpu ذخیره بشه - علاوه بر داده ورودی به اندازه batch_size مقادیر گرادیان برای بروز رسانی وزن ها هم بایستی ذخیره بشه و با توجه به حجم خود شبکه معمولا نمی توان batch_size را خیلی زیاد گرفت.

بطور مفهومی استفاده از بچ های بزرگتر باعث می شود که شبکه در مسیری بهینه تر و با کمتر پرسه زدن به مینیمم همگرا بشود در حالی که با بچ های کوچکتر شبکه با پرسه زدن در جهات غیر بهینه به مینیمم همگرا می شود.

در مواقعی که بچ سایز را کوچک انتخاب می کنیم بایستی نرخ آموزش learning_rate را کوچکتر و تعداد epoch های کمتر از مواقعی بگیریم که بچ سایز بزرگتری داریم.

با توجه به این مقاله دیده شده است که بچ سایز بزرگتر ممکن است منجر به مشکل در بحث تعممیم پذیری شود.

توسط (830 امتیاز)
خیلی ممنون از توضیحی که دادید.   کلا به جزشرایطی که توضیح دادید قانونی وجود دارد که برای مدل شبکه از چه batch sizeباید استفاده بشه؟ مثلاشبکهcifar هرجا که من دیدم batch size =32 بوده.
قانون خاصی وجود نداره - با بچ سایز های متفاوت نبایستی جواب نهایی متفاوتی بدست آید.
0 امتیاز

سلام
انتخاب بچ سایز متاثر از 2 مساله اس
1. بحث سخت افزاری
2. بحث مربوط به بهینه سازی

در بحث اول بچ سایز صرفا توسط میزان حافظه ای که دارید محدود میشه . در این بحث ایده آل اینه تا جایی که ممکنه اندازه بچ بزرگتر در نظر گرفته بشه تا سرعت پردازش افزایش پیدا کنه (و زمان ترینینگ در نتیجه کاهش پیدا کنه) . این بحث البته کاملا صحیح نیست و یک نکته ریز داره .
این نکته ریز در بحث دوم وجود داره . بچ بزرگتر گرادیان استیبل تری رو ارائه میکنه و باعث میشه اصطلاحا oscillation کمتری رخ بده و همگرایی تسریع بشه همینطور هر بچ تقریب نزدیک تری به کل دیتاست ارائه بکنه. نکته ریز اینجاست در عمل بچ بزرگ یا خیلی بزرگ (یک مقیاس نسبی هست این بزرگ بودن) عموما باعث همگرایی نهایی نامناسب تری میشه. یعنی بچ های کوچکتر با همون تناوب هایی که ایجاد میکنن باعث میشن از لوکال مینیمم های نامناسب بیشتری فرار کنن و نهایتا به نقطه بهتری همگرا بشن . برای همین در عمل بچ نه انقدر باید کوچک باشه که اون تناوب های باعث واگرایی یا کند شدن همگرایی بشه و نه باید انقدر زیاد باشه تا در لوکال مینیمم های بد گیر بیوفته.
در عمل اندازه بچ های بین 32 تا 512 مرسوم هست یعنی 32 64 100 256128 و نهایتا 512 . اعداد بیس دو هستن چون پیاده سازی های سخت افزاری بهتر میتونن بهره برداری کنن و بهبود کارایی میشه داشت (ممکنه چیز دندون گیری نباشه پس اجباری نیست حتما بیس 2 باشن سعی کنید اینطور باشه خوبه اما این مساله متاثر از شرایط شماست)
اندازه بچ بهترین برای هر کاری متفاوت هست ولی مقادیر 64 100 معمولا خیلی خوب جواب میدن و میتونید روی دیتاست های مورد نظر خودتون لحاظ کنید. این مقادیر بچ هم قبلا تو یه مقاله بحثش شده اینجا بگردید من قبلا لینکش رو دادم با سرچ باید بتونید پیدا کنید و بخونید(الان حضور ذهن ندارم)

توسط (4.3k امتیاز)
ببخشیدبحث های زیادی راجع به batch شده، من نتونستم مقاله ایروکهشما گفتید پیدا کنم
سلام. اسم مقاله On Large-Batch Training for Deep Learning Generalization Gap and Sharp Minima هست که سال 2016 منتشر شد.
بسیار ممنون از راهنماییتون
...