به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

+1 امتیاز

سلام
دوستانی که به معماری های دیپ تسلط کافی دارند لطف کنند بفرمایید معایب و مزایای این لایه رو ذکر کنند و در حال حاضر بیشتر استفاده میشه یا خیر ؟ چرا ؟
همانطور که میدانیم توزیع داده هامون shift پیدا میکنه در بین این همه حجم محاسباتی که در شبکه های عمیق داریم حال اگر در حال حاضر استفاده نمیشود پس به جای این چه لایه ایی یا ایده ایی بکار میبرند ؟ بنظر من اگر استفاده نشود از یه طرف نمیتونیم شبکه رو عمیق تر کنیم و از یه طرف واقعا سرعت همگرایی یا تریننیگ افت پیدا میکند و شاید دقت هم ، با این حساب به جای این چه ایده ایی بکار برده شده ؟

توسط (389 امتیاز)
ویرایش شده توسط
سلام . علی آقا زحمت کشید و توضیحات خوبی داد من در حد کامنت یکسری توضیحات تکمیلی میدم .
تقریبا تمام معماری ها از بچ نرمالیزیشن استفاده میکنن (یکسری هم هستن که ندارن ولی خب داستان اونا کاملا فرق میکنه)
خوبی این لایه که مشخصه . بدی این لایه اینه که سربار محاسباتی تحمیل میکنه. البته این سربار با پیاده سازی های بهینه سمت سخت افزار رفته رفته کم میشه (نسبت به قبل خیلی کمتره البته).
میشه بچ نرمالیزیشن نباشه اما باز معماری عمیق داشت ؟ جواب بله هست. اما احتمالا( شاید) کارایی ارائه شده بخوبی بچ نرمالیزیشن نباشه
یک نکته مهم اینجاست که قرار نیست الزاما همیشه دنبال عمیق تر کردن باشید شما. شما همیشه نیازمند یه میزان عمق مناسب هستی. بیشتر از یک حد خاص سر بار اضافی داری تحمیل میکنی
پس با این حساب هرچقدر لایه بچ نورمالیزیشن زیاد بکار ببریم از اونور هم بچ سایز هم باید کم شود ؟
سلام . نه ربطی نداره.اتفاقا اندازه بچ شما باید متناسب باشه. بچ های کوچیک کلا پیشنهاد نمیشن چون هم گرادیان ناپایدار تری رو سبب میشن و هم از نظر قرابت با توضیع داده ورودی فاصله دارن و این خوب نیست.
عذر میخام این چه اشکالی داره اگر با توزیع داده ها فاصله داشته باشند ؟
خیلی خلاصه یعنی یکی داره ساز خودشو میزنه یکی دیگه رقص خودشو میکنه. مثل این میمونه امار و اطلاعات یک چیزه یکی مثل بعضیها میاد یه چندتاش رو دست چین میکنه! که همخونی نداره با اصل داستان! اصل داستان میگه طرف داره میمیره! اون امار نادقیق میگه نه بر اساس چیزی که من دارم همه چی خوبه! (مثلا شما امار موتورها و راکتورها رو در یک نیروگاه رو داری، بر اساس اون میشه مشخص کرد شرایط بحرانی هست یا نیست مثلا و مثلا با در نظر گرفتن نمونه های مختلف به یک نتیجه گیری میرسی که چقدر تغییرات باید لحاظ بشه مثلا بیایی سوخت بیشتر کنی کمتری کنی، حالا شما فکر کن این امار دستخوش تغییر بشه یا با امار اصلی فاصله پیدا کنه چه اتفاقی می افته؟ یک فاجعه. یا مثلا تو مهمونی امار درست مثلا 100 نفر بزرگسال 20 نفر بچه! این درسته! اینو شما تغییر بدی! بدی دست سفارش دهنده چی میشه ؟ اگه فاصله بین امار شما و امار اصلی زیاد باشه فاتحه اون مهمونی خونده اس!
توزیع یک داده اطلاعات زیقیمتی در مورد رخدادها میده. چه چیزی مورد انتظاره و چه چیزایی نیست.( برای همینه که سعی میشه توزیع ورودی حفظ بشه حدالامکان . شما میخوای همون اطلاعاتی که شما بهش دسترسی داری تو اول صف اون اخری که اخر صف هست هم داشته باشه. چون یک چیزی از اخریه میخوای! داری یک پیامی منتقل میکنی و اون بر اساس این اطلاعات تصمیم میگیره. مثلا اینجا میگی "شیر خوب" تا برسه به انتهای صف میشه " سیر توپ" ! اونم بر همین اساس  عمل میکنه. در مورد توزیع و بچ نرمالیزیشن فکر کنم همینجا قبلا سوال مشابه بوده که من اونجا توضیح دادم  اونو ببینید خوبه.
ممنون از توضیحات خوبتون

1 پاسخ

+3 امتیاز

در سال 2015، لوف و همکاران batch normalization را معرفی کردند. در پروسه آموزش با گرادیان نزولی تصادفی ، دسته های کوچک نمونه های آموزش با توجه به میانگین و واریانس آنها نرمال میشن ،این امر باعث میشود نرون ها ،ورودی با توزیع مختلف در هر گام آموزش دریافت نکنند. این تکنیک به اندازه وزن ها حساس نیست در نتیجه میتوان از توابع فعال سازی اشباع پذیر مانند Sigmoid و Tanh بدون نگران بودن در مورد پدیده ناپدید شدن گرادیان نیز استفاده کرد.
Batch norm در واقع نیز مثل یه تکنیک regularization عمل میکنه (یه جورایی به دلیل اعمال نویز در سطح شبکه)
آموزش به مقدار دهی اولیه وزنها و نرخ یادگیری ،کمتر حساس هست و میتوان مقدار آن را افزایش داد . در نهایت با استفاده از این تکنیک سرعت آموزش پنج برابر سریعتر میشود و دقت را 2 درصد افزایش میدهد.

اما این تکنیک هر چند مزایای بسیاری داره اما مشکلاتی رو نیز داره که در ادامه چند تاشو میگم
به عنوان مثال در حین اجرای پروسه آموزش در صورتی که اندازه minibatch کوچیک باشه تاثیر batch norm کاهش پیدا میکنه و مواردی از این دست که در این مقاله بهش اشاره شده.

این مقاله یه متد به نام Batch Renormalization رو معرفی کرد.

از طرفی هنگامی که ما از batch norm در کنار تابع فعال ساز ELU در معماری RESNET استفاده میکنیم ، میتونه کارایی این مدل رو کاهش بده

کار دیگر :معرفی virtual batch normalization در این مقاله

توسط (415 امتیاز)
چرا باید از sigmoid استفاده کرد؟ حتی از نظر بیولوژیک هم relu رفتار بهتری از sigmoid داره
اینم در نظر نگیریم، مشکل سریع اشباع شدنش توی دو طرف طیف یه نقطه ضعف اساسی محسوب میشه
به جز بحثی که آقای حسن پور در مورد سربار محاسباتی گفتن، یکی دیگه از مشکلاتش اینه که وابسته به دیتاسته، که این مشکل هم توی layer normalization سعی شده که حل بشه
در مورد حساسیت هم حرفتون درسته، یعنی وقتی bn استفاده بشه، کمتر نگران این هستیم که مثلا یه جوری مقداردهی اولیه داشته باشیم که نورونها توی بازه خوش رفتار خودشون بمونن و ....
بسته به ساختار شبکه میشه نرخ یادگیری رو هم افزایش داد، اما با همون نرخ قبلی هم بر اساس چیزایی که توی مقاله اصلی بحث شده و توی عمل هم می تونید ببینید، همگرایی شبکه سریعتر میشه
چرا وابسته به دیتاست هست ؟ منظورتون اینکه میانگین و واریانس ممکن است از دیتاستی به دیتاست دیگه فرق داشته باشه ؟ اگر اینطوری باشه تعداد بچ سایز هم تاثیر باید داشته باشه
بله چون مقادیر میانگین و واریانس از هر mini batch بدست میاد که معمولا رندوم به دست میان
در نتیجه دیتاست و ترتیب و سایز mini batchها  هم در هنگام training و هم در تست (به خاطر running average ی که از training به دست میاد) تاثیر گذاره
البته این موضوع خودش یه علت اینه که batch normalization تاثیر regularization داره
البته اینم بگم که با وجود این بحث وابستگی به دیتاست و minibatch،ایده layer normalization هنوز به خوبی batch normalization توی شبکه کانولوشنی کار نمی کنه
...