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

با تشکر

0 امتیاز

سلام دوستان عزیز، من خواستم بدونم کسی اطلاعاتی یا مطلب آموزشی( فارسی باشه بهتر) درباره sparse autoencoder داره ؟؟؟ یا اگه کسی بتونه حداقل توجیم کنه در این موضوع خیلی خیلی ممنون میشم ، واقعا خیلی نیازمند این موضوع هستم .

سوال شده توسط (102 امتیاز)

2 پاسخ

+1 امتیاز

سلام
این نت های کلاس یادگیری ماشین از اندرو ان جی، می تونه برای شروع مفید باشه
> https://web.stanford.edu/class/archive/cs/cs294a/cs294a.1104/sparseAutoencoder.pdf

قسمت سومش در مورد autoencoder و مفهوم sparsity توی اونها توضیح داده
ولی به طور خلاصه، ایده کلی اینطوری که می خوایم اکثر نورون های لایه میانی که یه جوری نمایش دهنده کد یا فشرده شده ورودی هستن، خاموش باشن
اینکه خاموش برای یه نورون به چه معنیه، بستگی به تابع activationش داره، مثلا برای tanh ، اگه روی منفی 1 اشباع بشه میشه گفت نورون خاموشه، یا برای sigmoid، روی صفر
یا مثلا برای relu اگه ورودی کوچیکتر از صفر باشه، نورون خاموش می شه

وقتی که فعالیت نورون های لایه میانی یا کد، به صورت sparse در میاد، تحلیل اینکه به چه چیزی از ورودی دارن واکنش نشون میدن راحت تر میشه یا اینکه خیلی از نورون ها با هم فعال باشن و هر کدوم یه تیکه کوچیک از اطلاعات رو نگه داره
که البته این ایده کلی در مبحث sparsity هستش و فقط مختص sparse autoencoder ها نیست

نکته بعدی اینه که چه طوری کاری کنیم که فعالیت نورون ها به صورت sparse در بیاد. توی همون مقاله اندرو ان جی، یه ایده رو مطرح کرده که مثلا کاری کنیم که به طور میانگین، خروجی یه نورون در بازه خاموش بودن اون باشه(یا اینکه فعالیتش ضعیف باشه). که بعد میشه این ترم رو به تابع خطا اضافه کرد و گرایان براش حساب کرد و ....
اما این روش متداول و بدیهی این کاره و از طریق های دیگه هم میشه sparsity برای فعالیت نورون ها ایجاد کرد

یه پست دیگه هم که می تونه مفید باشه و visualization های جالبی هم از تاثیر sparsity روی feature هایی که شبکه یادگرفته داره اینجاست :

https://www.doc.ic.ac.uk/~js4416/163/website/autoencoders/sparse.html

پاسخ داده شده توسط (1.6k امتیاز)
Stacked Auto Encoder هم توضیح میدید؟فرقش با این ها چیه؟توی بیشتر مقاله ها SAE که نوشته شده مشخص نیست منظور کدوم هست
اگر که از اول مقاله متن رو دنبال کنید حتما مشخص کرده که منظور از SAE چیه
اما منظور از stacked auto encoder اینه که به جای اینکه مثل مثال هایی که زدیم، فقط ورودی، خروجی و یک لایه پنهان داشته باشیم، چندین لایه پنهان داریم. حالا اینکه چه طوری این لایه ها آموزش داده میشن متفاوته. مثلا یه کاری که بهش layerwise training میگن اینه که اول یه autoencoder یک لایه آموزش بدید، بعد خروجی لایه اول رو بگیرید به عنوان ورودی یه autoencoder یک لایه دیگه و ....
به این روش که هر دفعه یک لایه اضافه می کنید میگن stack کردن، برای همینه اسم stacked autoencoder در اومده. ولی در عمل هیچ الزامی به آموزش لایه به لایه نیست و این روشی که گفتم یکی از چندین روش آموزش deep autoencoder هاست
+1 امتیاز

با فرض اینکه شما با autoencoder آشنایی دارید :

اساسا وقتی شما یک autoencoder رو آموزش میدین نرون های موجود در لایه های پنهان به صورت وسیعی برای بیشتر نمونه های آموزشی فعال می‌شوند اما ما این ویژگی رو نمی‌خواهیم .در واقع نیاز به متدی داریم که نرخ فعال شدن نورون ها رو پایین بیاوریم در نتیجه هر گروه از نرون ها فقط برای بخش کوچکی از نمونه های آموزشی فعال شوند به این محدودیت sparsity constraint گفته میشه .به این علت بهش sparse گفته میشه ، چون هر نرون برای بخش مشخصی از ورودی فعال میشود .

به عنوان مثال شخصی رو در نظر بگیرید که به اصطلاح همه کاره و هیچ کاره هست ، کلی کار رو بلده انجام بده اما در هیچ کدوم تخصص چندانی ندارهاز طرفی فردی رو در نظر بگیرید که فقط یک کار خاص می‌تونه انجام بده و در اون کار تخصص داره !

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

در Sparse Autoencoder لازم نیست حتما تعداد نرون ها موجود در لایه های پنهان نسبت به ورودی کمتر باشد تا ویژگی های موثر رو یاد بگیریم ، حتی می‌تونیم تعداد نرون های بیشتری داشته باشیم و autoencoder ما به خوبی عمل خواهد کرد از طریق اعمال یک سری محدودیت ها که
sparsity constraint نام دارد .

در این متد تعداد نرون های فعال در لایه های پنهان رو از طریق محدودیت‌هایی که وضع میکنیم ، کنترل میکنیم

به عنوان مثال فرض کنید ۱۰۰ نرون در لایه پنهان داریم و به صورت میانگین میخواهیم فقط ۱۰ نرون برای یک بردار ورودی فعال شود ، در این حالت sparsity ما ۱۰ درصد است .یکی از راههای اعمال این محدودیت های استفاده از واگرایی کولبک-لیبلر (KL-Divergence) در تابع هدف هست.طریقه اعمال محدودیت ها به خوبی در این مقاله شرح داده شده است :
http://ufldl.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

تفاوت بین انواع autoencoder ها مثل stacked و sparse به صورت خلاصه در این لینک شرح داده شده

https://medium.com/towards-data-science/autoencoders-are-essential-in-deep-neural-nets-f0365b2d1d7c

پاسخ داده شده توسط (415 امتیاز)
ویرایش شده توسط
...