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

با تشکر

دسته بندی ها

0 امتیاز

با سلام و وقت بخیر
مقاله مربوط به DensNet رو مطالعه کردم ادعایی که این مقاله داره اینکه برای هر لایه نقشه های ویژگی همه لایه های قبلی به عنوان ورودی در نظر گرفته می شود و البته در میان اینها نیز از conv, polling و relu استفاده کرده . من متوجه نمی شم با اینکار چه طوری موفق به کاهش پارامترها شده . لطفا برام این مطلب را روشن نمایید.

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

1 پاسخ

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

سلام

همینطور که ذکر کردید، در شبکه‌های DenseNet، بلاک‌هایی وجود داره که در اون هر لایه، ورودی خودش رو از تمامی لایه‌های قبل از خودش میگیره. و بین هر دو تا بلاک Dense هم لایه‌هایی به اسم Transition وجود داره که عملیات Pooling و ... توش اتفاق می افته و سایز feature mapها کاهش پیدا می کنه و نرمالیزشن و ....

در عمل اگه به طور معمولی این ایده رو پیدا کنیم که هر لایه رو به تمامی لایه‌های قبلش وصل کنیم و این اتصال‌ها وزن داشته باشه، یعنی مثل ResNet خروجی‌ لایه‌های قبلی با هم فقط جمع نشن، و دقیقا تمامی خروجی ها رو بذاریم کنار هم بدیم به لایه فعلی، پارامترها سریعا زیاد میشه
اما ایده‌ای که مطرح شده اینه که به دلیل استفاده بهینه(!) از ویژگی‌هایی که توی هر لایه بدست اومده (feature reuse)، می تونیم تعداد feature mapهای هرلایه رو خیلی کاهش بدیم و به چیزی در حدود 12 تا برسیم. یعنی عرض شبکه رو خیلی کم می کنیم
و اینطوری پارامترهای شبکه خیلی کم میشه.

برای مقایسه ، توی شبکه VGG-16 ، اگه اشتباه نکنم تعداد feature map ها از 64 شروع میشه و به 512 هم در لایه‌های آخر می رسه ولی اینجا حتی به 64 تا هم نمی رسیم(فکر می‌کنم حداکثر تا 40 تا feature map توی مقاله مورد بحث قرار گرفته که نتایج بدست اومده هم قابل توجه هستش)، در عوض میتونیم عمق شبکه رو خیلی افزایش بدیم
و از نظر تئوری خیلی روی عمق شبکه بحث شده که مثلا شبکه‌هایی با عمق k، به طور نمایی از شبکه‌هایی با عمق k-1 قویتر هستن

