چگونه می توان خرابی های بهینه سازی را رفع اشکال و کاهش داد؟
خلاصه: اگر مدل با مشکلات بهینه سازی مواجه است، مهم است که قبل از امتحان کردن چیزهای دیگر، آنها را برطرف کنید. تشخیص و اصلاح شکست های آموزشی یک حوزه فعال تحقیقاتی است.
در مورد شکل 4 به موارد زیر توجه کنید:
- تغییر گام ها باعث کاهش عملکرد در نرخ های پایین یادگیری نمی شود.
- نرخ بالای یادگیری دیگر به دلیل بی ثباتی خوب تمرین نمی کند.
- اعمال 1000 مرحله گرم کردن نرخ یادگیری، این نمونه خاص از بی ثباتی را برطرف می کند و امکان آموزش پایدار با حداکثر نرخ یادگیری 0.1 را فراهم می کند.
شناسایی بارهای کاری ناپایدار
اگر میزان یادگیری خیلی زیاد باشد، هر بار کاری ناپایدار می شود. بی ثباتی تنها زمانی مشکل ساز می شود که شما را مجبور به استفاده از نرخ یادگیری بسیار کم کند. حداقل دو نوع بی ثباتی تمرینی ارزش تشخیص دارد:
- بی ثباتی در شروع اولیه یا در اوایل آموزش.
- بی ثباتی ناگهانی در وسط تمرین.
با انجام کارهای زیر می توانید یک رویکرد سیستماتیک برای شناسایی مسائل ثبات در حجم کاری خود داشته باشید:
- یک جارو نرخ یادگیری انجام دهید و بهترین نرخ یادگیری lr* را پیدا کنید.
- منحنی های از دست دادن آموزش را برای نرخ یادگیری درست بالاتر از lr* ترسیم کنید.
- اگر نرخهای یادگیری > lr* بیثباتی از دست دادن را نشان میدهد (از دست دادن در طول دورههای تمرین کاهش نمییابد)، پس رفع بیثباتی معمولاً تمرین را بهبود میبخشد.
هنجار L2 شیب تلفات کامل را در طول تمرین ثبت کنید، زیرا مقادیر پرت می توانند باعث بی ثباتی کاذب در وسط تمرین شوند. این میتواند نشان دهد که چگونه شیبها یا بهروزرسانیهای وزنی را با شدت گیره میدهیم.
توجه: برخی از مدلها بیثباتی اولیه را نشان میدهند و به دنبال آن ریکاوری منجر به تمرین آهسته اما پایدار میشود. برنامه های ارزیابی رایج می توانند با ارزیابی نکردن مکرر به اندازه کافی، این مسائل را از دست بدهند!
برای بررسی این موضوع، میتوانید با استفاده از lr = 2 * current best
برای اجرای کوتاه 500 قدم آموزش دهید، اما هر مرحله را ارزیابی کنید.
اصلاحات بالقوه برای الگوهای ناپایداری رایج
راه حل های احتمالی زیر را برای الگوهای ناپایداری رایج در نظر بگیرید:
- گرم کردن نرخ یادگیری را اعمال کنید. این برای بی ثباتی اولیه تمرین بهترین است.
- برش گرادیان را اعمال کنید. این هم برای بیثباتی اولیه و هم برای بیثباتی در اواسط تمرین خوب است، و ممکن است برخی از اولیهسازیهای بد را که گرم کردن نمیتواند برطرف کند.
- یک بهینه ساز جدید را امتحان کنید. گاهی آدام میتواند بیثباتیهایی را کنترل کند که Momentum نمیتواند. این یک حوزه تحقیقاتی فعال است.
- اطمینان حاصل کنید که از بهترین شیوه ها و بهترین مقداردهی اولیه برای معماری مدل خود استفاده می کنید (نمونه هایی که باید دنبال شوند). اتصالات باقیمانده و عادی سازی را اضافه کنید اگر مدل قبلاً آنها را ندارد.
- عادی سازی به عنوان آخرین عملیات قبل از باقی مانده. به عنوان مثال:
x + Norm(f(x))
. توجه داشته باشید کهNorm(x + f(x))
می تواند مشکلاتی ایجاد کند. - سعی کنید شاخه های باقیمانده را روی 0 مقداردهی کنید .
- نرخ یادگیری را کاهش دهید. این آخرین راه حل است.
گرم کردن میزان یادگیری
زمان استفاده از گرم کردن نرخ یادگیری
شکل 7a یک نمودار محوری فراپارامتری را نشان میدهد که نشاندهنده مدلی است که ناپایداریهای بهینهسازی را تجربه میکند، زیرا بهترین نرخ یادگیری درست در لبه ناپایداری است.
شکل 7b نشان میدهد که چگونه میتوان این موضوع را با بررسی از دست دادن تمرین یک مدل آموزش دیده با نرخ یادگیری 5 برابر یا 10 برابر بزرگتر از این پیک بررسی کرد. اگر آن نمودار افزایش ناگهانی زیان را پس از کاهش پیوسته نشان دهد (مثلاً در مرحله ~ 10k در شکل بالا)، آنگاه احتمالاً مدل از ناپایداری بهینهسازی رنج میبرد.
نحوه اعمال گرم کردن نرخ یادگیری
اجازه دهید 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+ نیاز داشته باشند.
برش گرادیان
برش گرادیان زمانی مفید است که مشکلات گرادیان بزرگ یا پرت اتفاق بیفتد. Gradient Clipping می تواند یکی از مشکلات زیر را برطرف کند:
- بی ثباتی اولیه تمرین (هنجار شیب بزرگ در اوایل)
- بی ثباتی در اواسط تمرین (خروج ناگهانی شیب در اواسط تمرین).
گاهی اوقات دورههای گرم کردن طولانیتر میتواند ناپایداریها را تصحیح کند که بریده شدن نمیتواند. برای جزئیات، به گرم کردن میزان یادگیری مراجعه کنید.
🤖 در مورد بریدن در حین گرم کردن چطور؟
آستانه های کلیپ ایده آل درست بالاتر از هنجار گرادیان "معمولی" هستند.
در اینجا مثالی از نحوه انجام برش گرادیان آورده شده است:
- اگر هنجار گرادیان $\left | g \right |$ بیشتر از آستانه برش گرادیان $\lambda$ است، سپس ${g}'= \lambda \times \frac{g}{\left | g \right |}$ که در آن ${g}'$ گرادیان جدید است.
هنجار گرادیان بریده نشده را در طول تمرین ثبت کنید. به طور پیش فرض تولید کنید:
- نمودار هنجار گرادیان در مقابل گام
- هیستوگرام هنجارهای گرادیان جمع آوری شده در تمام مراحل
یک آستانه برش گرادیان را بر اساس صدک 90 هنجارهای گرادیان انتخاب کنید. آستانه به حجم کار بستگی دارد، اما 90٪ نقطه شروع خوبی است. اگر 90٪ کار نمی کند، می توانید این آستانه را تنظیم کنید.
🤖 در مورد نوعی استراتژی تطبیقی چطور؟
اگر برش گرادیان را امتحان کنید و مشکلات ناپایداری باقی بماند، می توانید آن را سخت تر امتحان کنید. یعنی می توانید آستانه را کوچکتر کنید.
برش گرادیان بسیار تهاجمی (یعنی بیش از 50 درصد از بهروزرسانیها بریده میشوند)، در اصل، روشی عجیب برای کاهش نرخ یادگیری است. اگر متوجه شدید که از برش بسیار تهاجمی استفاده میکنید، احتمالاً باید نرخ یادگیری را کاهش دهید.
چرا نرخ یادگیری و سایر پارامترهای بهینه سازی را هایپرپارامتر می نامید؟ آنها پارامترهای هیچ توزیع قبلی نیستند.
اصطلاح "هیپرپارامتر" در یادگیری ماشین بیزی معنای دقیقی دارد، بنابراین اشاره به نرخ یادگیری و بسیاری از پارامترهای یادگیری عمیق قابل تنظیم به عنوان "هیپرپارامترها" احتمالاً سوء استفاده از اصطلاحات است. ما ترجیح میدهیم از اصطلاح «متاپارامتر» برای نرخهای یادگیری، پارامترهای معماری و سایر موارد قابل تنظیم یادگیری عمیق استفاده کنیم. به این دلیل که متاپارامتر از احتمال سردرگمی ناشی از استفاده نادرست از کلمه "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}\]
،چگونه می توان خرابی های بهینه سازی را رفع اشکال و کاهش داد؟
خلاصه: اگر مدل با مشکلات بهینه سازی مواجه است، مهم است که قبل از امتحان کردن چیزهای دیگر، آنها را برطرف کنید. تشخیص و اصلاح شکست های آموزشی یک حوزه فعال تحقیقاتی است.
در مورد شکل 4 به موارد زیر توجه کنید:
- تغییر گام ها باعث کاهش عملکرد در نرخ های پایین یادگیری نمی شود.
- نرخ بالای یادگیری دیگر به دلیل بی ثباتی خوب تمرین نمی کند.
- اعمال 1000 مرحله گرم کردن نرخ یادگیری، این نمونه خاص از بی ثباتی را برطرف می کند و امکان آموزش پایدار با حداکثر نرخ یادگیری 0.1 را فراهم می کند.
شناسایی بارهای کاری ناپایدار
اگر میزان یادگیری خیلی زیاد باشد، هر بار کاری ناپایدار می شود. بی ثباتی تنها زمانی مشکل ساز می شود که شما را مجبور به استفاده از نرخ یادگیری بسیار کم کند. حداقل دو نوع بی ثباتی تمرینی ارزش تشخیص دارد:
- بی ثباتی در شروع اولیه یا در اوایل آموزش.
- بی ثباتی ناگهانی در وسط تمرین.
با انجام کارهای زیر می توانید یک رویکرد سیستماتیک برای شناسایی مسائل ثبات در حجم کاری خود داشته باشید:
- یک جارو نرخ یادگیری انجام دهید و بهترین نرخ یادگیری lr* را پیدا کنید.
- منحنی های از دست دادن آموزش را برای نرخ یادگیری درست بالاتر از lr* ترسیم کنید.
- اگر نرخهای یادگیری > lr* بیثباتی از دست دادن را نشان میدهد (از دست دادن در طول دورههای تمرین کاهش نمییابد)، پس رفع بیثباتی معمولاً تمرین را بهبود میبخشد.
هنجار L2 شیب تلفات کامل را در طول تمرین ثبت کنید، زیرا مقادیر پرت می توانند باعث بی ثباتی کاذب در وسط تمرین شوند. این میتواند نشان دهد که چگونه شیبها یا بهروزرسانیهای وزنی را با شدت گیره میدهیم.
توجه: برخی از مدلها بیثباتی اولیه را نشان میدهند و به دنبال آن ریکاوری منجر به تمرین آهسته اما پایدار میشود. برنامه های ارزیابی رایج می توانند با ارزیابی نکردن مکرر به اندازه کافی، این مسائل را از دست بدهند!
برای بررسی این موضوع، میتوانید با استفاده از lr = 2 * current best
برای اجرای کوتاه 500 قدم آموزش دهید، اما هر مرحله را ارزیابی کنید.
اصلاحات بالقوه برای الگوهای ناپایداری رایج
راه حل های احتمالی زیر را برای الگوهای ناپایداری رایج در نظر بگیرید:
- گرم کردن نرخ یادگیری را اعمال کنید. این برای بی ثباتی اولیه تمرین بهترین است.
- برش گرادیان را اعمال کنید. این هم برای بیثباتی اولیه و هم برای بیثباتی در اواسط تمرین خوب است، و ممکن است برخی از اولیهسازیهای بد را که گرم کردن نمیتواند برطرف کند.
- یک بهینه ساز جدید را امتحان کنید. گاهی آدام میتواند بیثباتیهایی را کنترل کند که Momentum نمیتواند. این یک حوزه تحقیقاتی فعال است.
- اطمینان حاصل کنید که از بهترین شیوه ها و بهترین مقداردهی اولیه برای معماری مدل خود استفاده می کنید (نمونه هایی که باید دنبال شوند). اتصالات باقیمانده و عادی سازی را اضافه کنید اگر مدل قبلاً آنها را ندارد.
- عادی سازی به عنوان آخرین عملیات قبل از باقی مانده. به عنوان مثال:
x + Norm(f(x))
. توجه داشته باشید کهNorm(x + f(x))
می تواند مشکلاتی ایجاد کند. - سعی کنید شاخه های باقیمانده را روی 0 مقداردهی کنید .
- نرخ یادگیری را کاهش دهید. این آخرین راه حل است.
گرم کردن میزان یادگیری
زمان استفاده از گرم کردن نرخ یادگیری
شکل 7a یک نمودار محوری فراپارامتری را نشان میدهد که نشاندهنده مدلی است که ناپایداریهای بهینهسازی را تجربه میکند، زیرا بهترین نرخ یادگیری درست در لبه ناپایداری است.
شکل 7b نشان میدهد که چگونه میتوان این موضوع را با بررسی از دست دادن تمرین یک مدل آموزش دیده با نرخ یادگیری 5 برابر یا 10 برابر بزرگتر از این پیک بررسی کرد. اگر آن نمودار افزایش ناگهانی زیان را پس از کاهش پیوسته نشان دهد (مثلاً در مرحله ~ 10k در شکل بالا)، آنگاه احتمالاً مدل از ناپایداری بهینهسازی رنج میبرد.
نحوه اعمال گرم کردن نرخ یادگیری
اجازه دهید 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+ نیاز داشته باشند.
برش گرادیان
برش گرادیان زمانی مفید است که مشکلات گرادیان بزرگ یا پرت اتفاق بیفتد. Gradient Clipping می تواند یکی از مشکلات زیر را برطرف کند:
- بی ثباتی اولیه تمرین (هنجار شیب بزرگ در اوایل)
- بی ثباتی در اواسط تمرین (خروج ناگهانی شیب در اواسط تمرین).
گاهی اوقات دورههای گرم کردن طولانیتر میتواند ناپایداریها را تصحیح کند که بریده شدن نمیتواند. برای جزئیات، به گرم کردن میزان یادگیری مراجعه کنید.
🤖 در مورد بریدن در حین گرم کردن چطور؟
آستانه های کلیپ ایده آل درست بالاتر از هنجار گرادیان "معمولی" هستند.
در اینجا مثالی از نحوه انجام برش گرادیان آورده شده است:
- اگر هنجار گرادیان $\left | g \right |$ بیشتر از آستانه برش گرادیان $\lambda$ است، سپس ${g}'= \lambda \times \frac{g}{\left | g \right |}$ که در آن ${g}'$ گرادیان جدید است.
هنجار گرادیان بریده نشده را در طول تمرین ثبت کنید. به طور پیش فرض تولید کنید:
- نمودار هنجار گرادیان در مقابل گام
- هیستوگرام هنجارهای گرادیان جمع آوری شده در تمام مراحل
یک آستانه برش گرادیان را بر اساس صدک 90 هنجارهای گرادیان انتخاب کنید. آستانه به حجم کار بستگی دارد، اما 90٪ نقطه شروع خوبی است. اگر 90٪ کار نمی کند، می توانید این آستانه را تنظیم کنید.
🤖 در مورد نوعی استراتژی تطبیقی چطور؟
اگر برش گرادیان را امتحان کنید و مشکلات ناپایداری باقی بماند، می توانید آن را سخت تر امتحان کنید. یعنی می توانید آستانه را کوچکتر کنید.
برش گرادیان بسیار تهاجمی (یعنی بیش از 50 درصد از بهروزرسانیها بریده میشوند)، در اصل، روشی عجیب برای کاهش نرخ یادگیری است. اگر متوجه شدید که از برش بسیار تهاجمی استفاده میکنید، احتمالاً باید نرخ یادگیری را کاهش دهید.
چرا نرخ یادگیری و سایر پارامترهای بهینه سازی را هایپرپارامتر می نامید؟ آنها پارامترهای هیچ توزیع قبلی نیستند.
اصطلاح "هیپرپارامتر" در یادگیری ماشین بیزی معنای دقیقی دارد، بنابراین اشاره به نرخ یادگیری و بسیاری از پارامترهای یادگیری عمیق قابل تنظیم به عنوان "هیپرپارامترها" احتمالاً سوء استفاده از اصطلاحات است. ما ترجیح میدهیم از اصطلاح «متاپارامتر» برای نرخهای یادگیری، پارامترهای معماری و سایر موارد قابل تنظیم یادگیری عمیق استفاده کنیم. به این دلیل که متاپارامتر از احتمال سردرگمی ناشی از استفاده نادرست از کلمه "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}\]