سوالات متداول

چگونه می توان خرابی های بهینه سازی را رفع اشکال و کاهش داد؟

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

نموداری که WideResNet استاندارد را با WideResNet Stride 1x1 مقایسه می کند. محور y میزان خطای تست است. محور x نرخ یادگیری پایه است. استاندارد WideResNet با افزایش نرخ یادگیری پایه، افت تدریجی TestErrorRate را تجربه می کند. در مقابل، Stride WideResNet با افزایش نرخ یادگیری پایه، نوسانات شدیدی را تجربه می کند.
شکل 4. تغییر گام ها در یک بلوک باقیمانده (2x2 -> 1x1) در WideResnet منجر به بی ثباتی تمرین می شود.

در مورد شکل 4 به موارد زیر توجه کنید:

  • تغییر گام ها باعث کاهش عملکرد در نرخ های پایین یادگیری نمی شود.
  • نرخ بالای یادگیری دیگر به دلیل بی ثباتی خوب تمرین نمی کند.
  • اعمال 1000 مرحله گرم کردن نرخ یادگیری، این نمونه خاص از بی ثباتی را برطرف می کند و امکان آموزش پایدار با حداکثر نرخ یادگیری 0.1 را فراهم می کند.

شناسایی بارهای کاری ناپایدار

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

  • بی ثباتی در شروع اولیه یا در اوایل آموزش.
  • بی ثباتی ناگهانی در وسط تمرین.

با انجام کارهای زیر می توانید یک رویکرد سیستماتیک برای شناسایی مسائل ثبات در حجم کاری خود داشته باشید:

  • یک جارو نرخ یادگیری انجام دهید و بهترین نرخ یادگیری lr* را پیدا کنید.
  • منحنی های از دست دادن آموزش را برای نرخ یادگیری درست بالاتر از lr* ترسیم کنید.
  • اگر نرخ‌های یادگیری > lr* بی‌ثباتی از دست دادن را نشان می‌دهد (از دست دادن در طول دوره‌های تمرین کاهش نمی‌یابد)، پس رفع بی‌ثباتی معمولاً تمرین را بهبود می‌بخشد.

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

توجه: برخی از مدل‌ها بی‌ثباتی اولیه را نشان می‌دهند و به دنبال آن ریکاوری منجر به تمرین آهسته اما پایدار می‌شود. برنامه های ارزیابی رایج می توانند با ارزیابی نکردن مکرر به اندازه کافی، این مسائل را از دست بدهند!

برای بررسی این موضوع، می‌توانید با استفاده از lr = 2 * current best برای اجرای کوتاه 500 قدم آموزش دهید، اما هر مرحله را ارزیابی کنید.

دو نمودار: محور x برای هر دو نمودار مرحله جهانی است. محور y برای هر دو نمودار از دست دادن قطار است. هر دو نمودار گام تبدیل (2،2) را با گام تبدیل (1،1) مقایسه می کنند. نمودار اول ارزیابی ها را در هر 1000 مرحله نشان می دهد. در این نمودار اول، هر دو Conv Strides یک نزول تدریجی پایدار با گام های جهانی بیشتر را نشان می دهند. نمودار دوم ارزیابی های مکرر را در 25 مرحله اول نشان می دهد. در این نمودار دوم، گام تبدیل (2،2) نوسانات وحشی در تلفات قطار را در چند مرحله جهانی اول نشان می دهد، قبل از اینکه به طور مداوم 20 پله جهانی پایین تر شود. گام تبدیل (1،1) حتی پس از اولین مرحله جهانی، تلفات قطار به طور مداوم کم را نشان می دهد.
شکل 5. ارزش ارزیابی های مکرر در شروع آموزش. اگر مشکوک هستید که مدل از بی ثباتی اولیه تمرین رنج می برد مفید است.

اصلاحات بالقوه برای الگوهای ناپایداری رایج

