ویرگول
ورودثبت نام
علیرضا محمدی
علیرضا محمدی
خواندن ۱۳ دقیقه·۲ سال پیش

شبکه‌ی VGG-Net

شبکه عصبی کانولوشنی VGG توسط Karen Simonyan و Andrew Zisserman از دانشگاه آکسفورد در سال 2014 معرفی شده‌است. در این مقاله تلاش شده‌است تا با افزایش عمق شبکه‌های عصبی کانولوشنی، به دقت بیشتری نسبت به شبکه‌های پیشین همچون AlexNet دست یابد.



معماری شبکه استفاده شده در [1] متشکل از 5 لایه کانولوشنی و 3 لایه Fully Connected می‌باشد، اما در مقاله‌ی [2] به منظور بررسی اثر افزایش عمق شبکه، با ثابت در نظر گرفتن لایه‌های نهایی، تعداد لایه‌های کانولوشنی افزایش یافته‌است تا تاثیر آن در دقت شبکه بر روی دیتاست‌های ابعاد بزرگ شناسایی تصویر مورد بررسی قرار بگیرد.

ورودی شبکه‌ها به صورت یک تصویر رنگی (سه کانال قرمز، سبز و آبی) با ابعاد 224*224 می‌باشد و به عنوان پیش‌پردازش، مقدار میانگین پیکسل‌ها که بر اساس دیتاست آموزش محاسبه می‌شود، از مقدار هر پیکسل کم می‌شود.

در [1] ساختار شبکه متشکل از 5 لایه کانولوشنی است که لایه‌های اولیه دارای فیلتر‌های بزرگ‌تر با محدوده‌ی دریافت بیشتر هستند و اندازه‌ی فیلتر‌ به تدریج در طول 5 لایه کانولوشنی کاهش پیدا می‌کند.

با این هدف که لایه‌های آغازین شبکه، محدوده‌ی دریافت (Receptive Field) بزرگ‌تری داشته‌باشند.

اما تکنیکی که در مقاله‌ی [2] مورد استفاده قرار گرفته‌است، استفاده از فیلتر‌های کانولوشنی 3*3 با محدوده‌ی دریافت کوچک به جای استفاده از فیلتر‌های بزرگ‌تر می‌باشد. مقدار stride و padding برای این‌ لایه‌ها به گونه‌ای انتخاب شده‌است که ابعاد تصویر ورودی هر لایه، در خروجی آن حفظ شود.

می‌توان نشان داد که دو فیلتر 3*3 متوالی بدون لایه pooling میان آن‌ها به نحوی که ابعاد ورودی حفظ شود، محدوده‌ی دریافتی موثری برابر با یک فیلتر 5*5 خواهد داشت و در صورت استفاده از سه فیلتر 3*3 متوالی، محدوده دریافتی موثری معادل با فیلتر 7*7 حاصل می‌شود.

استفاده از این فیلتر کوچک‌تر مزایای بسیاری را در ساختار شبکه خواهد داشت. اولین مورد، افزایش میزان غیرخطی بودن به دلیل استفاده از فیلتر‌های کوچک متوالی است که این امر موجب افزایش قدرت تمایز تابع تصمیم خواهد بود. همچنین با توجه به آنکه تعداد لایه‌های کانولوشنی در [2] افزایش یافته است، به منظور بهبود سرعت یادگیری شبکه، بهتر است که تعداد پارامتر‌ها افزایش چندانی نداشته باشد.

استفاده از 3 لایه کانولوشنی 3*3 با تعداد C کانال، 27C^2 پارامتر را به شبکه اضافه خواهد کرد، در حالی که استفاده از یک فیلتر 7*7 با محدوده‌ی دریافت موثر معادل، 49C^2 پارامتر خواهد داشت.

استفاده از چنین ساختاری موجب شده‌است تا با افزایش تعداد لایه‌های کانولوشنی و عمیق‌تر کردن شبکه، تعداد پارامتر‌ها چندان زیاد نشود.

یکی از ایده‌هایی که در [2] مورد توجه قرار گرفته‌است، استفاده از فیلتر‌های 1*1 می‌باشد که با وجود افزایش میزان غیرخطی بودن شبکه، تاثیری بر محدوده‌ی دریافت نخواهد داشت. چنین لایه‌ای را می‌توان به صورت یک تبدیل خطی به فضایی با ابعاد مشابه فضای ورودی دید.

