سلام
به طور خلاصه، اگه auto encoder معمولی رو در نظر بگیرید، یکی از کاربردهای اصلیش اینه که یه سری feature از ورودی استخراج کنیم
حالا این feature ها بسته به ساختار auto encoder، می تونن ویژگی های خاصی داشته باشن، مثلا توی حالت معمول، ابعاد این feature ها از ورودی کمتره و در نتیجه یه جور کاهش بعد هم داریم
یا مثلا اگه از denoising autoencoder استفاده کنید، باعث میشه feature هایی اسخراج بشه که تا حدی نسبت به noise ورودی مقاوم باشه
توی contractive autoencoder هم می خوایم دقیقا همین کار رو بکنیم و feature هایی استخراج کنیم که یه خواصی داشته باشن
این خاصیت اینجا اینه که اگه شما ورودی رو یکم تغییر بدید، feature هم یکم تغییر کنه (یعنی اینطوری نباشه مثلا چندتا پیکسل ورودی رو عوض کنید یهو کلا feature ها عوض شه).
برای اینکار میان و اندازه گرادیان feature ها (مثلا لایه میانی) رو نسبت به ورودی به loss اضافه می کنن
اینطوری شبکه باید وزنهایی رو یاد بگیره که هم بتونه از روی feature ها، ورودی رو بسازه (که میشه reconstruction loss) و هم باید این feature ها به نحوی باشن که اندازه گرادیان feature به ورودی کوچیک باشه (این تیکه میشه contractive loss) و همون میشه که اگه ورودی یکم تغییر بکنه، feature هم یکم تغییر می کنه
به عبارت دیگه بهش می گن که ما می خوایم feature هامون خاصیت محلیت (locality) داشته باشن
این مقاله تقریبا به طور کامل روی این بحث و مقایسه با بقیه نوع های auto encoder بحث کرده :
Contractive Auto-Encoders
http://www.icml-2011.org/papers/455_icmlpaper.pdf
این پست هم بد نیست ببینید، خلاصه همین حرفا رو زده
https://www.doc.ic.ac.uk/~js4416/163/website/autoencoders/contractive.html