راه حل های احتمالی زیر را برای الگوهای ناپایداری رایج در نظر بگیرید:

  • گرم کردن نرخ یادگیری را اعمال کنید. این برای بی ثباتی اولیه تمرین بهترین است.
  • برش گرادیان را اعمال کنید. این هم برای بی‌ثباتی اولیه و هم برای بی‌ثباتی در اواسط تمرین خوب است، و ممکن است برخی از اولیه‌سازی‌های بد را که گرم کردن نمی‌تواند برطرف کند.
  • یک بهینه ساز جدید را امتحان کنید. گاهی آدام می‌تواند بی‌ثباتی‌هایی را کنترل کند که Momentum نمی‌تواند. این یک حوزه تحقیقاتی فعال است.
  • اطمینان حاصل کنید که از بهترین شیوه ها و بهترین مقداردهی اولیه برای معماری مدل خود استفاده می کنید (نمونه هایی که باید دنبال شوند). اتصالات باقیمانده و عادی سازی را اضافه کنید اگر مدل قبلاً آنها را ندارد.
  • عادی سازی به عنوان آخرین عملیات قبل از باقی مانده. به عنوان مثال: x + Norm(f(x)) . توجه داشته باشید که Norm(x + f(x)) می تواند مشکلاتی ایجاد کند.
  • سعی کنید شاخه های باقیمانده را روی 0 مقداردهی کنید .
  • نرخ یادگیری را کاهش دهید. این آخرین راه حل است.

گرم کردن میزان یادگیری

دو نمودار نشان دهنده یک آزمایش در نمودار اول، محور x، گام جهانی و محور y، تلفات قطار است. با اعداد گرم کردن نرخ یادگیری پایین، افت قطار به شدت ناپایدار بود. با اعداد گرم کردن نرخ یادگیری بالاتر، از دست دادن قطار بسیار پایدارتر بود.
شکل 6. مثالی از ناپایداری در طول یک دوره گرم کردن (به مقیاس لاگ محور افقی توجه کنید). برای تمرین موفق در این مورد، 40 هزار مرحله گرم کردن مورد نیاز بود.

زمان استفاده از گرم کردن نرخ یادگیری

نمودار کاهش آنتروپی متقاطع در مجموعه اعتبارسنجی (محور y) در مقابل نرخ یادگیری پایه (محور x). این نمودار شش آزمایش عملی را نشان می‌دهد که همگی نرخ یادگیری پایه نسبتاً پایینی دارند. با افزایش نرخ یادگیری پایه، تلفات اعتبار سنجی کاهش می‌یابد، سپس قبل از شروع افزایش به نقطه پایین می‌رسد. این نمودار همچنین چهار آزمایش غیرقابل اجرا را نشان می‌دهد که همگی نرخ یادگیری پایه نسبتاً بالایی دارند.
شکل 7a. نمونه ای از نمودار محوری فراپارامتر برای مدلی که ناپایداری آموزشی را نشان می دهد. بهترین نرخ یادگیری در لبه چیزی است که امکان پذیر است. یک کارآزمایی "غیرقابل اجرا" یا NaNs تولید می کند یا مقادیر غیرمشخصه بالایی از از دست دادن را تولید می کند.

نمودار تلفات آنتروپی متقاطع در مجموعه تمرینی (محور y) در مقابل گام جهانی (محور x). ضرر در مراحل اولیه جهانی بسیار سریع کاهش می یابد. سپس، ضرر به طور چشمگیری در حدود 10000 قدم افزایش می یابد. سپس، ضرر به تدریج حدود 15000 قدم کاهش می یابد.
شکل 7b. از دست دادن آموزش یک مدل آموزش دیده با نرخ یادگیری که در آن شاهد بی ثباتی هستید.

شکل 7a یک نمودار محوری فراپارامتری را نشان می‌دهد که نشان‌دهنده مدلی است که ناپایداری‌های بهینه‌سازی را تجربه می‌کند، زیرا بهترین نرخ یادگیری درست در لبه ناپایداری است.

شکل 7b نشان می‌دهد که چگونه می‌توان این موضوع را با بررسی از دست دادن تمرین یک مدل آموزش دیده با نرخ یادگیری 5 برابر یا 10 برابر بزرگ‌تر از این پیک بررسی کرد. اگر آن نمودار افزایش ناگهانی زیان را پس از کاهش پیوسته نشان دهد (مثلاً در مرحله ~ 10k در شکل بالا)، آنگاه احتمالاً مدل از ناپایداری بهینه‌سازی رنج می‌برد.

نحوه اعمال گرم کردن نرخ یادگیری

