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

بررسی معماری های شبکه های عصبی کانولوشنی عمیق (قسمت اول)

نگارنده: حسین نیکدل

معماری AlexNet
اولین شبکه عصبی کانولوشن که در چالش ILSVRC-2012 اعمال شد AlexNet بود ، این معماری داده های پایگاه داده ImageNet که در ۱۰۰۰ گروه طبقه بندی شده بودند را با خطای ۱۵ درصد طبقه بندی کرد. این معماری شامل ۵ لایه کانولوشن ادغام شده با لایه های max-pooling و سه لایه تماما متصل است.
AlexNet

نکات اصلی:

  • این معماری توسط دادهای پایگاه داده ImageNet آموزش داده شد این دیتا بیس شامل ۱۵ میلیون عکس در ۲۲ هزار گروه است.
  • از تابع فعال سازReLU استفاده شد.(برای کاهش زمان آموزش) این تابع چندین برابر از توابع فعال ساز  tanh و sigmoid سریعتر است.
  • از تکنیکdata augmentation استفاده شد. شامل: image translations، horizontal reflectionsو patch extractions
  • پیاده سازی لایهDroupout برای مبارزه با بیش برارزش شدن نمونه های آموزشی
  • ازmini-batch stochastic gradient descent با مقادیر مشخص momentum و weight decay برای آموزش شبکه استفاده شد.
  • این معماری توسط دو کارت گرافیکGTX 580 برای ۵ تا ۶ روز آموزش داده شد. این اولین بار بود که یک مدل خیلی خوب بر روی این پایگاه داده عمل کرد و امروزه هنوز از تکنیک هایی مثل data augmentation و dropout به صورت وسیع استفاده می شود.

معماری ZF Net

سال ۲۰۱۳ بعد از ارائه معماری AlexNet تعدادی زیادی مدل برای رقابت ILSVRC2013 ارائه شد. برنده رقابت این سال معماری ای بود که توسط Zeiler و همکاران ارائه شد . نام این معماری ZF Net بود که به خطای ۱۱٫۲ درصد دست پیدا کرد. این معماری در واقع بیشتر مدل تنظیم شده معماری AlexNet بود اما تعدادی ایده اساسی جهت افزایش کارایی معرفی شد. دلیل دیگری که این مقاله را به یک مقاله عالی تبدیل کرد باز کردن پنجره های جدید به سوی هر چه بهتر درک کردن فرآیند یادگیری شبکه های کانولوشن بود. نویسنده این مقاله زمانی زیادی را صرف چگونگی عملکرد شبکه های عصبی کانولوشن،  چگونگی نمایش فیلتر ها و وزن ها کرد. این بصری سازی باعث شد تا درک بهتری از درون این شبکه ها ایجاد شود ؛ مواردی از قبیل اینکه نورون ها در هر لایه چه ویژگی هایی را یاد می گیرند.

ZF Net

نکات اصلی:

  • مشابه معماری AlexNet ، با تغییرات جزیی کم.
  • AlexNet توسط ۱۵ میلیون عکس آموزش داده شد ، در صورتی که این معماری فقط توسط ۱٫۳ میلیون عکس آموزش داده شد.
  • به جای استفاده از فیلترهایی با اندازه ۱۱×۱۱ در اولین لایه (استفاده شده در AlexNet) ، این معماری از فیلتر هایی با اندازه ۷×۷ و اندازه گام کمتر استفاده کرد . دلیل این تغییرات این است که فیلتر با اندازه کوچکتر کمک میکند که اطلاعات بیشتری از پیکسل های اصلی تصاویر ورودی حفظ شوند. به عنوان مثال با استفاده از یک فیلتر با اندازه ۱۱×۱۱ اطلاعات زیادی از تصاویر مخصوصا در اولین لایه از بین می روند.
  • با رشد شبکه تعداد فیلتر ها افزایش پیدا میکنند.
  • استفاده از تابع فعال سازی ReLU ،cross-entropy برای محاسبه میزان خطا و batch stochastic gradient descent برای آموزش
  • این معماری توسط یک کارت گرافیک GTX 580 برای ۱۲ روز آموزش داده شد.
  • یک تکنیک به نامDeconvolutional Network برای تصویر سازی پیشنهاد شد . این تکنیک به این علت deconvnet نامیده می شود که ویژگی های استخراج شده را به پیکسل های تصویر نگاشت می دهد ، مخالف آنچه که یک لایه کانولوشن انجام می دهد. (البته عبارت Deconvolutional یک نام بحث بر انگیز است و در واقع بایستی transposed convolution نامیده شود)

 

معماری VGG

Simonyan و همکارانش در رقابت ILSVRC 2014 با این دیدگاه که معماری عمیق تر باعث افزایش دقت میشود معماری VGGرا ارائه دادند که به خطای ۷٫۳ درصدی دست یافت. این معماری ۱۹ لایه ای از فیلتر هایی با اندازه ۳×۳ با گام ۱ به همراه maxpooling 2×۲ و گام ۲ استفاده شد.

VGG

