راهنمای شروع یک پروژه جدید

این بخش نحوه انتخاب موارد زیر را در شروع یک پروژه ML توضیح می دهد:

  • معماری مدل
  • بهینه ساز
  • اندازه دسته
  • پیکربندی اولیه

مفروضات

توصیه در این بخش موارد زیر را فرض می کند:

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

با فرض اینکه تمام پیش نیازهای قبلی را برآورده کرده اید، اکنون آماده هستید تا زمانی را به معماری مدل و پیکربندی آموزش اختصاص دهید.

معماری مدل را انتخاب کنید

بیایید با تعاریف زیر شروع کنیم:

  • معماری مدل سیستمی برای تولید پیش‌بینی است. یک معماری مدل شامل چارچوبی برای تبدیل داده های ورودی به پیش بینی است، اما حاوی مقادیر پارامتر نیست. به عنوان مثال، یک شبکه عصبی با سه لایه پنهان به ترتیب 10 گره، 5 گره و 3 گره، یک معماری مدل است.
  • یک مدل یک معماری مدل به اضافه مقادیر خاص برای تمام پارامترها است. به عنوان مثال، یک مدل از شبکه عصبی تشریح شده در تعریف معماری مدل، به اضافه مقادیر خاص برای وزن ها و بایاس هر گره تشکیل شده است.
  • خانواده مدل الگویی برای ساخت یک معماری مدل با مجموعه ای از فراپارامترها است.

انتخاب معماری مدل در واقع به معنای انتخاب مجموعه ای از مدل های مختلف است (یکی برای هر تنظیم ابرپارامترهای مدل).

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

بهینه ساز را انتخاب کنید

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

ما توصیه می کنیم محبوب ترین بهینه ساز را برای نوع مشکلی که روی آن کار می کنید انتخاب کنید. ما بهینه سازهای تثبیت شده زیر را توصیه می کنیم:

به تمام آرگومان های بهینه ساز انتخاب شده توجه کنید. بهینه سازهایی با فراپارامترهای بیشتر معمولاً به تلاش بیشتری برای تنظیم نیاز دارند. این به ویژه در مراحل ابتدایی یک پروژه دردناک است، زمانی که شما سعی می‌کنید بهترین مقادیر سایر فراپارامترهای مختلف را بیابید (مثلاً نرخ یادگیری) در حالی که آرگومان‌های بهینه‌ساز را به عنوان مزاحم در نظر می‌گیرید. بنابراین، ما روش زیر را توصیه می کنیم:

  1. در شروع پروژه، یک بهینه ساز را انتخاب کنید که بسیاری از فراپارامترهای قابل تنظیم نباشد. در اینجا دو نمونه وجود دارد:
    • SGD با تکانه ثابت.
    • آدام با اپسیلون، بتا1 و بتا2 ثابت.
  2. در مراحل بعدی پروژه، به یک بهینه‌ساز عمومی‌تر بروید که فراپارامترهای بیشتری را به جای تثبیت آن‌ها به مقادیر پیش‌فرض تنظیم می‌کند.

اندازه دسته را انتخاب کنید

خلاصه: اندازه دسته بر سرعت آموزش حاکم است. از اندازه دسته برای تنظیم مستقیم عملکرد مجموعه اعتبار سنجی استفاده نکنید.

اندازه دسته به شدت زمان آموزش و مصرف منابع محاسباتی را تعیین می کند. افزایش اندازه دسته اغلب زمان آموزش را کاهش می دهد که:

  • به شما این امکان را می دهد که در یک بازه زمانی ثابت، هایپرپارامترها را با دقت بیشتری تنظیم کنید و به طور بالقوه مدل نهایی بهتری تولید کنید.
  • تأخیر چرخه توسعه را کاهش می دهد و اجازه می دهد ایده های جدید به طور مکرر آزمایش شوند.

افزایش اندازه دسته می تواند مصرف منابع را کاهش یا افزایش دهد یا مصرف منابع را بدون تغییر باقی بگذارد.

اندازه دسته را به عنوان یک فراپارامتر قابل تنظیم برای عملکرد مجموعه اعتبارسنجی تلقی نکنید. اگر همه شرایط زیر رعایت شود، عملکرد مدل نباید به اندازه دسته بستگی داشته باشد:

  • همه هایپرپارامترهای بهینه ساز به خوبی تنظیم شده اند.
  • منظم سازی کافی و به خوبی تنظیم شده است.
  • تعداد مراحل آموزش کافی است.