نمودار کاهش اعتبار در مرحله 76619 (محور y) در مقابل نرخ یادگیری پایه (محور x). این نمودار نتایج چهار موقعیت مختلف را در یک ترانسفورماتور LayerNorm در WMT14 EN-De مقایسه می کند. گرم کردن نرخ یادگیری از دست دادن اعتبار را در نرخ های یادگیری پایین تر کاهش داد.
شکل 8. اثر مفید گرم کردن میزان یادگیری بر رفع ناپایداری های آموزشی.

اجازه دهید unstable_base_learning_rate نرخ یادگیری باشد که در آن مدل با استفاده از روش قبلی ناپایدار می شود.

گرم کردن شامل تنظیم یک برنامه زمان‌بندی نرخ یادگیری است که نرخ یادگیری را از 0 به مقداری base_learning_rate پایدار می‌برد که حداقل یک مرتبه بزرگ‌تر از unstable_base_learning_rate است. پیش‌فرض این است که یک base_learning_rate امتحان کنید که 10 برابر unstable_base_learning_rate است. اگرچه توجه داشته باشید که می‌توان کل این روش را دوباره برای چیزی شبیه به 100 برابر unstable_base_learning_rate اجرا کرد. برنامه زمانبندی مشخص این است:

  • از 0 به base_learning_rate در مرحله warmup_steps افزایش دهید.
  • برای post_warmup_steps با نرخ ثابتی تمرین کنید.

هدف شما یافتن کوتاه‌ترین تعداد warmup_steps است که به شما امکان می‌دهد به اوج نرخ‌های یادگیری دسترسی داشته باشید که بسیار بالاتر از unstable_base_learning_rate است. بنابراین برای هر base_learning_rate ، باید warmup_steps و post_warmup_steps را تنظیم کنید. معمولاً خوب است که post_warmup_steps 2*warmup_steps قرار دهید.

گرم کردن را می توان مستقل از یک برنامه پوسیدگی موجود تنظیم کرد. warmup_steps باید در چند مرتبه قدر مختلف جارو شود. به عنوان مثال، یک مطالعه نمونه می تواند [10, 1000, 10,000, 100,000] امتحان کند. بزرگترین نقطه امکان پذیر نباید بیش از 10% max_train_steps باشد.

هنگامی که یک warmup_steps که آموزش را با base_learning_rate منفجر نمی کند ایجاد شد، باید در مدل پایه اعمال شود. اساساً، این زمان‌بندی را به زمان‌بندی موجود اضافه کنید و از انتخاب بهینه ایست بازرسی که در بالا بحث شد برای مقایسه این آزمایش با خط پایه استفاده کنید. به عنوان مثال، اگر ما در ابتدا 10000 max_train_steps داشتیم و warmup_steps برای 1000 مرحله انجام دادیم، روش آموزشی جدید باید در مجموع 11000 مرحله اجرا شود.

اگر برای تمرین پایدار نیاز به warmup_steps طولانی است (> 5% از max_train_steps )، ممکن است لازم باشد max_train_steps را افزایش دهید تا این مورد را در نظر بگیرید.

واقعاً یک مقدار «معمولی» در طیف کاملی از بارهای کاری وجود ندارد. برخی از مدل ها تنها به 100 مرحله نیاز دارند، در حالی که برخی دیگر (به ویژه ترانسفورماتورها) ممکن است به 40k+ نیاز داشته باشند.

برش گرادیان

نمودار هنجار Grad l2 (محور y) در مقابل گام جهانی (محور x). آموزش هنجار گرادیان معمولی در مراحل اولیه جهانی بسیار ناپایدار بود. آستانه کلیپ که بیش از حد تهاجمی بود، سرعت یادگیری را کاهش داد و آموزش را کاهش داد. آستانه کلیپ بهتر (درست بالاتر از هنجار گرادیان معمولی) تمرین اولیه را تثبیت کرد.
شکل 9. برش گرادیان اصلاح ناپایداری اولیه تمرین.

برش گرادیان زمانی مفید است که مشکلات گرادیان بزرگ یا پرت اتفاق بیفتد. Gradient Clipping می تواند یکی از مشکلات زیر را برطرف کند:

  • بی ثباتی اولیه تمرین (هنجار شیب بزرگ در اوایل)
  • بی ثباتی در اواسط تمرین (خروج ناگهانی شیب در اواسط تمرین).

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

🤖 در مورد بریدن در حین گرم کردن چطور؟

آستانه های کلیپ ایده آل درست بالاتر از هنجار گرادیان "معمولی" هستند.

