نرمال‌سازی دسته‌ای

نرمال سازی دسته ای یا batch normalization یک تکنیک است که روی ورودی هر لایه شبکه عصبی مصنوعی اعمال می شود که از طریق تغییر مرکز توزیع دیتاها یا تغییر دادن مقیاس آنها موجب سریعتر و پایدارتر شدن شبکه عصبی می شود.این تکنیک در سال 2015 توسط سرگئی یوفه وکریستین سگدی معرفی شد.

تاثیر کارایی این روش هنوز به‌طور دقیق مشخص نیست ولی باور دارند که موجب کاهش اثر شیفت توزیع داخلی یا *internal covariate shift* می شود. به این صورت که وقتی خروجی یک لایه شبکه میخواهد وارد ورودی شبکه دیگر بشود،به وسیله ی تابع فعال ساز ممکن است شکل توزیع به هم بخورد و هر بار این شکل توزیع در بهینه سازی پارامترهای لایه بعد نیز مؤثر باشد، ولی وقتی از نرمال سازی دسته ای استفاده می شود،اثر توزیع گرفته می شود. با این وجود نرمال سازی دسته ای موجب انفجار گرادیانت می شود که توسط اقداماتی از جمله اتصال پرشی در شبکه های باقی مانده یا residual network حل می شود. امروزه روش هایی از جمله گرادیانت کلیپینگ و تنظیم کننده هوشمند ابرپارامترها درکنار ویا بجای نرمال سازی دسته ای استفاده می شوند و ضعف های این روش را پوشش می دهند.

## اثر شیفت توزیع داخلی یا ''internal covariate shift''
راست|بندانگشتی|داده های آموزش
بندانگشتی|333x333پیکسل|داده های تست

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

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

## روش کار

### انتقال
در یک شبکه عصبی، نرمال سازی دسته ای از طریق یک مرحله نرمال سازی حاصل می شود که میانگین ها و واریانس های ورودی های هر لایه را ثابت(میانگین صفر و واریانس یک مرسوم است.) می کند. در حالت ایده‌آل، نرمال‌سازی در کل مجموعه داده های آموزش انجام می‌شود، اما گاهی اوقات که ما از روش های بهینه سازی مثلا بهینه سازی تصادفی استفاده می کنیم،این عمل ممکن نیست. بنابراین، نرمال سازی به دسته های کوچک یا به اصطلاح mini-batch در فرایند آموزش محدود می شود.

در معادلات زیر میانگین و واریانس هر دسته کوچک به دست آمده است.B نشان دهنده ی هر دسته کوچک و m نشان دهنده ی سایز آن است:

\mu_B = \frac 1 m \sum_{i=1}^m x_i و \sigma_B^2 = \frac 1 m \sum_{i=1}^m (x_i-\mu_B)^2.

برای یک لایه شبکه با بعد d ، ما در ورودی x = (x^{(1)},...,x^{(d)})
 ،هر بعد را جداگانه نرمال سازی می کنیم:

\hat{x}_{i}^{(k)} = \frac {x_i^{(k)}-\mu_B^{(k)}} \sqrt{\left(\sigma_B^{(k)}\right)^2+\epsilon}

\epsilon یک عدد بسیار کوچک است که به منظور صفر نشدن مخرج در نظر گرفته می شود. همچنین زمانی که بخواهیم از دیتای نرمال شده به دیتای اصلی برگردیم،باید از تبدیل y_i^{(k)} = \gamma^{(k)} \hat{x}_{i}^{(k)} +\beta^{(k)} استفاده کنیم. که \gamma^{(k)} و \beta^{(k)}
 به صورت متوالی در طی آموزش،بهینه می شوند.
بندانگشتی|شمایی از پس انتشار در شبکه های عصبی

### پس انتشار
پس انتشار به پدیده ای گفته می شود که در شبکه های عصبی از طریق محاسبه مقدار تابع هزینه و قاعده زنجیره ای سعی در بهینه سازی ضرایب نورون ها دارد. حال در این قسمت ما قصد داریم پیاده سازی نرمال سازی دسته ای را در آن نشان دهیم.\frac{\partial l}{\partial y_i^{(k)}} 
 وابسته به انتخاب تابع فعال ساز ما است:

\frac{\partial l}{\partial \hat{x}_i^{(k)}} = \frac{\partial l}{\partial y_i^{(k)}}\gamma^{(k)} و  \frac{\partial l}{\partial \gamma^{(k)}} = \sum_{i=1}^m \frac{\partial l}{\partial y_i^{(k)}}\hat{x}_i^{(k)}  و  \frac{\partial l}{\partial \beta^{(k)}} = \sum_{i=1}^m \frac{\partial l}{\partial y_i^{(k)}} 

\frac{\partial l}{\partial \sigma_B^{(k)^2}} = \sum_{i=1}^m \frac{\partial l}{\partial y_i^{(k)}} (x_i^{(k)}-\mu_B^{(k)})\left(-\frac {\gamma^{(k)}} 2 (\sigma_B^{(k)^2}+\epsilon)^{-3/2}\right)   و  \frac{\partial l}{\partial \mu_B^{(k)}} = \sum_{i=1}^m \frac{\partial l}{\partial y_i^{(k)}}\frac{-\gamma^{(k)}}{\sqrt{\sigma_B^{(k)^2}+\epsilon}}+\frac{\partial l}{\partial \sigma_B^{(k)^2}}\frac{1}{m}\sum_{i=1}^m (-2)\cdot (x_i^{(k)}-\mu^{(k)}_B) 

و در نهایت \frac{\partial l}{\partial x_i^{(k)}} = \frac{\partial l}{\partial \hat{x}^{(k)}_i}\frac{1}{\sqrt{\sigma_B^{(k)^2}+\epsilon}}+\frac{\partial l}{\partial \sigma_B^{(k)^2}}\frac{2(x_i^{(k)}-\mu_B^{(k)})}{m}+\frac{\partial l}{\partial \mu_B^{(k)}}\frac{1}{m} 

## همچنین ببینید
توزیع نرمال

توزیع نرمال چند متغیره

## منابع

رده:هوش مصنوعی
رده:مهندسی هوش مصنوعی