تابع فعال‌سازی استفاده شده در این لایه‌ها، ReLU می‌باشد. استفاده از توابع فعال‌سازی دیگری نظیر tanh نیز در شبکه‌های عصبی عمیق کانولوشنی متداول است، اما می‌توان نشان داد که به دلیل وجود ناحیه اشباع در تابع tanh، این تابع فعال‌سازی سرعت‌ همگرایی کم‌تری نسبت به ReLU دارد و از طرفی در شبکه‌های عصبی عمیق‌تر، با احتمال بیشتری دچار فرابرازش خواهد شد.

همچنین Spatial Pooling با استفاده از پنج لایه‌ی max pool که به دنبال بعضی از لایه‌های کانولوشنی قرار گرفته‌است، انجام می‌شود. پنجره‌ی این لایه‌ها 2*2 و با stride برابر با 2 انتخاب شده‌است.




در [2] پنج ساختار کلی برای شبکه عصبی کانولوشنی در نظر گرفته شده‌است که تفاوت آن‌ها تنها در تعداد لایه‌های کانولوشنی است و در باقی ساختار با یکدیگر مشابه هستند. نوع اول دارای 8 لایه کانولوشنی است که در دو زیر مدل مختلف بررسی شده‌است، در یکی از مدل‌ها از روش نرمالیزاسیون LRN که در ادامه به آن پرداخته می‌شود استفاده شده‌است.

عمیق‌ترین شبکه‌ای که در [2] بررسی شده‌است دارای 16 لایه کانولوشنی است که در مجموع با احتساب لایه‌های FC نهایی، دارای 144 میلیون پارامتر می‌باشد. با توجه به اصلاحاتی که در ساختار بخش کانولوشنی شبکه انجام شده‌است، تعداد پارامتر‌های آن نسبت به بعضی از شبکه‌های کم‌عمق‌تر، کم‌تر است.

ساختار شبکه‌های بررسی شده در [2]
ساختار شبکه‌های بررسی شده در [2]

یکی از تکنیک‌های نرمالیزه کردن ورودی لایه‌ها در شبکه‌های عصبی عمیق که می‌تواند قابلیت تعمیم شبکه را افزایش دهد، استفاده از روش Local Response Normalization است.

در صورتی که

خروجی نورون با اعمال کرنل i در موقعیت (x, y) باشد و سپس تابع فعال‌سازی ReLU بر روی آن اعمال شود، پاسخ نرمالیزه شده‌ی

به صورت زیر محاسبه می‌شود:

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

بحث نرمالیزه کردن ورودی در شبکه‌های عصبی عمیق می‌تواند تاثیر بسزایی در آموزش شبکه داشته باشد، زیرا در صورتی که ورودی یک لایه به نحو مناسبی نرمالیزه نشود، این ورودی می‌تواند به سمت نواحی اشباع تابع فعال‌سازی حرکت کند و موجب کند شدن و یا حتی توقف یادگیری گردد.

اما همانطور که ذکر شد در [2] و [1] از تابع فعال‌سازی ReLU استفاده شده‌است که فاقد ناحیه اشباع به ازای ورودی مثبت است، از این رو نرمالیزه کردن ورودی احتمالا تاثیر چندانی در یادگیری نخواهد داشت. همانطور که در [1] نشان داده‌شده‌است، استفاده از روش نرمالیزه کردن LRN تاثیر چندانی بر عملکرد شبکه بر روی دیتاست ILSVRC نداشته و تنها موجب افزایش میزان مصرف حافظه شده‌است، بنابراین در شبکه‌ی‌ نهایی معرفی شده در [1] از این روش استفاده نشده‌است.

هر دوی این شبکه‌ها [1], [2] از ساختار مشابهی در لایه‌های آخر استفاده می‌کنند که متشکل از 3 لایه FC می‌باشد. 2 لایه اول دارای 4096 نورون هستند و از تابع فعال‌سازی ReLU در آن‌ها استفاده شده‌است و لایه آخر دارای 1000 نورون (هر کدام برای یک کلاس) است که در این لایه از تابع فعال‌سازی softmax بهره گرفته شده‌است.

استفاده از این تابع فعال‌سازی این امکان را فراهم می‌سازد تا شبکه توزیعی احتمالی را برای کلاس‌های مختلف دیتاست ایجاد کند، به این صورت که کلاس شئ موجود در تصویر دارای بیشترین احتمال خواهد بود.

یکی از مسائلی که شبکه‌های FC با تعداد نورون‌های زیاد با آن مواجه هستند، مساله فرابرازش است. به این صورت که در طی آموزش شبکه، بعضی نورون‌ها بیشتر تحریک می‌شوند، در حالی که ممکن است تعداد زیادی از نورون‌ها هیچ وقت در روند آموزش اثری نداشته باشند. تکنیکی که معمولا در چنین مواردی استفاده می‌شود Dropout می‌باشد. این تکنیک به این صورت است که در حین آموزش شبکه خروجی بعضی از نورون‌ها با احتمال p صفر می‌شود و همچنین این نورون‌ها در روند بازگشت آموزش شبکه نیز تاثیری نخواهند داشت.