در اینجا مثالی از نحوه انجام برش گرادیان آورده شده است:

  • اگر هنجار گرادیان $\left | g \right |$ بیشتر از آستانه برش گرادیان $\lambda$ است، سپس ${g}'= \lambda \times \frac{g}{\left | g \right |}$ که در آن ${g}'$ گرادیان جدید است.

هنجار گرادیان بریده نشده را در طول تمرین ثبت کنید. به طور پیش فرض تولید کنید:

  • نمودار هنجار گرادیان در مقابل گام
  • هیستوگرام هنجارهای گرادیان جمع آوری شده در تمام مراحل

یک آستانه برش گرادیان را بر اساس صدک 90 هنجارهای گرادیان انتخاب کنید. آستانه به حجم کار بستگی دارد، اما 90٪ نقطه شروع خوبی است. اگر 90٪ کار نمی کند، می توانید این آستانه را تنظیم کنید.

🤖 در مورد نوعی استراتژی تطبیقی ​​چطور؟

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

برش گرادیان بسیار تهاجمی (یعنی بیش از 50 درصد از به‌روزرسانی‌ها بریده می‌شوند)، در اصل، روشی عجیب برای کاهش نرخ یادگیری است. اگر متوجه شدید که از برش بسیار تهاجمی استفاده می‌کنید، احتمالاً باید نرخ یادگیری را کاهش دهید.

چرا نرخ یادگیری و سایر پارامترهای بهینه سازی را هایپرپارامتر می نامید؟ آنها پارامترهای هیچ توزیع قبلی نیستند.

اصطلاح "هیپرپارامتر" در یادگیری ماشین بیزی معنای دقیقی دارد، بنابراین اشاره به نرخ یادگیری و بسیاری از پارامترهای یادگیری عمیق قابل تنظیم به عنوان "هیپرپارامترها" احتمالاً سوء استفاده از اصطلاحات است. ما ترجیح می‌دهیم از اصطلاح «متاپارامتر» برای نرخ‌های یادگیری، پارامترهای معماری و سایر موارد قابل تنظیم یادگیری عمیق استفاده کنیم. به این دلیل که متاپارامتر از احتمال سردرگمی ناشی از استفاده نادرست از کلمه "hyperparameter" جلوگیری می کند. این سردرگمی به ویژه در هنگام بحث بهینه‌سازی بیزی محتمل است، جایی که مدل‌های سطح پاسخ احتمالی فراپارامترهای واقعی خود را دارند.

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

چرا نباید اندازه دسته را طوری تنظیم کرد که مستقیماً عملکرد مجموعه اعتبارسنجی را بهبود بخشد؟

تغییر اندازه دسته بدون تغییر جزئیات دیگر خط لوله آموزشی اغلب بر عملکرد مجموعه اعتبار سنجی تأثیر می گذارد. با این حال، تفاوت در عملکرد مجموعه اعتبارسنجی بین دو اندازه دسته معمولاً از بین می رود اگر خط لوله آموزشی به طور مستقل برای هر اندازه دسته بهینه شود.

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

هنگامی که همه این اثرات در نظر گرفته شوند، هیچ مدرک قانع کننده ای وجود ندارد که اندازه دسته بر حداکثر عملکرد اعتبار سنجی قابل دستیابی تأثیر بگذارد. برای جزئیات، به Shallue و همکاران مراجعه کنید. 2018 .

قوانین به روز رسانی برای همه الگوریتم های بهینه سازی محبوب چیست؟

این بخش قوانین به روز رسانی را برای چندین الگوریتم بهینه سازی محبوب ارائه می دهد.

نزول گرادیان تصادفی (SGD)

\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]

جایی که $\eta_t$ نرخ یادگیری در مرحله $t$ است.

تکانه

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]

جایی که $\eta_t$ نرخ یادگیری در مرحله $t$ است و $\gamma$ ضریب حرکت است.

نستروف

\[v_0 = 0\]

\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]

جایی که $\eta_t$ نرخ یادگیری در مرحله $t$ است و $\gamma$ ضریب حرکت است.

RMSProp

\[v_0 = 1 \text{, } m_0 = 0\]

\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]

\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]

\[\theta_{t+1} = \theta_{t} - m_{t+1}\]

آدام

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]

نادام

\[m_0 = 0 \text{, } v_0 = 0\]

\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]

\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]

\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]

\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]