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

با تشکر

دسته بندی ها

+2 امتیاز

سلام عرض ادب
دوستان اگر امکان دارد فرق بین این دوتا لایه رو بگید لایه پولینگ که قابل یادگیری نیست و یک فانکشن ثابتی هست در صورتی که لایه استراید کانالوشن قابل یادگیری و downsampling هم هست چرا از این لایه بجای پولینگ استفاده نکنیم ؟

توسط (389 امتیاز)
ممنون از شما مطالب خوب و مفیدی بودند

3 پاسخ

+3 امتیاز

با سلام و درود
وقتی از convolution‌ استفاده می کنیم مقدار feature map‌ بزرگتری داریم و سپس با استفاده از max-pooling از بین این feature‌ ها قویترین رو انتخاب می کنیم به نظر بنده این عمل بهتر از این است که با strided convolution به feature map‌کوچکتری برسیم. در واقع با استفاده از strided convolution همپوشانی را کمتر کرده و ممکن است بعضی از ویژگی ها رو از دست بدهیم.
بطور مثال فرض کنید شما با فیلتر 33 با stride دو یا سه میخواید ویژگی استخراج کنید؛ اونوقت ممکنه مثلا با فیلتر 33 ای که یک خط کوچک سه پیکسلی و افقی را استخراج میکند را اعمال کنید و خط مورد نظر(بعلت وجود stride) دقیقا زیر فیلتر قرار نگیرد و این خط دیده نشود.
ولی در حالت اول که از vanila convolution‌ و max-pooling استفاده می کنید قطعا ویژگی مورد نظر را از دست نخواهید داد.

توسط (830 امتیاز)
+4 امتیاز

اگه صحبت های آقای هینتون در این ویدیو با عنوان «What is wrong with Convolutional Networks» رو گوش کنید ایشون با ایده اساسی شبکه های کانولوشن که اشتراک پارامتر ها و اسپارسیتی کانکشن ها موافق هستند اما صرفا چند تا از خصوصیات شبکه های کانولوشن رو سرزنش می‌کنند که یکی از این موارد maxpooling هست و دلیلش دور انداختن اطلاعات ارزشمند مکانی عکس هست، مشکلی که سعی شده با ایده کپسول برطرف شه.

البته این مشکل در جامعه یادگیری عمیق در همان اوایل مطرح شد و برخی از محققین از
strided convolution
به جای max pooling استفاده کردند به عنوان مثال نویسندگان در این مقاله
https://arxiv.org/pdf/1412.6806.pdf
نشون میدن استفاده از لایه کانولوشن با افزایش طول گام (stride) نه تنها باعث کاهش دقت در بسیاری از benchmark ها نمیشه بلکه می‌تونه جایگزین maxpooling شه . هر دو این تکنیک داده ها رو «خلاصه» میکنند مزیت strided convolution اینه که با توجه به ماهیت شبکه های کانولوشن عمومی‌تر هست و با توجه به وجود پارامتر های قابل یادگیری شبکه یاد می‌گیره که چگونه خلاصه سازی کنه در حالی که max pooling یک سیاست «غیر قابل انعطاف پذیر » یا سخت رو اعمال می‌کنه . اما مشکلی که با strided convolution وجود داره اینکه که زمان آموزش و آزمایش رو افزایش میده

توسط (415 امتیاز)
عذر میخام یعنی کپسول جایگزین لایه پولینگ میشه ؟ اصلا کپسول چی هست؟
در مقاله capsnet مسیریابی براساس قرارداد یا routing by agreement  جایگزین maxpooling میشه .
(هر کپسول موجود در یک لایه، با ضرب خروجی خود در یک ماتریس وزن، یک بردار پیش بینی تولید می کند. اگر بردار پیش بینی دارای یک محصول مدرج بزرگ با خروجی یک والد ممکن باشه، برای والدهای دیگر محصول کوچکتری خواهد داشت.)

در این مقاله مواردی مطرح میشه که خارج از بحث سوال شما هست اما به صورت کلی برای بدست آوردن اطلاعات یک تصویر، مجموعه فیلترهایی به نام «کپسول» آموزش داده شده اند تا در صورت مشاهده ترکیب خاصی از ناحیه ها/بخش ها در تصویر، فعال/بیشتر تحریک شوند. این کپسول ها یک بردار فعالیت تولید می کنند که همان طول مجموعه ویژگی های استخراج شده با کپسول و نشان دهنده میزان تحریک کپسول است.