این تکنیک را می‌توان به این صورت دید که در هر بار آموزش، شبکه ساختار متفاوتی نسبت به قبل خواهد داشت که این امر می‌تواند موجب کاهش خطای تست شود.

همچنین حذف تصادفی نورون‌ها در هر مرحله از آموزش موجب می‌شود تا وابستگی بین نورون‌های موجود  در یک لایه کمتر شود و نورون‌ها ویژگی‌های مقاوم‌تری را یاد بگیرند.

آموزش شبکه

شبکه معرفی شده در [1] به دنبال افزایش تابع هدف چندجمله‌ایlogistic است که معادل با بیشینه‌سازی میانگین روی لگاریتم احتمال برچسب درست بر اساس توزیع پیش‌بینی شده می‌باشد. به منظور آموزش شبکه از stocastic gradient descent با اندازه‌ی batch برابر با 128 و مقدار momentum برابر با 0.9 استفاده شده‌است. همچنین ترم جریمه‌ی L2 نیز در تابع هدف شبکه در نظر گرفته شده‌است که از بزرگ‌شدن وزن‌های شبکه جلوگیری می‌کند و باعث می‌شود آموزش شبکه پایدارتر باشد.

نرخ یادگیری در ابتدا برابر با 0.01 انتخاب می‌شود و در صورتی که خطای شبکه بر روی دیتای validationبهبودی نداشته باشد، این مقدار از مرتبه 10 کاهش پیدا می‌کند.

در [2] نیز روند مشابهی به منظور آموزش شبکه استفاده شده‌است اما با انجام تغییراتی در ساختار و روند آموزش شبکه، شبکه‌ی عمیق‌تر معرفی شده در این مقاله علیرغم تعداد پارامتر‌ها و عمق بیشتر، به ازای تعداد کم‌تری epoch همگرا می‌شود.

اولین دلیل این امر آن است که افزایش عمق شبکه و استفاده از فیلتر‌های کوچک‌تر، عملا regularization شبکه را به صورت ضمنی افزایش می‌دهد.

این مساله در کنار استفاده از ترم جریمه در تابع هدف که در شبکه‌ی [1] استفاده شده‌است، توانای تعمیم را افزایش می‌دهد.

دلیل دیگر استفاده از روش‌های بهینه به منظور وزن‌دهی اولیه لایه‌های شبکه می‌باشد.

در شبکه‌ی [1] مقدار وزن‌ها بر اساس یک توزیع نرمال با میانگین صفر و مقدار بایاس برابر با صفر انتخاب می‌شود. انتخاب نادرست وزن‌های اولیه می‌تواند موجب ناپایداری گرادیان و نتیجتا توقف یادگیری شود، از این رو وزن‌دهی اولیه به خصوص در شبکه‌های عمیق‌تر، از اهمیت بالایی برخوردار است.

به منظور حل مشکل وزن‌دهی اولیه در [2] ابتدا ساختار ساده‌تری از این شبکه با 11 لایه و با وزن‌دهی تصادفی آموزش داده شده‌است و از این وزن‌ها در شبکه‌های عمیق‌تر (با ساختار مشابه) استفاده شده‌است. در شبکه‌های عمیق‌تر، وزن‌‌های مربوط به لایه‌های جدید کانولوشنی، به صورت تصادفی انتخاب می‌شوند.

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

تغییر در رنگ تصاویر و flip افقی یا عمودی از جمله تکنیک‌هایی هستند که میتوان به منظور augmentation دیتا استفاده کرد. روش دیگری که در [2] استفاده شده‌است crop کردن تصاویر آموزشی به صورت تصادفی در هر مرحله از آموزش است.

تکنیک دیگری که می‌تواند به منظور augmentation مورد استفاده قرار بگیرد، تغییر ابعاد تصاویر ورودی شبکه، قبل از برش تصاویر به اندازه‌ی 224*224 است که می‌تواند قدرت شبکه را در تشخیص اهداف با مقیاس‌های مختلف، افزایش دهد. این تکنیک به صورت خاص در [2] استفاده شده‌است که در ادامه به آن اشاره می‌شود.

