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

با تشکر

دسته بندی ها

0 امتیاز

سلام...با تشکر از زحمات دوستانی که زحمت میکشن و پاسخ میدهند....میخواستم بدونم فرق مقدار دهی اولیه gaussian و xavier در چه چیز هست وکلا این دو چه چیزی هستند و در کدام لایه ها کاربرد دارند؟ و چه چیزی باعث میشه که xavier زودتر همگرا بشه؟
با تشکر...

توسط (215 امتیاز)

2 پاسخ

+4 امتیاز
 
بهترین پاسخ

مقدار دهی اولیه وزنها معمولا از توزیع گوسی ب میاگین صفر و انحراف معیار مشخص استفاده میشه. توی روش وزن دهی عادی گوسی مقدار انحراف معیار توزیع رو معمولا به صورت دستی (مثلا 0.01) در نظر میگیرن. ولی توی روش xavier انتخاب انحراف معیار توزیع گوسی با توجه به تعداد نورونهای لایه قبلی انتخاب میشه. اگه تعداد نورونهای لایه قبلی رو fan-in در نظر بگیرید انحراف معیار توطیع گوسی رو متناسب عکس fan-in در نظر میگیره. یعنی هر چه تعداد نورونهای لایه قبلی (fan-in) بیشتر باشه انحراف معیار توزیع گوسی کمتر و درنتیجه مقادیر وزنها کوچکتر خواهند بود.
دلیل این کار هم اینه که وقتی تعداد نورونهای لایه قبلی زیاد باشد در نتیجه تعداد وزنهای متصل به نورون لایه ی کنونی بیشتر میباشد و چون این وزن ها در خروجی نورونهای لایه قبل ضرب و نتایجشان با هم جمع میشود در نتیجه اگر وزنها خیلی بزرگ انتخاب شوند احتمال بالا بودن ورودی نورون لایه ی کنوی بیشتر شده و در نتیجه احتمال این که مثلا برای tanh activation function خروجی به ناحیه اشباع وارد شود بیشتر میشود (که این خود باعث کوچک بودن مشتق و نزدیک صفر بودن مشتق شده و در نتیجه وزنها نمیتوانند به خوبی آپدیت شوند) برای سایر توابع فعال مثل RELU نیز میتواند باعث سختر همگرا شدن شبکه یا حتی واگرایی شبکه شود. اگر مقدار وزنها هم خیلی کم باشن ورودی نورونها احتمال این که به صفر نزدیکتر باشد بیشتر میشود و این خود با توجه به روابط آپدیت وزنها باعث عدم آپدیت وزنها میشود.
البته روش xavier مربوط به سال 2010 هستش و اون زمان روش batch normalization اون زمان معرفی نشده بود. استفاده از batch normalization تا حد زیادی حساسیت به initialize کردن وزن ها رو کاهش داده. در عمل هم معمولا برای شبکه های بزرگ از یک شبکه که قبلا آموزش دیده برای شرایط اولیه استفاده میشه.

توسط (540 امتیاز)
انتخاب شده توسط
سلام...خیلی متشکرم از توضیحات خوبتون...یعنی در لایه بچ نرمالیزیشن ، فرق آنچنانی نداره که از gaussian  استفاده بشه یا xavier?
لایه بچ نرمالایزیشن خودش متوسط و انحراف معیار تو هر بچ رو تنظیم میکنه. معمولا در  iteration های اولیه انحراف معیار رودی activation function  رو یک و میانگین رو صفر میگیره و به مرور و در هر تکرار انحراف معیار و میانگین رو بهبود میده. در نتیجه وقتی از batch normalization  استفاده میشه وابستگی به نوع initialize کردن وزنها کم میشه و اگه از توزیع گوسی عادی هم initialize کنید معمولا جواب خوبی دارید.
کلا سعی کنید همیشه از batch normalization استفاده کنید مخصوصا اگه شبکتون تعداد لایه هاش زیاده و عمیقه. چون این روش فواید زیادی داره از جمله کاهش احتمال overfitting.  از افزایش شدید و ناگهانی خروجی نرونها هم جلوگیری و در نتیجه احتمال واگرا شدن رو کاهش میده و این خودش میتونه به شما اجازه بده که از learning rate بالاتری استفاده کنید و دیگه خیلی نگران افزایش ناگهانی و شدید خروجی نورونها نباشید. افزایش learning rate هم معمولا افزایش سرعت همگرایی تو شبکه رو در پی داره. توصیه میکنم مقاله اش رو بخونید و جدولی که سرعت همگرایی رو مقایسه کرده رو هم نگاه کنید:

