نرمالسازی دستهای و لایهای
جواب کوتاه
نرمالسازی دستهای یه قدم وسط شبکهست که عددهای خروجی یه لایه رو برای هر دستهی کوچیک هممقیاس میکنه: میانگین دسته رو ازشون کم میکنه و بر پخششون تقسیم میکنه، تا دور صفر و با اندازهی استاندارد باشن؛ بعد شبکه خودش یاد میگیره اگه لازم بود یه کم بزرگتر یا جابهجاشون کنه. مثل وقتی که نمرههای یه معلم سختگیر و یه معلم دستودلباز رو هر کدوم نسبت به کلاس خودش میسنجیم. آموزش رو سریعتر و پایدارتر میکنه و اجازهی نرخ یادگیری بزرگتر میده. نرمالسازی لایهای همین کار رو جای دسته، روی ویژگیهای یه نمونه میکنه و توی ترنسفورمرها استفاده میشه.
دو تا معلم
یه معلم خیلی سختگیره و میانگین کلاسش ۱۲ هست. یکی دیگه دستودلبازه و میانگینش ۱۸. حالا یه ۱۵ از کلاس اولی بهتره یا یه ۱۸ از دومی؟
اگه نمرهی خام رو ببینیم، دومیها همیشه جلوترن. ولی اگه هر نمره رو نسبت به کلاس خودش بسنجیم، یعنی ببینیم چقدر بالای میانگین کلاسشه و پخش کلاس چقدره، هر دو کلاس دور صفر میان و میشه مقایسهشون کرد.
نرمالسازی دستهای همین کار رو وسط شبکه میکنه. عددهایی که از یه لایه بیرون میان رو، برای هر دستهی کوچیک، نسبت به خود همون دسته هممقیاس میکنه. یادتونه توی درس هماندازه کردن ورودیها رو هماندازه میکردیم؟ این همون کاره، فقط برای عددهای وسط شبکه.
سه قدم
فرض کنید یه نورون برای چهار مثال یه دسته، این عددها رو داده: ۲، ۴، ۶ و ۸.
- میانگین: میانگینشون ۵ هست. از همه ۵ تا کم میکنیم: منفی ۳، منفی ۱، ۱ و ۳. حالا وسطشون صفره.
- تقسیم بر پخش: انحراف معیارشون حدود ۲٫۲۴ هست. همه رو بر این تقسیم میکنیم: حدود منفی ۱٫۳۴، منفی ۰٫۴۵، ۰٫۴۵ و ۱٫۳۴. حالا اندازهشون استاندارده.
- دوباره جابهجا: شاید شبکه اصلا عددهای بزرگتری لازم داشته باشه. برای همین دو تا عدد دیگه هم هست که خود شبکه یاد میگیره: یکی برای بزرگ کردن، یکی برای جابهجا کردن. اگه لازم باشه، میتونه عددها رو برگردونه به هر اندازهای که میخواد.
چرا کمک میکنه
- سریعتر و پایدارتر: همین که سال ۲۰۱۵ معرفی شد، آموزش شبکههای عمیق رو خیلی راحتتر کرد.
- نرخ یادگیری بزرگتر: میشه قدمهای بلندتری برداشت، بی اینکه گرفتار محو یا انفجار گرادیان بشیم.
- حساسیت کمتر به شروع: مقدار اولیهی وزنها کمتر مهم میشه.
- یه کم منظمسازی: انگار یه کم جلوی حفظ کردن رو میگیره، و نیاز به دراپاوت رو کمتر میکنه.
جالبه که متخصصها هنوز سر اینکه دقیقا چرا اینقدر خوب کار میکنه بحث دارن. اول فکر میکردن چون جلوی عوض شدن پخش ورودی هر لایه رو میگیره؛ تحقیقهای تازهتر میگن بیشتر به خاطر اینه که سطح تابع خطا رو صافتر میکنه.
موقع استفاده
موقع آموزش، میانگین و پخش رو از دستهی همون قدم میگیریم. ولی وقتی مدل آمادهست و یه نفر یه عکس بهش میده، دستهای در کار نیست؛ فقط یه مثاله. اونوقت میانگین و پخش رو از کجا بیاریم؟
جوابش: از کل داده. موقع آموزش، میانگین و پخش کلی رو هم نگه میداریم، و موقع استفاده همون رو به کار میبریم. اینطوری جواب مدل برای یه ورودی، همیشه یکیه و به بقیهی دسته بستگی نداره.
نرمالسازی لایهای
خروجی یه لایه رو برای یه دسته، یه جدول در نظر بگیرید: هر ردیف یه نمونه، هر ستون یه ویژگی. دو جور میشه نرمالش کرد:
نرمالسازی دستهای هر ستون رو جدا نرمال میکنه، یعنی هر ویژگی رو روی همهی نمونههای دسته. نرمالسازی لایهای هر ردیف رو، یعنی همهی ویژگیهای یه نمونه رو با هم. فایدهاش اینه که به اندازهی دسته هیچ ربطی نداره، حتی با یه مثال تنها هم کار میکنه.
نرمالسازی لایهای یه تیکهی کلیدی ترنسفورمرهاست؛ همون معماریای که مدلهای زبانی بزرگ روش ساخته شدن. درس بعد یه ترفند دیگه برای جلوگیری از حفظ کردن: دراپاوت.
جمعبندی. آنچه از این درس با خودتان میبرید.
- میانگین دسته رو کم کن.
- بر پخش دسته تقسیم کن.
- شبکه یاد میگیره دوباره جابهجا کنه.
- سریعتر، پایدارتر، نرخ بزرگتر.
- لایهای: روی ویژگیهای یه نمونه.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.