۱۰ معماری پیشرفته یادگیری عمیق
با پیشرفتی که این روزها در زمینه یادگیری عمیق (Deep Learning) رخ دادهاست، بروز بودن در این زمینه کار سختی است. کمتر روزی است که بدون یک اختراع یا اپلیکیشن جدید در زمینه یادگیری عمیق بگذرد. با این حال اکثر این پیشرفتها در لابهلای بیشماری از برگههای تحقیقاتی که در رسانهها منتشر میشوند، گم میشوند. در این مقاله به بررسی برخی از آخرین دستاوردهای یادگیری عمیق و ۱۰ معماری پیشرفته یادگیری عمیق میپردازیم.
منظور از معماری پیشرفته چیست؟
الگوریتمهای یادگیری عمیق، در مقایسه با الگوریتمهای یادگیری ماشین از مدلهای مختلفی تشکیل شدهاند. دلیل این امر انعطافپذیری است که شبکههای عصبی در هنگام ساخت یک مدل تکامل یافته ارائه میدهند. شبکههای عصبی را در برخی اوقات میتوان با آجرهای لگویی مقایسه کرد. با آنها میتوانید هرگونه ساختار ساده و پیچیدهای که تصورش را میکنید، بسازید.
میتوانیم معماری پیشرفته را اینگونه تعریف کنیم: یک شبکه عصبی که بر اساس بررسیها، عملکرد موفق آن اثبات شده است. همچین چیزی را بیشتر در چالشهای «ImageNet» میبینیم که در آن باید یک مسالهای را (که عموما شناسایی تصویر است)، بر اساس اطلاعات داده شده حل کنیم. «ImageNet» یک مجموعهای از دادهها است که در چالش «ILSVR) ImageNet Large Scale Visual Recognition) ارائه داده میشود.
همچنین، همانطور که در معماریهای پایینتر گفته شدهاست، هرکدام این معماریها یک فرق جزئی دارند که آنها را از مدلهای معمولی جدا میکند و یک مرحله در حل مسائل آنها را جلوتر میبرد. همچنین، این معماریها در دستهبندی «مدلهای عمیق» قرار میگیرند، در نتیجه در مقابل همتای سطحیترشان، بهتر عمل میکنند.
وظایف بینایی ماشین
این مقاله بیشتر برروی بینایی ماشین تمرکز دارد، در نتیجه طبیعی است که در آن تعریفی کلی از وظایف بینایی ماشین داشته باشیم. همانطور که از اسم آن پیداست، بینایی ماشین یعنی ساخت یک سری مدل مصنوعی که میتوانند کارهای بینایی انسان را انجام دهند. این بدین معنا است که چیزی که ما میبینیم و کاری که ما انجام میدهیم یک پروسه قابل فهم است که میتواند در یک سیستم مصنوعی نیز اعمال شود.
وظایف اصلی بینایی ماشین را میتوان به موارد زیر تقسیم کرد:
- شناسایی یا دستهبندی شیء: در شناسایی شیء، یک تصویر خام را تحویل میگیرید و باید تشخیص دهید که مربوط به کدام دسته میشود.
- دستهبندی و مکانشناسی: در این حالت شما یک تصویر دارید که فقط یک شیء در آن وجود دارد و باید جای آن شیء را پیدا کنید. به این کار «مساله مکانشناسی» نیز میگویند.
- پیداکردن شیء: در این حالت شما باید موقعیت شیء در تصویر را پیدا کنید. این اشیا میتوانند از کلاسهای متفاوت باشند.
- تقسیمبندی تصویر: تقسیمبندی تصویر وظیفه سنگینتری است. در این حالت باید تمام پیکسلها را بر اساس دسته درست آن پیدا کنید.
۱۰ معماری پیشرفته یادگیری عمیق
حالا که میدانیم منظور از معماری پیشرفته و بینایی ماشین چیست؛ پس به بررسی برخی از مهمترین معماریها میپردازیم:
1. معماری AlexNet
AlexNet اولین معماری عمیق است که توسط یکی از پیشگامان یادگیری عمیق، یعنی «جفری هینتون» (Geoffrey Hinton) و همکارانش معرفی شده است. AlexNet یک معماری ساده اما قدرتمند است که راه را به سوی تحقیقات بزرگی باز کرد که بدون آنها یادگیری عمیق آن چیزی که الان هست، نبود. در زیر یک تصویر از عملکرد این معماری را میبینید.
وقتی AlexNet را باز میکنیم، به نظر یک معماری ساده با لایههای پیچیده است که روی هم سوار شدهاند و کاملا به لایههای بالایی وصل هستند. این یک معماری بسیار ساده است که اولین بار مفهوم آن در دهه 80 میلادی به وجود آمد. چیزی که این مدل را متفاوت میکند، سرعت انجام وظیفه و استفاده از «GPU» برای یادگیری است. در دهه 80 میلادی، برای یادگیری یک شبکه عصبی از «CPU» استفاده میکردند ولی AlexNet با استفاده از «GPU» سرعت این یادگیری را ده برابر کرد.
با اینکه الان این معماری کمی تاریخ گذشته است، ولی AlexNet هنوز هم به عنوان نقطه آغازین در استفاده از شبکههای عصبی عمیق، استفاده میشود، چه هدف استفاده بینایی ماشین باشد، و چه تشخیص صحبت.
2. معماری VGG Net
VGG Network توسط محققان گروه «Visual Graphics Group» در آکسفورد معرفی شدهاست. این شبکه بیشتر بخاطر شکل هرمی مانندش شناخته میشود که در آن لایههایی که به تصویر نزدیکتر هستند، پهنتر، و لایههای دورتر، عمیقتر هستند.
همانطور که در تصویر مشخص است، VGG شامل یک سری از لایههای محاسباتی (Convolutional) است که پشت آنها لایههای جمعکننده (pooling) وجود دارند که لایهها را کوچکتر میکنند. این گروه در تحقیقات خود شبکههای مختلفی را مطرح کردهاست که هرکدام آنها عمق این معماری را تغییر میدهند.
از مزایای VGG میتوان موارد زیر را نام برد:
- یک معماری خیلی خوب برای سنجش یک وظیفه مشخص است.
- شبکههای از قبل تعلیم دیده VGG به طور رایگان در اینترنت قرار دارند، به همین جهت در خیلی از اپلیکیشنها استفاده میشوند.
ولی مشکل اصلی این معماری این است که اگر بخواهید آن را از پایه تعلیم دهید، بسیار کند و زمانبر است. حتی در یک سیستم با «GPU» خوب هم راه اندازی آن بیشتر از یک هفته زمان میبرد.
3. معماری GoogleNet
GoogleNet یک معماری است که توسط محققین گوگل طراحی شده است. GoogleNet با ارائه قویترین مدل، برنده «ImageNet 2014» بود. در این معماری، علاوه بر عمق بیشتر (دارای 22 لایه است، در مقایسه با VGG که دارای 19 لایه است)، محققان یک رویکرد جدید نیز به نام ماژول آغازین (Inception Module) ارائه دادند.
همانطور که در تصویر بالا میبینید، این ماژول یک تغییر بزرگ نسبت به معماریهای ترتیبی است که در بالاتر دیدیم. در یک لایه، چندین نوع «feature extractor» (لایههایی که مقادیر ورودی را دریافت کرده، و به نوعی داده برای محاسبات تبدیل میکنند) وجود دارند. در شبکهای که خود در حال یادگیری است و باید از گزینههای مختلفی برای حل وظایف استفاده کند، این نوع لایهبندی، به طور غیر مستقیم به عملکرد بهتر شبکه کمک میکند. این ماژول میتواند از ورودیها مستقیما در محاسبات خود استفاده کند، یا آنها را مستقیما جمعبندی کند.
معماری نهایی شامل چندین ماژول آغازین است که برروی هم سوار شدهاند. حتی نحوه یادگیری نیز در GoogleNet متفاوت است؛ چرا که اکثر لایههای بالایی، خود دارای لایه خروجی هستند. این تغییر جزئی باعث میشود عمل یادگیری این مدل سریعتر باشد، زیرا هم یادگیری کلی و هم یادگیری موازی در لایهها وجود دارد.
از مزایای GoogleNet میتوان موارد زیر را نام برد:
- یادگیری GoogleNet از VGG سریعتر است.
- حجم یک مدل GoogleNet از پیش تعلیم دیده، بسیار سبکتر از VGG است. یک مدل VGG میتواند حجمی بیشتر از 500مگابایت داشته باشد، در حالی که حجم GoogleNet تنها 96مگابایت است.
GoogleNet مشکل خاصی که در همان ابتدا نظر را جلب کند ندارد، ولی تغییراتی در معماری آن خواسته شدهاست تا بهتر عمل کند. یکی از این تغییرات «Xception Network» نام دارد که در آن تعداد انشعابات ماژول آغازین (که همانطور که در تصویر دیدیم چهارتا بود) بیشتر شده است. در تئوری، تعداد انشعابات در حال حاضر میتواند بینهایت باشد.
4. معماری ResNet
ResNet یکی از معماریهای بزرگ است که نشان میدهد یک معماری یادگیری عمیق تا چه حد میتواند عمیق باشد. ResNet (که مخفف Residual Networks است) شامل چندین ماژول رسوبی است که برروی هم سوار شدهاند، که درواقع ساختمان اصلی معماری ResNet را تشکیل میدهند. تصویر زیر یک نمای کلی از ماژول رسوبی را نشان میدهد.
به بیان ساده، ماژول رسوبی دو راه دارد، یا میتواند یک سری عملیات را برروی ورودی انجام دهد، یا تمام این مراحل را رد کند. همانند GoogleNet، این ماژولهای رسوبی برروی یک دیگر سوار شدهاند تا یک شبکه کامل را تشکیل دهند.
برخی دیگر از تکنیکهای جدیدی که توسط ResNet معرفی شدهاند عبارتند از:
- استفاده از استاندارد «SGD» به جای تکنیکهای یادگیری تطبیقی. اینکار توسط توابعی انجام میشود که جلوی ایجاد تداخل در عملیات یادگیری را میگیرند.
- نحوه پردازش ورودی تغییر پیدا کردهاست، ابتدا ورودی به تکههای مختلف تبدیل شده و سپس وارد شبکه میشود.
مزیت اصلی ResNet این است که هزاران هزار از این لایههای رسوبی میتوانند کنار هم قرار بگیرند تا یک شبکه را تشکیل دهند و سپس به یادگیری بپردازند. این مدل کمی از شبکههای ترتیبی عادی متفاوت است و مشکل کاهش عملکرد در هنگام افزایش لایهها را ندارد.
5. معماری ResNeXt
گفته میشود که ResNeXt در حال حاضر یکی از کاملترین تکنیکهای تشخیص اشیاء است. این معماری بر اساس معماریهای «inception» و «resnet» کار میکند تا یک معماری جدید و بهبود یافته را ارائه میدهد.
6. معماری RCNN) Region Based CNN)
گفته میشود که معماری Region Based CNN (بر پایه محل قرارگیری) تأثیرگذارترین معماری یادگیری عمیق است که تا به حال برای حل مسائل تشخیص اشیا استفاده شده است. نحوه کار این معماری اینگونه است که سعی میکند دور تمام اشیای حاضر در تصویر یک جعبه بکشد و سپس شیء داخل تصویر را شناسایی کند. نحوه کار آن در تصویر زیر آمدهاست:
ساختار این معماری نیز در تصویر زیر آمدهاست:
7. معماری YOLO) You Only Look Once)
YOLO کاملترین سیستم بلادرنگ (Real time) در یادگیری عمیق و حل مسائل تشخیص تصویر است. همانطور که در تصویر زیر مشاهده میکنید، این الگوریتم ابتدا تصویر را به بخشهای مختلف تقسیم میکند و هر بخش را علامتگذاری میکند، سپس الگوریتم شناسایی را به صورت موازی برای تمامی این بخشها اجرا میکند تا ببیند هر بخش به کدام دستهبندی تعلق میگیرد. بعد از شناسایی کامل اشیا، آنها را به هم متصل میکند تا دو هر شیء اصلی یک جعبه باشد.
همه این کارها به صورت موازی انجام میشوند؛ در نتیجه به صورت بلادرنگ است و میتواند تا 40 تصویر را در یک ثانیه پردازش کند. با اینکه این مدل کمی نسبت به RCNN عملکرد ضعیفتری دارد، ولی به دلیل بلادرنگ بودن آن، میتوان از آن برای حل مشکلات روزانه استفاده کرد. در زیر تصویری از معماری YOLO را مشاهده میکنید.
8. معماری SqueezeNet
معماری SqueezeNet یک معماری بسیار قوی است که در جاهایی با فضای کم، از جمله تلفنهای همراه، بسیار کارآمد است. این معماری تنها حدود 5 مگابایت فضا اشغال میکند، در حالی که مدل «inception» حدود 100 مگابایت فضا نیاز دارد. این تغییر بزرگ به لطف معماری خاصی ممکن شدهاست که ماژول آتش نام دارد. در زیر تصویری از ساختار ماژول آتش را مشاهده میکنید.
معماری نهایی SqueezeNet به شکل زیر است:
9. معماری SegNet
SegNet یک معماری یادگیری عمیق است که برای حل مسائل مربوط به بخش بندی تصاویر استفاده میشود. این معماری از چندین لایه پردازشی (که همان کار «encoder»ها را انجام میدهند) و یک سری لایههای مقابل به عنوان «decoder» برای مشخص کردن بخشهای تصاویر تشکیل شدهاست.
یکی از مزیتهای کلیدی SegNet این است که جزئیات را در تصویر بخشبندی شده به خوبی حفظ میکند. دلیل این اتفاق این است که شاخصهایی که وظیفهی جمعآوری را در بخش «encoder» دارند، به شاخصهای جمعآوری در بخش «decoder» متصل هستند. به طور خلاصه، اطلاعات به صورت مستقیم منتقل میشوند به جای اینکه به صورت دستهجمعی منتقل شوند. SegNet یکی از بهترین مدلها برای حل مشکلات مربوط به بخشبندی تصاویر است.
10. معماری GAN) Generative Adversarial Network)
GAN یک گونه کاملا متفاوت از معماری شبکههای عصبی است که در آن از یک شبکه عصبی استفاده شدهاست تا یک تصویر کاملا جدید را تشکیل دهد که اصلا در دادههای تعلیمی وجود ندارد، ولی به حدی واقعگرایانه است که بخشی از این مجموعه دادهای باشد؛ برای مثال، در زیر تصویری از ساختار شبکههای GAN را مشاهده میکنید.
اگر مایل به کسب اطلاعات بیشتر در این زمینه باشید، شاید آموزشهای زیر بتوانند برایتان مقید باشند:
- آموزش یادگیری عمیق (Deep learning)
- آموزش برنامه نویسی یادگیری عمیق با پایتون
- مجموعه آموزش های شبکه های عصبی مصنوعی در متلب
**