به صورتی که یک کپسول می تونه نشان دهنده دقت هندسی یک عدد در یک تصویر باشه(در MNIST/در این مورد هر مجموعه داده عددی) و برای مثال با مشاهده عدد 1 تحریک شود.

حالا، شما چند کپسول از این تصویر بدست آورده اید که نشان دهنده مشخصات مختلف تصاویری است که امکان برقراری ارتباط مستقیم این تصور را با مجموعه طبقات ارائه شده توسط شما ( با عنوان PrimaryCaps) فراهم می کند.
در گام بعدی،  فرایندی به نام «مسیریابی پویا» [dynamic routing] معرفی میشه که در آن تحریک های این کپسول ها را به صورت اطلاعات، به لایه جدیدی از کپسول ها هدایت می کنیم که از N کپسول تشکیل شده است. ولی این کپسول ها به جای تحریک شدن/فعال شدن با ویژگی های تصویر، تنها با دریافت ترکیبی از فعال سازی ها/تحریکات ناشی از لایه قبلی کپسول ها تحریک می شود.

لایه نهایی کپسول ها دقیقاً نماینده تمام N طبقه ایست که مجموعه طبقاتی را نشان می دهد که ما می خواهیم یک تصویر را در آن مجموعه طبقه بندی کنیم. از اینرو، ما اطلاعات استخراج شده را از یک لایه کپسول تحلیلگر تصویر به لایه ای هدایت می کنیم که نشان دهنده طبقه تصویر است.

این مقاله سعی داره نقاط ضعف شبکه های کانولوشن رو پوشش بده ، یکی دیگر مشکلات cnn تحمیل روش بالا به پایین برای یادگیری ویژگی های یک تصویر هست از طرفی ترکيب خاصی از پیکسل ها یا یک پیکسل می توانه CNN را به سادگی فریب بدهد. مثل حمله تک پیکسلی! این روش ۷۸.۸ درصد نمونه های آزمایش با دقت اطمینان ۹۸.۷ درصد تحت تاثیر قرار می‌دهد .
https://arxiv.org/abs/1710.08864

ایده اصلی این مقاله شهودی تر کردن ساختار نورون ها بر اساس اطلاعات موجود هست


کپسول ها 2 خروجی دارند: احتمال وجود شیئی از آن نوع و ویژگی های تعمیم یافته شیئ (وضع، جهت، مقیاس، رنگ و غیره).

موردی دیگری که وجود داره فعال سازی گروهی هست. هر کپسول بردارهای پیش بینی چندوجهی را از کپسولهای لایه زیرین دریافت می کند. که می تونیم اون رو به صورت یک ساختار والد فرزند (DAG) در نظر بگیریم.
https://en.m.wikipedia.org/wiki/Directed_acyclic_graph

مقاله زیر به خوبی برخی از جزییات رو پوشش می‌دهد

https://hackernoon.com/what-is-a-capsnet-or-capsule-network-2bfbe48769cc
+3 امتیاز

سلام
اگه فقط از نقطه نظر کاهش بعد نگاه کنید pooling معمولی بهتره چون سربار کمتری داره
اگه از نقطه نظر فراهم کردن invariance جزئی نگاه کنید باز pooling عادی (مکس پولینگ) بهتره
اگه از نقطه نظر انتخاب ویژگی بهتر از بین بقیه نگاه کنید باز pooling (مکس پولینگ) بهتره
توضیح های خیلی خوبی آقای نصیری و علی آقا دادن.
بحث کپسولها که یک مبحث کاملا جداست و بصورت جداگانه باید بحث بشه هرچند در مقاله هم بحث routing رو با مکس پولینگ قیاس کردن و از نکات ضعفش گفتن نسبت به ایده جدید منتها دو نکته اینجاست. نکته اول اینکه بدون در نظر گرفتن مفهوم ارائه شده جدید، در بستر فعلی مکس پولینگ (و پولینگ بطور کلی) بهتر عمل کرده و بهبودهای مختلفی در همون routing ناکامل (نسبت به مفهوم جدید) هم داشته . برای همین هم خود آقای هینتون هم قبلا اینجا در مورد پولینگ و نظرش در این رابطه گفته که یکی از بدی های شبکه کانولوشن بحث پولینگشه و بدتر اینه که داره خوب کار میکنه! اشاره ایشون بحث کلی کاستی معماری فعلی کانولوشنی بود و اینجا هم همینه . ایده فعلی هنوز خیلی کار داره تا بالغ بشه و وقتی شد مسیر کلا عوض میشه. تا اون زمان برسه ، بر اساس ترند فعلی و صحبتهایی که شد پولینگ گزینه بهتری هست

