شبکه عصبی کانولوشنال (CNN) یکی از پرکاربردترین تکنیک های یادگیری عمیق است. روش های مختلفی از مدل ها برای یادگیری در شبکه های CNN پیشنهاد و بهبود یافته است. هنگام کار با CNN، تعیین هاپیرپارامترهای بهینه ضروری است. اگر تعداد این پارامتر ها زیاد باشد تعیین پارامتر بهینه به صورت دستی بسیار دشوار است به همین دلیل پژوهش های متعددی در زمینه خودکار سازی این روش انجام شده است. روش های متعددی برای بدست آوردن پارمتر های بهینه در شبکه های کانولوشنی وجود دارد که یکی از آن ها روش بهینهسازی ازدحام ذرات (Particle Swarm Optimization)
در این پروژه قصد داریم ازمقاله Optimization of Convolutional Neural Network Using the Linearly Decreasing Weight Particle Swarm Optimization جهت تعیین معماری و بهبود عملکرد شبکه کانولوشن استفاده کنیم. این پروژه با زبان پایتون و کتابخانه تنسورفلو(Tensorflow) و در محیط گوگل کولب نوشته شده است. مهم ترین چالش در این پروژه سخت افزار مناسب برای انجام پروژه بود. به علت اینکه باید تعداد بسیار زیادی مدل ساخته می شد و این مدل ها با یکدیگر مقایسه می شدند محسابات بسیار زیادی باید انجام می گرفت. به طوری که رمِ کارت گرافیکی پر و هسته پردازش غیرفعال می شد. با بهینه سازی هایی که بر روی کد انجام شد توانستیم یک شبکه بهینه برای طبقه بندی مجموعه تصاویر cfar10 با کمک روش PSO طراحی کنیم.
شبکه عصبی کانولوشنی(CNN)
CNN نوعی از شبکه عصبی عمیق هستند که بیشتر برای پردازش تصویر استفاده می شوند. چندین مدل معماری برای CNN معرفی شده است مانند: Resnet, DenseNet یا VGG. در این پروژه مبنای اصلی کار LeNet-5 است. این معماری از دو لایه کانولوشن، دو لایه ترکیبی، دو لایه کاملا متصل و یک لایه خروجی تشکیل شده است. ساختار کلی این معماری به صورت زیر است.
با استفاده از لایه های کانولوشن ویژگی های تصویر مشخص می شود که می توان این ویژگی ها را به خروجی لایه های شبکه عصبی تزریق کرد. نکته مهم درمسایل شبکه های CNN تعداد و توالی مناسب لایه های مختلف است. به همین دلیل نیاز به روش های هوشمند و خودکار که بتواند لایه ای مناسب را تشخیص دهد به شدت احساس می شود.
هدف از انجام این پروژه طراحی مدل PSO برای پیدا کردن معماری مناسب برای طبقه بندی تصاویر دیتاست سی فار 10 است.
الگوریتم PSO
ساختار کلی این الگوریتم به صورت زیر است. در این ساختار تعداد ذره های ابتدایی باید مشخص شوند. این ذره ها به صورت رندوم مقدار دهی می شوند. هر کدام از این ذره ها در واقع یک معماری از شبکه عصبی کانولوشنی هستند.
در این پروژه تعداد 20 مفدار اولیه برای شبکه تعریف شده است. تمام این مقدار(معماری ها) در یک لیست ذخیره می شوند. سپس عملکرد بهترین ذره محاسه شده و به عنوان PBest معرفی می شود. سپس با تغییر پارامتری های این مقدار تلاش می شود به شبکه بهینه تری دست پیدا کنید. از این مقدار جدید PBest که بهترین دقت را دارد 20 مقدار دیگه بدست می آید. مجددا از بین این مقدار بهترین ذره به عنوان PBest و بهترین ذره کل به عنوان Qbest ذخیره می شوند. در واقع ما یک لیست شامل 20 مقدار داریم و این مقادیر 10 بار به روز می شوند تا در نهایت بهترین معماری با بهترین ضرایب برای شبکه عصبی کانولوشنی بدست آید.
در این پژوهش ما 200 شبکه را تولید و بایکدیگر مقایسه می کنیم که این امر باصرف زمان پردازش طولانی و امکان پذیر شد. در نهایت مفدار GBest به عنوان بهترین معماری وارد مرخله نهایی آموزش شبکه می شود. معماری بدست آمده بر روی کل دیتا با تعداد تکرار 79 بار اجرا شده تا در نهایت دقت کل محاسبه شود.
با تغییراتی که در ساختار الگوریتم داده شد دقت بدست آمده در این پروژه از دقت ارایه شدذ در مقاله بالاتر شد.
همچنین معماری بدست آمده از الگوریتم PSO به صورت زیر است.
نتیجه گیری
در این پروژه بدست آوردن معماری بهینه برای شبکه عصبی کانولونشی از الگوریتم PSO استفاده شد. مجموعه داده مورد استفاده در این پروژه cfar10 بود که توانستیم به دقت 0.78 برسیم که با روش PSO جز بالاترین دقت های بدست آمده است.