در [2] تصاویر دیتاست ابتدا با حفظ نسبت ابعاد، تغییر مقیاس داده می‌شوند. به این صورت که کوچک‌ترین ضلع تصویر به S=256 تغییر اندازه داده می‌شود و اندازه‌ی ضلع بزرگ‌تر نیز به‌گونه‌ای تعیین می‌شود که نسبت ابعاد تصویر نهایی تغییری نکند. سپس از بخش مرکزی تصویر، مربعی به ابعاد 256*256 بریده می‌شود که به عنوان دیتای آموزشی شبکه مورد استفاده قرار می‌گیرد.

اما در [2] با توجه به آنکه ابعاد برش تصاویر ورودی که به صورت تصادفی صورت می‌گیرد برابر با 224*224 است، تصویر کوچک‌شده به صورت مستطیلی مورد استفاده قرار می‌گیرد که اندازه کوچک‌ترین ضلع آن حداقل برابر با S = 224 پیکسل خواهد بود.

در صورتی که مقدار S برابر با 224 انتخاب شود، با برش تصویر در هنگام آموزش شبکه، تصویر تقریبا به صورت کامل حفظ می‌شود در حالی که اگر S خیلی بزرگ‌تر از ابعاد تصویر ورودی شبکه باشد، با برش تصویر در هنگام آموزش، تنها بخش کوچکی از تصویر متشکل از اهداف کوچک یا بخشی از اهداف بزرگ، در تصویر باقی خواهد ماند.


دو روش برای انتخاب مقدار S استفاده شده‌است. در روش اول مقدار این پارامتر به صورت ثابت در نظر گرفته می‌شود. دو مقدار 256 و 384 به منظور بررسی عملکرد استفاده شده‌اند. ابتدا شبکه با استفاده از S = 256 آموزش داده می‌شود و سپس برای بررسی عملکرد به ازای S = 384 از وزن‌های شبکه آموزش دیده شده‌ استفاده می‌شود و همچنین نرخ یادگیری کوچک‌تری نیز مورد استفاده قرار می‌گیرد.

در روش دوم این موضوع مورد توجه قرار گرفته‌است که اهداف موجود در تصاویر می‌توانند در مقیاس‌های متفاوتی باشند. به منظور در نظر گرفتن این موضوع در امر آموزش شبکه، مقدار S به منظور تغییر مقیاس تصویر ورودی، به صورت تصادفی و از بازه‌ی

انتخاب می‌شود.

جزئیات پیاده‌سازی

نحوه پیاده‌سازی شبکه‌های عصبی عمیق از اهمیت بالایی برخوردار است. از آن‌جا که این شبکه از تعداد زیادی عملگر‌های تک‌بعدی و دوبعدی تشکیل شده‌اند و همچنین از اعداد ممیز شناور استفاده می‌شود، حجم محاسبات و زمان لازم برای آموزش شبکه بسیار بالا خواهد بود و عملا آموزش شبکه بر روی پردازشگر مرکزی سیستم‌های رایانه‌ای امکان‌پذیر نخواهد بود. همچنین این مساله با افزایش تعداد پارامتر‌های شبکه و عمیق‌تر کردن آن جدی‌تر شده‌است.

برای رفع این مشکل معمولا از پردازشگر‌های گرافیکی استفاده می‌شود. پرداز‌شگر‌های گرافیکی دارای تعداد زیادی هسته‌های پردازشی ضعیف هستند که در کنار یکدیگر و با هماهنگی در پردازش و دسترسی به حافظه گرافیکی، امکان اجرای موازی الگوریتم‌ها را فراهم می‌کند.

بنابراین با استفاده از یک پردازشگر گرافیکی می‌توان الگوریتم‌ها را به‌گونه‌ای پیاده‌سازی کرد که بخش‌های مختلف و مستقل آن، به صورت موازی اجرا شوند و نتیجتا زمان اجرای کلی الگوریتم کاهش چشم‌گیری پیدا کند.

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

برای مثال می‌توان هر batch از تصاویر آموزشی شبکه را بین پردازنده‌های مختلف تقسیم کرد تا هر یک از این پردازنده‌ها به صورت مستقل و موازی با بقیه، گرادیان را محاسبه کند و سپس بین این گرادیان‌ها میانگین گرفت تا گرادیان مربوط به batch کلی محاسبه شود. در این حالت محاسبه گرادیان بین تمامی پردازنده‌ها هماهنگ خواهد بود تا مقدار محاسبه شده با حالتی که تنها از یک گرافیک استفاده می‌شود برابر باشد.

در [1] هم بر روی دیتا و هم در لایه‌های مختلف مدل، پردازش موازی صورت گرفته است، به این صورت که بعضی از لایه‌ها به دو بخش تقسیم شده و هر کدام بر روی یک پردازنده اجرا می‌شود. در حالی که روش به نسبت ساده‌تری که در [1] استفاده شده‌است عملکرد بهتری را نشان داده‌است.

