با فرض اینکه شما با 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