Batch Normalization

در این قسمت میخواهیم با نحوه کارکرد Batch Normalization و اثرات آن در شبکه عصبی آشنا شویم:

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

حالا میخواهیم بدونیم که Batch Norm چطور باعث بهبود فرآیند یادگیری میشه؟

یکی از دلایل این اثر مثبت این است که بچ‌نورم ویژگی‌های ورودی را نرمال‌سازی می‌کند و این نرمال‌سازی باعث تسریع فرآیند یادگیری می‌شود. به جای داشتن ویژگی‌های ورودی با مقادیر متفاوت، با نرمال‌سازی آن‌ها به یک محدوده مشابه از مقادیر، فرآیند یادگیری بهبود می‌یابد. بچ‌نورم با کاهش مقدار تغییرات در توزیع واحدهای مخفی (hidden units) باعث می‌شود لایه‌های عمیق‌تر بهتر بتوانند یاد بگیرند. این امر باعث می‌شود که هر لایه از شبکه به طور مستقل‌تر و مؤثرتر یاد بگیرد و فرآیند یادگیری بهبود یابد. همچنین، بچ‌نورم اثراتی کمی به عنوان یک ابزار تنظیم‌کننده دارد. با افزودن کمی نویز به واحدهای مخفی، بچ‌نورم تاثیری مشابه تنظیم‌کننده‌های دیگر مانند داپ‌آوت دارد که باعث می‌شود لایه‌های پایینی از واحدهای بالادستی بیش از حد وابسته نشوند. در نهایت، نکته‌ای که در مورد بچ‌نورم باید در نظر گرفت این است که این روش داده‌ها را به صورت مینی‌بچ در طول زمان مدیریت می‌کند. بنابراین، در زمان آزمون، نیاز است که روش‌های متفاوتی را برای پردازش و پیش‌بینی‌ها انجام دهیم تا بهترین عملکرد را برای شبکه‌های آموزش دیده شده با بچ‌نورم به دست آوریم. همچنین در TensorFlow میتونید با کد زیر، بچ نرم را به لایه های مدل خود اضافه کنید: tf.keras.layers.BatchNormalization() طبق مقالات، بهتره که بچ نرم را بعد Activation اضافه کنید، اینطور نتیجه بهتری میگیرید. منابع استفاده شده: Normalizing Activations in a Network Fitting Batch Norm Into Neural Networks Why Does Batch Norm Work?  

سوالات:

۱. Batch Normalization چه تاثیری در فرآیند یادگیری شبکه‌های عمیق دارد؟ الف) افزایش تنوع داده‌ها ب) کاهش مشکل محدودیت شیب (vanishing gradient) ج) ایجاد برازش مطلوب‌تر به داده‌های آموزشی د) افزایش تعداد لایه‌های شبکه ۲. چرا Batch Normalization می‌تواند باعث بهبود عملکرد لایه‌های عمیق‌تر شبکه‌های عصبی شود؟ الف) کاهش مقادیر گرادیان ب) کاهش تغییرات در توزیع واحدهای مخفی ج) افزایش وابستگی بین لایه‌ها د) افزایش مشکل محدودیت شیب ۳. Batch Normalization به عنوان یک ابزار تنظیم‌کننده چه اثری در شبکه‌های عمیق دارد؟ الف) افزایش وابستگی بین لایه‌ها ب) کاهش وابستگی بین لایه‌ها ج) کاهش بیش‌برازش (overfitting) د) افزایش بیش‌برازش (overfitting) ۴. بهتر است Batch Normalization را به لایه‌های مدل در TensorFlow کدام زمان اضافه کرد؟ الف) پس از اعمال Activation Function ب) پیش از اعمال Activation Function ج) پس از لایه Dropout د) پیش از لایه Dropout