https://arxiv.org/abs/1502.03167
خیلی متشکرم...توی این جملتون " به مرور و در هر تکرار انحراف معیار و میانگین رو بهبود میده" چطوری این کار رو انجام میده؟ چرا با همون میانگین صفر و انحراف معیار 1 ، ادامه نمیده؟
چون ممکنه بهتر باشه که وزنهای شبکه نهایی لزوما با خروجی نورون با انحراف معیار یک و میانگین صفر نداشته باشن تو هر بچ. به هر حال اعضای هر بچ رندم انتخاب میشن و در هر اپوک با ترتیب مختلف به شبکه داده میشن. این که لزوما شبکه رو مجبور کنیم انحراف معیار ورودی نورون یک باشه ممکنه جواب بهینه نباشه و نذاره که شبکه به جواب بهتری برسه (در نظر بگیرید که بچ نرمالایز کردن یه جورایی به شبکه و داده ها نویز اضافه میکنه که فایده اش اینه که احتمال overfitting رو کاهش میده ولی از طرفی هم ممکنه رسیدن به جواب بهینه تر رو مشکلتر کنه). درستش اینه که شبکه رو در گام های اولیه فورس کنیم تا مساپل مربوط به initialize کردن رو کاهش بدیم. بعدش به شبکه اجازه بدیم خودش تصمیم بگیره چه میانگین یا انحراف معیاری رو برای ورودی نورنها در نظر بگیره. یه جورایی شبکه یاد بگیره که چه انحراف معیار و میانگینی بیشترین دقت رو ایجاد میکنه.
روش یادگیری انحراف معیار و میانگین هم همون back propagation هستن. ورودی هر نورون علاوه بر وزنها و بایاس دو تا پارامتر دیگه داره (انحراف معیار و میانگین) که با gradient descent آپدیت میشن. انحراف معیار با مقدار یک و میانگین هم با مقدار صفر initialize میشن.
خیلی ممنونم از پاسخ هاس خیلی خوبتون ...واقعا متشکرم...یه سوال دیگه هم دارم ، در آخر اینکه استفاده از xavir  و batch normalization  و gaussian  کلا در سرعت همگرا شدن تفاوت دارند ویا اینکه در دقت و گرفتن نتیجه نهایی هم با هم تفاوت میکنند؟
تو دقت هم تاثیر دارن معمولا. مخصوصا روش batch normalization به نظرم همیشه باید استفاده بشه. البته روش بچ نرمالایزشن روش initialize کردن نیست که بخواهیم با xavier یا گوسی عادی مقایسه کنیم. ولی معولا استفاده از این روش دقت رو هم میتونه بهبود بده.
اها...خیلی متشکرم...عالی...
آقای محبی ببخشید در مورد این جمله ای که فرمودید " اگه تعداد نورونهای لایه قبلی رو fan-in در نظر بگیرید انحراف معیار توزیع گوسی رو متناسب عکس fan-in در نظر میگیره "  نباید اینطور باشه " انحراف معیار توزیع گوسی را متناسب با عکس مجذور fan_in  در نظر میگیره" باشه؟
+3 امتیاز

در ادامه صحبتهای دوستمون، روش Xavier مشکلش این بود که با تحلیل تابع سیگموید به قانونشون رسیده بودن و بعدا توی روش He ، با تحلیل روی تابع ReLu ، پارامترهای دیگه ای برای وزندهی معرفی شد

به طور خلاصه :

روش Gaussian : وزندهی بر اساس توزیع گوسی با میانگین صفر و انحراف از معیار کوچک(با تجربه و آزمون و خطا)

روش Xavier (یا Glorot) : وزندهی بر اساس توزیع نرمال با میانگین صفر با انحراف معیار مجذور (f-in + f-out)/2
یا بر اساس توزیع یکنواخت با دامنه مجذور (f-in + f-out)/6 حول صفر

http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

روش He: وزندهی بر اساس توزیع نرمال با میانگین صفر با انحراف معیار مجذور (f-in)/2
یا بر اساس توزیع یکنواخت با دامنه مجذور (f-in)/6 حول صفر
> http://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdf

برای لایه‌هایی که تابع activation شون از خانواده ReLu هست، بهتره از He استفاده کنید و لایه‌هایی که تابع فعال سازیشون شبیه سیگموید هستن(برای مثال لایه fully connected آخر که وارد softmax میشه)، از روش Xavier
اینکه از توزیع نرمال استفاده کنید یا از یکنواخت، حداقل من هیچ اصول خاصی براش ندیدم

و نکته دیگه اینکه تمامی این روشها بر اساس نگرش بهینه سازی به قضیه نگاه کردن، نه اینکه عملکرد شبکه روی مساله‌ ای که قراره حل بشه، بهتر بشه
یعنی با استفاده از این روشها ، عملیات یادگیری و بهینه سازی شبکه بهتر انجام میشه، اما لزوما به جواب بهتری دست پیدا نمی کنید. البته خوشبختانه با تحلیلهایی که توی 2 سال اخیر روی خاصیت شبکه های عمیق شده و حدس قوی اینه که شما با احتمال زیادی به نقاط بهینه محلی خوب همگرا میشید (به خصوص با SGD)، این نگرش بهینه‌سازی صرف، مشکلی ایجاد نکرده

برای دیدن خلاصه روشهای دیگه هم میتونید این صفحه از keras رو ببینید

https://keras.io/initializers

توسط (1.6k امتیاز)
...