در مورد strided convolution این ایده مطرح میشه که چون لایه کانولوشن هست و پارامتر قابل یادگیری در نتیجه بطور خودکار وقتی از استراید بیشتر استفاده میشه شبکه میره بدنبال یادگرفتن فیلترهای بهتری که عمل خلاصه سازی رو انجام بده در اون لایه. یعنی فیلترهای اون لایه خود بخود صرفا بخاطر استراید بیشتر این مفهوم رو پیاده سازی میکنن. چیزی در عمل وجود نداره که موید این قضیه باشه و نشون بده دقیقا فیلتری داره یادگرفته میشه که تا یک عمل خلاصه سازی رو انجام بده. صرفا این یه بحث نظری هست که بعضی ها حدس میزنن ولی شخصا مقاله یا طرح متقن یا کار عملی در این مورد خاص که بیاد اینو نشون بده ندیدم. برای همین جای بحث داره این مطلب . وقتی لایه کانولوشنی اضافه میشه در حال حاضر چیزی وجود نداره که مشخص کننده یک رفتار خاص در یک سطح خاص از شبکه باشه (بطور عادی) مثلا من بیام فقط یه تغییر جزئی در یک لایه کانولوشن بدم یا یه لایه اضافه کنم تا حتما در لایه مورد نظر فلان فیلتر برای فلان کار تشکیل بشه و کار خاصی هم انجام ندم. بحث این نیست که این کار شدنی نیست بحث سر چگونگی انجام اون هست.(دقت کنید در مقاله مورد نظر هم اینها بحث رو بر سر downsampling گذاشتن و گفتن این بخودی خود خوبه و برای همین میشه مکس پولینگ رو کنار گذاشت و دقت خیلی خوب (و بعضا بهتر) هم گرفت با توجه به تستهاشون البته. روی بحث معادلسازی وارد نشدن هرچند توضیح مختصری البته دادن در پاورقی و اشاره ای به تفاوت ماهوی بین این دو دادن و البته رد شدن ازش). دقت کنید که ما این بحث یادگیری خودکار فیلترها برای یک کار خاص رو قبلا داشتیم و الانم داریم . تقریب پولینگ و امثالهم هم بوده مثل این و این که در مقاله هم بهشون اشاره شده منتها بحث سر ادعای مطرحی بصورت فوق هست که صحیح نیست به این صورت. میشه یه لایه کانولوشن با استراید بیشتر رو مثل سایر لایه ها دید که صرفا عمل کاهش ابعاد رو + اعمال تابع غیرخطی(در صورت وجود) و احتمالا افزایش سطح انتزاع در نظر گرفت مثل قبل(در غیر اینصورت کاهش ابعاد و یک ترنسفورمیشن خطی خواهیم داشت).
یک نکته خیلی مهمی که در این جور بحث ها وجود داره توجه دقیق به علت زیرین هست. مثلا من در معماری یک تغییری میدم که باعث بهبودی میشه یا تغییری میدم که بدتر میکنه نتیجه رو منتها دلیل اصلی اون چیزی که در ظاهر به چشم میاد نیست. بعنوان مثال دلیل عدم بهبود میتونه صرفا بخاطر عدم استفاده صحیح از پولینگ باشه در جای مناسب یا عدم معادل سازی صحیح باشه. مثلا بجای اینکه یک لایه جدید قبل از پولینگ اضافه بشه، برای یکسان سازی تعداد پارامتر قابل یادگیری، این ظرفیت بین لایه ها پخش میشد و بعد قیاس صورت میگیرفت.
بهترین کار برای یک نفر اینه ، با همه این داستانهایی که مثلا من نوعی گفتم یا مطالبی که در مقالات هست، خود فرد هم شخصا تستهای مختلفی انجام بده و بر اساس اخرین دستاوردها چک کنه ببینه آیا هنوز این قائده پابرجاست یا نه .بهبودی هست یا نه ؟ البته با در نظر گرفتن دقیق شرایط . مقاله striving for simplicity مقاله قدیمی ای هست و الان میشه از خیلی جهات دوباره موارد مطرحی رو مورد بررسی قرار داد و نتیجه رو شخصا چک کرد.

پ.ن : در تعداد پارامتر یکسان ، دقت maxpooling از strided convolution بهتره .

صحبت های اقای هینتون در مورد کاستی های شبکه کانولوشن و ایده کپسولها (سال 2014 ) که علی آقا عنوان کردن : لینک

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