همان عملکرد نهایی باید با استفاده از هر اندازه دسته ای قابل دستیابی باشد (به Shallue et al. 2018 و چرا نباید اندازه دسته را تنظیم کرد تا به طور مستقیم عملکرد مجموعه اعتبارسنجی را بهبود بخشد؟

اندازه های دسته ای امکان پذیر را تعیین کنید و توان عملیاتی آموزشی را تخمین بزنید

برای یک مدل و بهینه ساز معین، سخت افزار موجود معمولاً طیفی از اندازه های دسته ای را پشتیبانی می کند. عامل محدود کننده معمولا حافظه شتاب دهنده است. متأسفانه، محاسبه اندازه‌های دسته‌ای در حافظه بدون اجرای، یا حداقل کامپایل کردن برنامه آموزشی کامل، دشوار است. ساده ترین راه حل معمولاً اجرای کارهای آموزشی در اندازه های دسته ای مختلف (مثلاً افزایش توان 2) برای تعداد کمی مرحله است تا زمانی که یکی از کارها از حافظه موجود فراتر رود. برای هر اندازه دسته، به اندازه کافی تمرین کنید تا تخمین قابل اعتمادی از توان عملیاتی بدست آورید:

توان عملیاتی = تعداد نمونه های پردازش شده در هر ثانیه

یا به طور معادل زمان در هر مرحله :

زمان در هر مرحله = اندازه دسته / توان عملیاتی آموزش

هنگامی که شتاب دهنده ها هنوز اشباع نشده اند، اگر اندازه دسته دو برابر شود، توان عملیاتی آموزشی نیز باید دو برابر شود (یا حداقل تقریباً دو برابر شود). به طور معادل، زمان هر مرحله باید ثابت (یا حداقل تقریباً ثابت) با افزایش اندازه دسته باشد. اگر اینطور نیست، خط لوله آموزشی دارای یک تنگنا است، مانند I/O یا همگام سازی بین گره های محاسباتی. قبل از ادامه، تشخیص و اصلاح گلوگاه را در نظر بگیرید.

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

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

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

اندازه دسته را انتخاب کنید تا زمان آموزش به حداقل برسد

در اینجا تعریف ما از زمان آموزش است:

  • زمان آموزش = (زمان در هر مرحله) x (تعداد کل مراحل)

شما اغلب می توانید زمان هر مرحله را تقریباً برای همه اندازه های دسته ای ممکن ثابت در نظر بگیرید. این درست زمانی است که:

  • هیچ سرباری از محاسبات موازی وجود ندارد.
  • تمام تنگناهای آموزشی تشخیص داده شده و اصلاح شده است. (برای چگونگی شناسایی تنگناهای آموزشی به بخش قبل مراجعه کنید. در عمل معمولاً حداقل مقداری سربار از افزایش اندازه دسته وجود دارد.

با افزایش اندازه دسته، تعداد کل مراحل مورد نیاز برای رسیدن به یک هدف عملکرد ثابت معمولاً کاهش می‌یابد، مشروط بر اینکه هنگام تغییر اندازه دسته، همه فراپارامترهای مربوطه را مجدداً تنظیم کنید. (به Shallue et al. 2018 مراجعه کنید.) برای مثال، دو برابر کردن اندازه دسته ممکن است تعداد کل مراحل مورد نیاز را به نصف کاهش دهد. این رابطه مقیاس‌بندی کامل نامیده می‌شود و باید برای همه اندازه‌های دسته‌ای تا اندازه دسته بحرانی برقرار باشد.

فراتر از اندازه بچ بحرانی، افزایش اندازه دسته بازده کاهشی ایجاد می کند. یعنی افزایش سایز دسته در نهایت دیگر تعداد مراحل آموزش را کاهش نمی دهد اما هرگز آن را افزایش نمی دهد. بنابراین، اندازه دسته ای که زمان آموزش را به حداقل می رساند، معمولاً بزرگترین اندازه دسته ای است که هنوز تعداد مراحل آموزشی مورد نیاز را کاهش می دهد. این اندازه دسته ای به مجموعه داده، مدل و بهینه ساز بستگی دارد و نحوه محاسبه آن به غیر از یافتن تجربی برای هر مشکل جدید، یک مشکل باز است. 🤖

هنگام مقایسه اندازه های دسته ای، مراقب تمایز بین موارد زیر باشید:

  • بودجه نمونه یا بودجه دوره ای - اجرای همه آزمایش ها در حالی که تعداد ارائه های نمونه آموزشی را ثابت می کند.
  • بودجه مرحله ای - اجرای تمام آزمایش ها با تعداد ثابتی از مراحل آموزشی.

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

اندازه دسته را برای به حداقل رساندن مصرف منابع انتخاب کنید

دو نوع هزینه منابع مرتبط با افزایش اندازه دسته وجود دارد:

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

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

ما به کل هزینه استفاده (که ممکن است شامل چندین نوع هزینه باشد) به عنوان مصرف منابع اشاره می کنیم که به صورت زیر محاسبه می شود:

مصرف منبع = مصرف منبع در هر مرحله x تعداد کل مراحل

افزایش اندازه دسته معمولاً تعداد کل مراحل را کاهش می دهد. افزایش یا کاهش مصرف منابع بستگی به نحوه تغییر مصرف در هر مرحله دارد که به اندازه دسته به شرح زیر بستگی دارد:

  • افزایش اندازه دسته ممکن است مصرف منابع را کاهش دهد . به عنوان مثال، اگر هر مرحله با اندازه دسته بزرگتر را بتوان بر روی سخت افزاری مشابه با اندازه دسته کوچکتر اجرا کرد (فقط با افزایش کمی در زمان در هر مرحله)، در این صورت هرگونه افزایش در مصرف منابع در هر مرحله ممکن است با کاهش جبران شود. در تعداد مراحل
  • افزایش اندازه دسته ممکن است مصرف منابع را تغییر ندهد . به عنوان مثال، اگر دوبرابر کردن اندازه دسته، تعداد مراحل مورد نیاز را به نصف کاهش دهد و تعداد GPU های استفاده شده را دو برابر کند، مصرف کل (بر حسب ساعت GPU) تغییر نمی کند.
  • افزایش اندازه دسته ممکن است مصرف منابع را افزایش دهد. به عنوان مثال، اگر افزایش اندازه دسته به سخت افزار ارتقا یافته نیاز دارد، افزایش مصرف در هر مرحله ممکن است بر کاهش تعداد مراحل بیشتر باشد.

تغییر اندازه دسته به تنظیم مجدد بیشتر پارامترها نیاز دارد

مقادیر بهینه اکثر فراپارامترها به اندازه دسته حساس هستند. بنابراین، تغییر اندازه دسته معمولاً مستلزم شروع مجدد فرآیند تنظیم است. فراپارامترهایی که به شدت با اندازه دسته تعامل دارند و بنابراین تنظیم جداگانه برای هر اندازه دسته مهم است، به شرح زیر است:

  • فراپارامترهای بهینه ساز (به عنوان مثال، سرعت یادگیری و حرکت)
  • فراپارامترهای منظم سازی

هنگام انتخاب اندازه دسته ای در شروع پروژه به این نکته توجه کنید. اگر بعداً نیاز به تغییر اندازه دسته ای دیگر دارید، ممکن است تنظیم مجدد سایر فراپارامترها برای اندازه دسته جدید دشوار، زمان بر و گران باشد.

نحوه تعامل هنجار دسته ای با اندازه دسته

هنجار دسته ای پیچیده است و به طور کلی باید از اندازه دسته ای متفاوت از محاسبه گرادیان برای محاسبه آمار استفاده کرد. جزئیات اجرای نرمال سازی دسته ای را برای بحث مفصل ببینید.

پیکربندی اولیه را انتخاب کنید

اولین مرحله در تنظیم هایپرپارامتر، تعیین نقاط شروع برای موارد زیر است:

  • پیکربندی مدل (به عنوان مثال تعداد لایه ها)
  • فراپارامترهای بهینه ساز (به عنوان مثال نرخ یادگیری)
  • تعداد مراحل آموزش

تعیین این پیکربندی اولیه نیاز به چند دوره آموزشی پیکربندی شده دستی و آزمون و خطا دارد.

اصل راهنمای ما به شرح زیر است:

پیکربندی ساده ، نسبتاً سریع و نسبتاً کم مصرف را پیدا کنید که عملکرد معقولی داشته باشد.

جایی که:

  • ساده به معنای اجتناب از ویژگی های غیر ضروری خط لوله، مانند منظم سازی های خاص یا ترفندهای معماری است. به عنوان مثال، خط لوله بدون قاعدگی انصراف (یا با غیرفعال شدن نظم بخشیدن به خروج) ساده تر از خط لوله با نظم دهی خروج است.
  • عملکرد معقول به مشکل بستگی دارد، اما حداقل، یک مدل آموزش دیده معقول بسیار بهتر از شانس تصادفی در مجموعه اعتبار سنجی عمل می کند.

انتخاب یک پیکربندی اولیه که سریع باشد و حداقل منابع را مصرف کند، تنظیم هایپرپارامتر را بسیار کارآمدتر می کند. به عنوان مثال، با یک مدل کوچکتر شروع کنید.

انتخاب تعداد مراحل تمرین شامل متعادل کردن تنش زیر است:

  • آموزش مراحل بیشتر می تواند عملکرد را بهبود بخشد و تنظیم هایپرپارامتر را ساده کند. (برای جزئیات بیشتر، Shallue et al. 2018 را ببینید).
  • برعکس، آموزش برای مراحل کمتر به این معنی است که هر دوره آموزشی سریعتر است و از منابع کمتری استفاده می کند، با کاهش زمان بین چرخه ها، کارایی تنظیم را افزایش می دهد و به شما امکان می دهد آزمایش های بیشتری را به صورت موازی اجرا کنید. علاوه بر این، اگر در شروع پروژه یک بودجه گامی غیر ضروری را انتخاب کنید، ممکن است تغییر آن در مراحل بعدی پروژه سخت باشد. به عنوان مثال، هنگامی که برنامه نرخ یادگیری را برای آن تعداد مرحله تنظیم کردید.