نکات اصلی:

  • استفاده از فیلترهای با اندازه ۳×۳ ، اما شیوه استفاده این فیلتر ها نیز نسبت به فیلتر های ۱۱×۱۱ AlexNet و فیلتر های ۷×۷ ZF netمتفاوت است. دلیل نویسنده این است که ترکیب دو لایه کانولوشن ۳×۳ ، همانند میدان تاثیر یک فیلتر ۵×۵ است . این تکنیک به نوبه خود یک فیلتر با اندازه بزرگتر را شبیه سازی میکند در حالیکه از مزایای فیلتر با سایر کوچکتر نیز بهره مند میشویم. یکی از تاثیرات این تکنیک کاهش تعداد پارامتر ها است.همچنین با استفاده از دو لایه کانولوشن میتوان از دو لایه ReLU استفاده کرد.
  • سه لایه کانولوشن پشت سر هم یک میدان تاثیر ۷×۷ را دارد.
  • از لایه های ReLU بعد از هر لایه کانولوشن استفاده شد و مدل توسط الگوریتم batch gradient descent آموزش داده شد.
  • نکته جالب این است که تعداد فیلتر ها یعد از هر لایه maxpool دو برابر می شود. این باعث می شود که بعد فضایی کاهش و عمق رشد کند.
  • از scale jittering به عنوان یکی از متد های افزایش مصنوعی داده ها در طول آموزش استفاده کرد.
  • این شبکه توسط چهار کارت گرافیکNvidia Titan Black برای دو تا سه هفته آموزش داده شد.
  • این مقاله تاثیر گذارترین مقاله منتشر شده در این رقابت است و دو مفهوم اساسی سادگی و عمق را معرفی کرد.

9 در مورد “بررسی معماری های شبکه های عصبی کانولوشنی عمیق (قسمت اول)”

  1. سلام
    دلیل استفاده ار دو لایه کاملا متصل چیه؟
    مثلا لایه اول 152 نورون و لابه کاملا متصل دوم 64 تا نرون دار

    1. سلام
      با افزایش تعداد لایه ها از لحاظ تئوری قدرت مانور شبکه بیشتر می شود و شبکه در فضای ویژگی ها می تواند الگو های پیچیده تری را تمییز دهد. اما در عمل به دلیل پدیده محو شدگی گرادیان بیشتر از دولایه تمام متصل پیاده سازی نمی شود، اگر چه راهکار هایی برای جلوگیری از این پدیده وجود دارد.
      نکته دیگر اینکه در عمل اکثر اوقات با دولایه تمام متصل به پاسخ مناسب می رسیم و نیازی به تعداد لایه بیشتر وجود ندارد.

  2. سلام. وقت بخیر. در شبکه عصبی vgg16 چه ارتباطی بین ورودی و فیلتر وجود دارد؟ من یه شبیه سازی بر اساس چیزی که قبلا بود انجام دادم، اما مثلا در لایه اول فیلتر برابر ۶۴ می باشد اما ورودی برابر ۲۲۴، در لایه دوم فیلتر برابر ۱۲۸ می شود و مقدار ورودی کاهش می یابد. شما می توانید من را در این مورد راهنمایی کنید؟

    1. سلام. در لایه اول، تعداد فیلترها ۶۴ تاست. عدد ۲۲۴ مربوط به ابعاد تصویر ورودی است که ۲۲۴x224 باید باشد. در لایه دوم، تعداد فیلترها به ۱۲۸ عدد افزایش می یابد لیکن ابعاد تصاویر به دلیل عبور از لایه انتخاب (pooling) نصف شده و به ۱۱۲x112 کاهش می یابد.

  3. سلام ممنون از پاسخگویتون لطفا اگه لینکی در این زمینه وجود داره برام بفرستسد ممنونتون میشم.

  4. سلام من یک شبکه از پیش آموزش دیده کانولوشنی طبق یک مقاله ای که خوندم دارم که هدفم اینه مشخص کنه تصاویر ماموگرافی که تشخیص بده سالم هست یا ناسالم می تونم هاپیرپارامترهاشو تغییر بدم و یا به اصطلاح دستی تنظیم کنم یا الگوریتم کلاس بندیشو از softmax تغییر بدم به svm تا به بهبود کامل برسه یا میزان دقتش ببره بالا؟یا اینکه این کار به صورت اتوماتیک انجام میشه ؟
    آیا این شبکه آموزش دیده در image net قبلا توسط یکسری افراد طراحی شده که بخوام همچنین اصلاحاتی انجام بدم یا نه؟

    1. سلام
      شبکه های پیش آموزش دیده، قاعدتا روی یک مجموعه داده ی بزرگ آموزش دیده اند. برای fine tune کردن چنین شبکه هایی باید شما لایه های ابتدایی را که حاوی اطلاعات جزئی هستند، دست نزنید و فقط چند لایه آخر را با نرخ یادگیری بسیار کم مجددا روی داده های خودتان آموزش دهید تا به جواب بهتری برسید. در نهایت بعد از آموزش کامل شبکه، شما می توانید ویژگیهای لایه آخر کانولوشنی را به جای اینکه به چند لایه Fully Connected و بعد softmax بدهید، به یک طبقه بند دیگر مثل SVM بدهید.
      قبل از شروع، حتما نحوه fine tune کردن شبکه را در وب یا کتابهای یادگیری عمیق مطالعه کنید

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اسکرول به بالا