Batch Normalization
Batch Normalization را می توان تکنیکی برای بهبود عملکرد و پایداری شبکه های عصبی دانست.
ایده این کار نرمال سازی ورودی هر لایه با کمک میانگین و واریانس می باشد. به شکلی که میانگین اعداد بردار نهایی برابر با صفر و واریانس آن ها برابر با یک شود.
اما این نرمال سازی چگونه به کمک ما می آید؟
همانطور که میدانیم نرمال سازی ورودی شبکه به Learn شدن شبکه کمک می کند. اما در نظر داشته باشید که شبکه یک سریال از لایه ها می باشد و خروجی هر لایه هم ورودی لایه بعدی می باشد، پس هر لایه می تواند برای ما حکم لایه اول یک زیر شبکه کوچک تر را داشته باشد.
مزایای استفاده از Batch Normalization :
تجمع داده ها در مبدا :
پیش تر گفتیم که با فرمول ذکر شده میانگین داده های هر مینی بچ را صفر میکنیم، با اینکار داده ها به سمت مبدا حرکت می کنند. همچنین تغییر واریانس داده ها به یک هم موجب توزیع یکنواخت داده ها در همان قسمت می شود. تصاویر زیر نحوه تغییر ماتریس داده ها را بعد از اعمال میانگین گیری و سپس واریانس، نمایش میدهد :
اما آیا این تغییر داده ها موجب تغییر در نحوه یادگیری مدل می شود؟ در جواب باید بگوییم بله، با نرمال سازی داده ها، Lr در جهت همه ویژگی ها برابر می شود پس در نتیجه یادگیری و کم کردن نرخ خطا با سرعت بیشتری انجام می شود. ( مرتبط با تصاویر ممکن شدن انتخاب Learning Rate بزرگتر )
افزایش سرعت شبکه :
در حالی که training iteration به علت اضافه شدن سربار محاسباتی نرمال سازی مدت زمان بیشتری را صرف می کند، اما چون به طور معمول به همگرایی زودتر شبکه کمک می کند، پس در مجموع موجب افزایش سرعت خواهد شد.
ممکن شدن انتخاب Learning Rate بزرگتر :
با توجه به نمودار ها، با نرمال سازی می توانیم گام های بزرگتری به سمت هدف برداریم!
نحوه Learn شبکه به کمک Batch Normalization و هایپر پارامتر های اضافه شده :
با اضافه شدن پارامتر های گاما و بتا، شبکه می تواند هر پارامتر ورودی را با مقدار قبل نرمال سازی بازیابی کند.
عملکرد Batch Normalization در زمان تست :
این بار در محاسبه نرمال سازی (فرمول ابتدای پست) از میانگینِ میانگین و واریانس زمان Train استفاده می شود.
در آخر شما محل استفاده از این نرمال سازی و فرمول های مربوطه را می توانید ببینید.
نکته : Batch Norm می تواند بعد از Activation Function هم انجام شود. چرا که برای مثال اگر تعداد زیادی از ورودی ها منفی باشد و ما از Relu استفاده کنیم، سربار محاسباتی لایه مورد نظر بسیار کاهش پیدا می کند.
Learning Rate Decay
نرخ یادگیری نزولی موجب افزایش سرعت شبکه برای رسیدن به حالت بهینه می شود. در تصویر زیر شما تفاوت میان نتیجه استفاده چند استراتژی مختلف در انتخاب Learning Rate را می بینید :
انتخاب Leraning rate های بزرگ ممکن است در گام های اول موجب نزدیک شدن ما به هدف شود، اما در ادامه مدام باعث تلورانس ما در اطراف Global Optimum خواهد شد. (شکل سمت راست)
همچنین برعکس، انتخاب Lr بسیار کوچک زمان رسیدن به هدف را ممکن است بسیار طولانی کند و عملا انتخاب مناسبی نخوهد بود. (شکل سمت چپ)
یکی از ایده های حل اشکالات روش های بالا، استفاده از Lr پویاست، به طوری که مقدار آن به شکل خطی و یا حتی لگاریتمیک کاهش یابد. تا در ابتدا با گام های بزرگ به سمت جواب حرکت کنیم و رفته رفته با نزدیک تر شدن به جواب مسئله، Lr را کاهش دهیم. (شکل وسط)
روش های زیادی برای چگونگی کاهش میزان Lr ارائه شده است، Step decay که به صورت پله ای از اندازه Lr میکاهد و یا Cyclical learning rates های گوناکون. ( اطلاعات بیشتر در مورد انواع روش های پیاده سازی Lr)
و اما یکی از فرمول های نزولی این روش بر حسب تعداد epoch ها :
شبکه های اجتماعی