توسط (1.6k امتیاز)
انتخاب شده توسط
سلام خیلی ممنون که وقت گذاشتید.
نوشته های شما کاملا متین و دقیق ولی
اشکال من دقیقا همینه که متوجه نمی شم که چه طوری از ویژگی هایی که توی هر لایه بدست اومده به صورت بهینه استفاده کرده و تعداد آنها را کم کرده!!!!!!!!!!!!
خواهش میکنم
واقعا هیچ کاره خاصی انجام نشده. الان هر لایه از تمامی لایه‌های قبلش توی هر dense block ورودی میگیره
طبیعیش اینه که این کار تعداد پارامترها رو زیاد میکنه
اما نویسندگان استدلال اوردن که با این کار، می تونید عرض شبکه (یا تعداد feature map های هر لایه رو کم کنیم) و اینطوری خیلی تعداد پارامترها رو کم کردن
مثلا قبلا اگه 100 تا feature map توی هر لایه داشتید، الان توی هر لایه 12 feature map بیشتر ندارید. حالا این 12 ها رو هم که کنار هم قرار بدید مثلا برای 5 لایه، میشه 12*5 یعنی 60
یعنی لایه پنجم 60 تا ورودی میگیره و 12 تا خروجی میده. لایه چهارم 48 تا میگیره و 12 تا خروجی میده و .... ، خلاصه یعنی خیلی تعداد خروجی ها کم شده
البته توی این مثال ساده، من تعداد کانالهای تصویر ورودی رو در نظر نگرفتم
اصلا دنبال موضوع پیچیده ای توی مقاله نباشید، ایده اصلی همینه، همه لایه‌ها رو به هم وصل می‌کنیم، خب چی کار کنیم تعداد پارامترها خیلی زیاد نشه؟ تعداد خروجی های هر لایه رو کم می کنیم
ببینید من درست متوجه شدم که در در بلاک های متراکم و لایه انتقال چه اتفاقاتی می افته.
1- لایه L ام نقشه های ویژگی همه لایه های قبلی را به عنوان ورودی دریافت می کند  و آنها به صورتی کنار هم قرار می دهد(کنار هم ردیف می کنه) که همه ان ماتریس ها به یک تک تنسور (منظورش همون ماتریس سه بعدیه؟؟؟ می شه توضیح بدید چه طوری این اتفاق می افته ؟؟؟)تبدیل می شوند .
2- سپس در همان بلوک متراکم, تابع مرکبی شامل نرمالیزاسیون , relu و کانولوشن 3*3 روی آن تنسور اعمال می کند( با اینکار ابعاد  تنسور را نیز کاهش می دهد درسته؟؟؟؟؟) البته برای اینکه بتواند به نتیجه این الحاق (تنسورسازی) اعتماد کند از عملیات پولینگ نیز در این میان (قبل از ورود به بلوک متراکم و در لایه انتقال) استفاده می کند تا بتواند سایز نقشه های ویژگی را یکی کند.
3- در لایه انتقال علاه بر اعمال نرمالیزاسیون و پولینگ, از کانولوشن 1*1 هم استفاده شده است (آیا دلیل استفاده از این سایز از کانولوشن (1*1)کم کردن عمق همان تعداد نقشه ویژگی است؟؟؟؟ (یعنی هرچندتا که بودند به 12 عدد برسند!!!!! ) )
4- در ادامه توضیحات مقاله یک نرخ رشد تعریف شده به اسم k , که ظاهرا حرفی از اینکه این تعداد (12) چه طور انتخاب شده زده نشده و به نظر یک عدد تجربی می رسه . درسته ؟؟!! (چه جوری می شه تعداد خروجی رو روی یک عدد مثل 12 فیکس کرد؟؟؟/)
5-در ادامه نیز برای فشرده سازی بیشتر مدل ضریب تتایی که عددی بین 0 و 1 است تعریف کرده و هربار در لایه انتقال تعداد نقشه های ویژگی را در آن ضرب کرده و نتیجتا تعداد آنها را کاهش داده است .
بله تقریبا به طور کامل حرفاتون درسته، با یه سری ریزه کاریهایی که مونده حل بشه
1- خروجی هر لایه در حقیقت یه تنسوره (همون ماتریس سه بعدی به قول شما)، و توی هر لایه ما از لایه های قبل از این تنسور ها میگیریم و اینا رو کنار هم قرار می دیم. مثل اینه که چند تا مکعب رو می خواید از یه وجه بچسبونید به هم
بر فرض اگه هر لایه یه تنسور 12x128x128 میده و ما توی لایه فعلی 3 تا از تنسورها از لایه قبل میگیریم، ورودی لایه فعلی میشه 36x128x128

2- نه توی کانولوشن 3x3 سایز تنسور از نظر ابعاد تصویر تغییر نمی کنه، یعنی اگه 128x128 بوده، همون میمونه، چون اگه شما این ابعاد رو تغییر بدید، دیگه نمی تونید خیلی راحت این تنسورها رو بچسبونید به هم توی لایه های بعدی. بین هر لایه dense که لایه انتقال وجود داره، با عملیات pooling سایز تنسورها کوچیک میشه و در لایه dense بعدی، همون سایز تا آخر حفظ میشه تا دوباره به لایه انتقال برسیم

3 - بله، هدف کم کردن تعداد کانالها بوده که ورودی لایه dense بعدی رو تا حد امکان کوچیکتر کنن(هم از نظر ابعاد که با pooling اتفاق می افته ، هم از نظر تعداد کانال که با فیلتر 1x1 اتفاق می افته)

4 - بله این عدد تجربی هستش و با آزمایشهایی که مثلا با 12 و 24 و 40 انجام دادن، گفتن که شبکه هایی که طراحی کردن با لایه‌های مختلف به خوبی روی دیتاستهای معروف مثل Cifar100 و ImageNET و ... به خوبی کار می کنه.
اگه شما توی هر لایه کانولوشن، 12 تا فیلتر داشته باشید، همیشه خروجیتون توی اون لایه 12 تا feature map میده. البته نمی دونم این قسمت رو درست از سوالتون متوجه شدم یا نه
بسیار بسیار سپاسگزارم.
لطفا نظرتون رو در مورد قسمت 5 سوالم هم بفرمایید.
خواهش میکنم
حرف شما در مورد 5 کاملا صحیح درسته :)
از صمیم قلب از شما و از تمامی دوستانی که این فعالیت علمی را آغاز نموده اید و بدون هیچ چشم داشتی به افراد جویای علم کمک می کنید سپاسگزارم.
اجرتون با خدا
ممنون میشم مشخصات مقاله ای که خوندید رو برام ارسال کنید nrahimi544@gmail.com
...