نتایج

شبکه عصبی کانولوشنی 8 لایه [1] در رقابت‌های ILSVRC-2010 توانسته تا به خطای %top-5 = 17 برسد. همچنین این شبکه در رقابت‌هایILSVRC-2012 نیز شرکت داده‌شده‌است و با میانگین‌گیری از نتایج پنج شبکه‌ی مشابه، به %top-5 = 16.4 رسیده‌است. شبکه‌ی بررسی شده در [2] بر روی دیتاست ILSVRC-2012 بررسی شده‌است که متشکل از 1.3 میلیون تصویر آموزشی، 50‌هزار تصویر برای validation و 100‌هزار تصویر تست می‌باشد. همچنین در این رقابت‌ها به جای استفاده از خطای طبقه‌بندی چند کلاسه، از معیار خطای top-1 و top-5 استفاده شده‌است.

ابتدا عملکرد یک شبکه با در نظر گرفتن ثابت بودن مقیاس تصویر ورودی، مورد بررسی قرار گرفته‌است (Q = S) همچنین به منظور ایجاد jitter در مقیاس تصاویر ورودی، مقدار

برای تصاویر تست انتخاب شده‌است.

نتایج تست عملکرد هر 6 شبکه بررسی شده در [2]

به ازای مقیاس ثابت تصاویر آموزشی و مقیاس متغیر ارائه شده‌است.

بر اساس این نتایج مدل A توانسته است تا به خطای %top-5 = 10.4 برسد که بهبود خیلی خوبی نسبت به شبکه‌ی بررسی شده در [1] داشته است. همچنین با مقایسه نتایج شبکه‌ی A و A-LRN می‌توان دریافت که استفاده از این روش نرمالیزه کردن ورودی لایه‌ها، تاثیر چندانی در بهبود عملکرد شبکه نداشته‌است. در حالی که با عمیق‌تر کردن شبکه، خطای %top-5 = 8.7 به ازای شبکه‌ی E حاصل شده‌است.

همچنین می‌توان دریافت که با استفاده از روش تغییر مقیاس تصاویر ورودی به منظور آموزش شبکه برای تشخیص اشیا کوچک و بزرگ، عملکرد شبکه بهبود مشخصی داشته‌است و به ازای تغییر مقیاس تصاویر در بازه‌ی [512,256] شبکه‌ی E توانسته است تا به خطای %top-5 = 8.0 برسد.

تکنیک دیگری که به منظور بررسی عملکرد شبکه استفاده شده‌است، استفاده از چندین مقیاس متفاوت برای تصاویر تست می‌باشد. به این صورت که عملکرد شبکه به ازای 3 مقیاس متفاوت از تصویر تست مورد بررسی قرار می‌گیرد و سپس روی این نتایج میانگین گرفته می‌شود.

برای حالتی که مقیاس تصاویر آموزشی ثابت باشد، تصاویر تست در 3 مقیاس {S - 32, S, S+ 32} بررسی می‌شوند که در آن S مقیاس تصویر آموزشی است. همچنین به ازای حالتی که مقیاس تصاویر آموزشی از بازه‌ی

انتخاب می‌شود، تصاویر تست در 3 مقیاس

در این حالت مشاهده شده‌است که شبکه‌ی E به ازای تغییر مقیاس تصاویر آموزشی و بررسی تصاویر تست در 3 مقیاس،‌ به خطای %top-5 = 7.5 رسیده است.

عملکرد ترکیب چند شبکه نیز در [2] بررسی شده‌است. ابتدا با استفاده از ساختار زیر متشکل از 7 شبکه به خطای %top-5 = 7.3 رسیده‌است در حالی که بعد از رقابت‌های ILSVRC توانسته‌اند با ترکیب دو شبکه‌ی D و E که هر دو از تغییر مقیاس در تصاویر آموزشی و بررسی تصاویر تست در 3 مقیاس مختلف استفاده می‌کنند، به خطای %top-5 = 6.8 دست‌یابند.



[1] A.Krizhevsky, I.Sutskever, G.Hinton. (2012). ImageNet Classification with Deep Convolutional Neural Networks. Neural Information Processing Systems. 25. 10.1145/3065386.

[2] K.Simonyan, A.Zisserman. (2014). Very Deep Convolutional Networks for Large-Scale Image Recognition. arXiv 1409.1556.

شبکه‌های عصبیدانشگاه تهرانطراحی و تحلیل شبکه‌های عصبی عمیق
شاید از این پست‌ها خوشتان بیاید