شبکه عصبی موبایل نت
بهنام خدا، سلام… میخواهم در این مقاله به تشریح شبکه عصبی موبایل نت بپردازم. یک شبکه عصبی کانولوشنی که مهمترین خاصیتش، سرعت بالا و پارامتر کم هست. این آموزش را براساس مقاله اصلی شبکه عصبی موبایل نت آماده کردهام. تلاش کردم که توضیحات روان و ساده باشد. با آکادمی هوش مصنوعی هوسم همراه باشید…
مقدمهای بر شبکه عصبی موبایل نت
از زمان پیدایش شبکه کانولوشنی AlexNet در بینایی کامپیوتر و برنده شدن مسابقه ILSVRC 2012 (همان ImageNet معروف)، شبکه عصبی کانولوشن بسیار محبوب شده است. در بسیاری از زمینههای بینایی کامپیوتر تحول ایجاد کرده است. در سالهای بعد از شبکه الکس نت، شبکههای عمیقتر، پهنتر و البته پیچیدهتر مانند GoogleNet ResNet ResNext و غیره برای رسیدن به دقت بالاتر مطرح شد. باوجود پیچیدگی شبکهها، تلاش بر این بوده که تعداد پارامترهای کل شبکه کمتر شود و انصافا همواره طراحی کارآمدتری را شاهد بودیم. اما تمرکز اصلی در طراحی این شبکهها دقت بود. به شکل زیر نگاه کنید؛ نقطههای فیروزهای اشاره به بهترین دقتها در هرسال روی دیتاست ImageNet دارد. درحال حاضر، EffiecientNet بهترین است.
جای خالی شبکههای با سایز کوچک و سرعت بالا با قابلیت استفاده در رباتیک، بردهای مینیکامپیوتری و البته موبایلها احساس میشد. برهمین اساس، دسته جدیدی از شبکههای کانولوشنی سبک با پارامترهای کم، سرعت اجرای بالا و البته دقت قابلقبول شکل گرفت. یکی از شاخصترین شبکههای سبک، شبکه عصبی موبایل نت (MobileNet) نام دارد. این شبکه توسط محققان گوگل با هدف طراحی شبکههای کارآمد، سبک، سریع و با دقت قابلقبول مطرح شده است. پیش از موبایل نت کارهایی انجام شده بود که میتوانید در بخش کارهای مرتبط مقاله اصلی مطالعه کنید.
بسیار خب، مقدمه کافی است و برویم سراغ اصل مطلب…
معرفی یک نوع کانولوشن جدید در شبکه عصبی موبایل نت
در شبکه عصبی موبایل نت یک نوع کانولوشن جدید بهنام depth-wise separable convolution معرفی شد. درواقع، عنصر اصلی در شبکه موبایل نت این لایه کانولوشنی (depth-wise separable convolution) هست. نمیدانم به فارسی چه اسمی برای این لایه مناسب هست! مثلا کانولوشن عمقی، عمق-جداپذیر یا گوگل ترنسلیت میگوید: “کانولوشن از عمق قابل جدا شدن است!”. کانولوشن عمق-جداپذیر بد نیست، اما علاقه ندارم عبارات مهم را به فارسی تبدیل کنم. من فعلا نامش را مخفف کردم و میخواهم از عبارت “کانولوشن dws” استفاده کنم. اگر پیشنهاد بهتری دارید، لطفا کامنت کنید…
اما برای فهمیدن کانولوشن dws، نیاز است که مروری بر کانولوشن استاندارد داشته باشیم. منظورم از استاندارد، همان کانولوشنی است که میشناسید و در شبکه کانولوشنی وجود دارد. اگر با کانولوشن و شبکه کانولوشنی آشنا نیستید، این پست را بخوانید. برهمین اساس، ابتدا کانولوشن استاندارد را مروری میکنیم و سپس کانولوشن depth-wise separable (یا همان کانولوشن dws) را توضیح میدهم.
کانولوشن استاندارد
در یک کانولوشن استاندارد دو مرحله فیلتر و ادغام وجود دارد. اما این دو مرحله در کانولوشن استاندارد تنها در یک گام انجام میشود. بهگونهای که شاید تابهحال به این مساله پی نبرده بودید که کانولوشن شامل دو مرحله فیلتر و ادغام هست. به شکل زیر نگاه کنید. در این شکل یک فیچرمپ F بهابعاد 112×112×4 و یک کرنل K بهابعاد 3×3×4 نشان داده شده که قرار است در هم کانوالو شوند. در این شکل واضح است که دو مرحله زیر انجام میشود:
- در مرحله اول یعنی فیلترکردن، هرصفحه از فیلتر K در صفحه متناطرش در فیچرمپ F کانوالو میشود.
- درمرحله دوم یعنی ادغامکردن، صفحات باهم جمع میشوند. با جمع شدن صفحات، در خروجی یک صفحه بهدست میآید که خروجی کانولوشن استاندارد است.
حال اگر M کرنل به ابعاد 3×3×4 داشته باشیم، طبیعتا از کانوالو هریک از این کرنلها با فیچرمپ یک صفحه بهدست میآید. درنتیجه، فیچرمپ خروجی برابر با M صفحه (112×112×M) خواهد بود.
همین اندازه از کانولوشن استاندارد کافی است، برویم سراغ کانولوشن dws…
کانولوشن depth-wise separable
کانولوشن dws قلب تپنده شبکه موبایل نت است. در بخش بالا دیدید که کانولوشن استاندارد، شامل دو مرحله فیلتر و ادغام بود. کانولوشن dws هم شامل دو مرحله فیلتر و ادغام هست. اما هرمرحله تفاوتهای ریزی با مراحل کانولوشن استاندارد دارد. یک تفاوت این است که در کانولوشن dws در هر دو مرحله کانولوشن وجود دارد. درحالیکه در کانولوشن استاندارد، تنها در مرحله فیلتر، کانولوشن وجود دارد. مرحله ادغام یک جمع ساده هست. دو مرحله کانولوشن dws به این قراراست:
- مرحله اول، فیلتر: کانولوشن depth-wise (کانولوشن عمقی)
- مرحله دوم، ادغام: کانولوشن point-wise (کانولوشن نقطهای)
در کانولوشن dws ابتدا کانولوشن عمقی اعمال میشود و سپس کانولوشن نقطهای… کانولوشن عمقی و نقطهای در کانولوشن dws بهترتیب نقش مراحل فیلتر و ادغام در کانولوشن استاندارد را دارند. بسیارخب، درادامه در دو بخش جداگانه به شما درمورد دو مرحله depth-wise و point-wise توضیح میدهم.
-
مرحله اول: کانولوشن depth-wise
همانطور که گفتم، کانولوشن عمقی (depth-wise) معادل همان فیلترکردن در کانولوشن استاندارد است. اما با یک تفاوت مهم:
در کانولوشن استاندارد M کرنل k×k داشتیم. اما در اینجا تنها یک کرنل k×k داریم!
حالا با این کرنل، مرحله اول کانولوشن را انجام میدهیم. با انجام عمل فیلتر، هرصفحه از کرنل در یک صفحه از فیچرمپ ورودی F کانوالو میشود. به این مرحله کانولوشن عمقی گفته میشود. چون در راستای عمق یا صفحات، روی هر صفحه کانولوشن انجام دادهایم و صفحات خروجی را باهم جمع نکردیم.
تا اینجا ممکن است سوالات زیر برای شما پیش آمده باشد:
- فقط یک فیلتر میزنیم؟
- مگر یک فیلتر چقدر ویژگی میتواند استخراج کند؟
- فقط یک فیلتر اعمال میکند، دقت پایین نمیآید؟
- شبکه Squeezenet هم همینکار را میکند؟! این سوال ربطی به موبایل نت ندارد! در کلاسهایم، دهدرصد از افراد کلاس، افرادی هستند که اندکی بیشتر از بقیه میدانند. همه سوالاتشان از بخشهای دیگر هست و در راستای درس سوال نمیپرسند. گاهی هم سوالاتی میپرسند که مربوط به چند اسلاید بعد هست و تمام سیلابسم را به هم میریزند. اما من خونسردم و همیشه آرام برخورد میکنم!
بعضی از دانشجویانم میگویند: “سطح کلاس بالا بود و بچهها قوی بودند، ما خجالت میکشیدیم سوال بپرسیم. سوالهای ما سطح پایین بود!”.
بسیارخب، بجز سوال آخر، در بخش بعدی به جوابِ سوالاتتان میرسید.
-
مرحله دوم: کانولوشن point-wise
مرحله دوم، کانولوشن نقطهای (point-wise) هست. این مرحله معادل با مرحله ادغام در کانولوشن استاندارد است. اما بازهم یک تفاوت اساسی بین مرحله ادغام در کانولوشن استاندارد و کانولوشن dws وجود دارد:
مرحله ادغام در کانولوشن استاندارد، یک جمع ساده هست، اما مرحله ادغام در کانولوشن dws شامل یک کانولوشن 1×1 است.
کانولوشن نقطهای همان کانولوشن استاندارد یا رایجی هست که میشناسیم و در بسیاری از شبکههای کانولوشنی استفاده میشود. این کانولوشن 1×1 وظیفه مهمی دارد؛ کانولوشن نقطهای 1×1 خروجیهای کانولوشن عمقی (مرحله اول) را با هم ادغام میکند. در مرحله قبل بجای تعریف M کرنل، تنها یک کرنل تعریف کردیم. اما در این مرحله، M کرنل 1×1 تعریف میکنیم. حالا M کرنل 1×1×4 و یک فیچرمپ 112×112×4 داریم. تکتک کرنلهای 1×1×4 را در فیچرمپ کانوالو میکنیم. هر کرنل 1×1 شامل 4 وزن هست و در واقع قرار است به هر صفحه از فیچرمپ ورودی یک وزن بدهد و آنها را باهم جمع کند. یعنی جمع وزندار صفحات؟ دقیقا…
پس ما یک فیچرمپ به ابعاد 112×112×4 داریم که قراراست با کرنلهای مختلف 1×1 جمع وزندار شود. این مساله شما را یاد چه میاندازد؟ نورون
-
کانولوشن نقطهای در نقش نورون
یک نورون، از ورودیهایش یکسری عدد دریافت میکند. این اعداد در وزن متناظر خود ضرب و درنهایت باهم جمع میشوند. به شکل زیر نگاه کنید؛ دراینجا هم کانولوشن 1×1 نقطهای چنین نقشی را برای فیچرمپ گذشته از مرحله 1 (کانولوشن عمقی) ایفا میکند. یعنی کانولوشن 1×1 یک لایه فولی کانکتد است که M نورون دارد و هر ورودیاش معادل با یک صفحه است. هریک از این صفحات در یک وزنی ضرب میشوند و درنهایت باهم جمع میشوند. M فیلتر 1×1 در نقش یک لایه فولی کانکتد:
-
مقایسه لایه کانولوشن dws و استاندارد در موبایل نت
خلاصه کانولوشن استاندارد این شد که:
در کانولوشن استاندارد، M کرنل به ابعاد k×k تعریف کردیم.
و البته، خلاصه کانولوشن dws این شد که:
در کانولوشن depth-wise separable convolution، تنها 1 کرنل k×k (فیلتر) داریم، اما M کرنل 1×1 (ادغام) تعریف کردهایم.
خلاصه اینکه، ما خروجی مرحله فیلتر را بجای اینکه ساده باهم جمع میکنیم، هی وزنهای مختلفی به هر صفحه میدهیم و جمعشان میکنیم. بیایید فرآیند کامل کانولوشن dws در شکل زیر مرور کنیم:
در پایان، بلوک دیاگرام کانولوشن استاندارد و dws را در شکل زیر آوردهام. در این شکل، بچنرم و تابع تحریک رلو هم نشان داده شده است. این دو بلوک دیاگرام را به ذهن بسپارید، بعدا در معماری با آن کار داریم.
بسیارخب، حالا برویم معماری را بررسی کنیم.
معماری شبکه عصبی موبایل نت
در شکل زیر میتوانید معماری شبکه موبایل نت را ببینید. در بخش قبل (شکل 10) گفتیم که هر لایه، بچنرم و تابع تحریک رلو دارد. برای سادگی بیشتر، BatchNorm و ReLU در شکل زیر نیامده است. همانطور که در بخشهای قبلی گفته شد، شبکه عصبی موبایل نت از لایه کانولوشنی dws تشکیل شده است. البته، در اولین لایه از یک کانولوشن استاندارد استفاده شده است.
بسیار خب، کمی معماری را بررسی کنیم:
- در اولین لایه، یک لایه کانولوشن استاندارد به اندازه 3×3 با 32 فیلتر و استراید 2 درنظر گرفته شده.
- از لایه دوم به بعد تمام لایهها کانولوشن dws هستند. گفتیم که لایه dws شامل دو بخش کانولوشن عمقی و نقطهای است. این دو لایه در شکل بهصورت جدا نشان داده شدهاند. لایه کانولوشن عمقی با علامت Conv dw و نقطهای با علامت Conv و سایز 1×1 نشان داده شده است.
- سایز فیلتر تمامی لایههای کانولوشن عمقی 3×3 هست.
- در دومین سطر، یک لایه Conv dw بهکار رفته است.
- در سومین سطر، Conv 1×1 گذاشته شده است. همان کانولوشن نقطهای که صحبت کردیم. ادامه همان سطر قبلی است و بخش دوم کانولوشن dws ماست.
- نکته قابل توجه در این معماری، عدم استفاده از ماکس پولینگ هست. هرجایی به کاهش ابعاد نیاز بوده، استراید کانولوشن 2 درنظر گرفته شده.
- یک لایه کانولوشن با 64 فیلتر داریم. پس از آن 2 لایه با 128 و سپس 2 لایه با 256 فیلتر درنظر گرفته شده. هر 2 لایه یک استراید داریم: یکی در لایه دوم 128 و یکی در لایه دوم 256.
- 6 لایه 512 فیلتری داریم.
- تا اینجا رفته رفته که در شبکه جلو آمدیم، سه اتفاق مهم افتاد:
- ابعاد تصویر کاهش بعد پیدا کرد.
- تعداد فیلترها رفته رفته زیاد شد.
- تعداد لایههای با فیلتر یکسان افزایش پیدا کرد، یعنی: 1 لایه 32، 1 لایه 64، 2 لایه 128 و 2 لایه 256 و 6 لایه 512.
- سپس، 2 لایه 1024 فیلتری داریم. انتظار داشتید که تعداد لایهها در اینجا بیشتر از 6 باشد؟ من فکر میکنم دلیلش این هست که:
- با همین تعداد لایه میتوانیم به جواب قابل قبول برسیم.
- همچنین، تعداد پارامترهای شبکه زیاد میشد. درحالیکه دغدغه در این مقاله این هست که تعداد پارامترها کم باشد.
- درنهایت هم، یک لایه پولینگ میانگین، فولیکانکتد و تمام.
- اگر لایههای Conv dw و Conv 1×1 را جدا درنظر بگیریم، 28 لایه داریم.
شبکه عصبی موبایل نت 4.2 میلیون پارامتر دارد. وقتی تعداد پارامترهای این شبکه را با شبکه محبوب ResNet-18 با 11 میلیون پارامتر مقایسه کنیم، متوجه میشوید که چقدر میزان پارامترها کمتر است. اما بیایید ببینیم از 4.2 میلیون پارامتر، چند درصدش مربوط به لایه کانولوشن dws میشود. به شکل زیر نگاه کنید؛ 74.59% پارامترها مربوط به همان لایههای کانولوشن 1×1 است. عجب! درحالیکه تعداد پارامترهای دو لایه Conv dw و Conv 3×3 مجموعا 1.08% کل پارامترهاست. خب، تعداد پارامترهای کلاسیفایر هم طبیعتا زیاد هست.
کل کانولوشن تشکیلشده از ضرب و جمع هست. ستون دوم که Mult-Adds هست، میگوید که 94.86% حجم محاسبات در همان لایه Conv 1×1 هست. نکته مهم این است که با یک ایده جالب حجم محاسبات و تعداد پارامترها تا چه اندازه در لایههای Conv 3×3 کاهش یافته است. اگر لایه کانولوشن dws را برداریم و بجایش کانولوشن استاندارد با همان تعداد فیلتر قرار دهیم، تعداد پارامترها از 4.2 میلیون به 29.3 میلیون افزایش مییابد! ببینید یک لایه سادهشده چه میکند. در بخش ارزیابی، بیشتر درباره این موضوع صحبت خواهم کرد.
موبایل نت تا همینجا هم یک نسخه سبک و سریع هست. اما همچنان این شبکه میتواند سریعتر و سبکتر شود. در بسیاری از کاربردها ممکن است حاضر باشیم، اندکی دقت را فدا کنیم تا به سرعت بالاتر در اجرای شبکه دست پیدا کنیم. شبکه موبایل نت دو هایپرپارامتر α و ρ دارد. این دو هایپرپارامتر به ما این امکان را میدهد که با تنظیم کردن آنها، شبکه را سبکتر و سریعتر کنیم. بعدا، این پست را کامل میکنم و درباره این دو پارامتر توضیح میدهم.
ارزیابی شبکه موبایل نت
در اولین آزمایش، شبکه موبایل نت با نسخه استاندارد خودش مقایسه شده است! برای مقایسه، یک نسخه موبایل نت با کانولوشن استاندارد ساخته شده است. همه لایههای کانولوشن dws با لایه کانولوشن استاندارد جایگزین شده است. اعداد قابل تامل هست! بیایید کمی روی این جدول بحث کنیم:
- موبایل نت با لایه های استاندارد، حدود 29 میلیون پارامتر دارد، اما موبایل نت فقط 4.2 میلیون پارامتر!
- دقتها را ببینید. این همه پارامتر اضافه تنها برای 1.1درصد؟!
- میزان محاسبات هم از حدود 4.9 میلیارد جمع-ضرب به 596 میلیون جمع-ضرب کاهش یافته…
اما، بیایید شبکه موبایل نت را با یکسری شبکه کانولوشن معروف مقایسه کنیم. شکل زیر، مقایسه پارامترها، عملیات و دقت شبکه موبایل نت با شبکه گوگل نت و VGG را نشان میدهد. مشاهده میکنید که:
- شبکه VGG، حدود 140 میلیون پارامتر دارد. اما فقط 1% بهتر از شبکه موبایل نت با 4.2 میلیون پارامتر است.
- درمورد تعداد عملیات که نگویم برایتان! 1/3 محاسبات نسبت به گوگل نت.
- در دقت، باوجود تعداد پارامتر و عملیات کمتر، دقت بهتری نسبت به گوگل نت دارد.
تمام! شبکه عصبی موبایل نت هم تمام شد. هریک از این شبکهها یک عالمه راز در دل خود دارند. باید بارها و بارها مقالههایشان را خواند و یک عالمه آزمایش با آنها انجام داد تا رازهایشان کشف شود. امیدوارم که این پست رضایتتان را جلب کرده باشد. نظر، انتقاد و پیشنهادتان را کامنت کنید و با هوسم همراه باشید…
مطالب زیر را حتما مطالعه کنید
شبکه عصبی mlp
شبکه ترنسفورمر
مدل MobileLLM
یادگیری عمیق چیست
آموزش یادگیری عمیق رایگان
شبکه عصبی کانولوشن
22 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
باسلام و خداقوت برای آموزش بسیار خوب و کاربردی شما
ببخشید ممکن هست من ایمیل نویسنده ی پست را داشته باشم برای پروژه ی خودم نیاز به مشاوره دارم.
باتشکر
سلام
نویسنده این آموزش دکتر اشرفی هستند که برای دریافت مشاوره میتونین به آدرس howsam.mail@gmail.com ایمیل بزنین.
با سلام
کامل و عالی بود.
یک سوال داشتم اگر در شبکه ای مثل resnet بخواهیم لایه کانولوشن استاندارد رو با با depthwise عوض کنیم دیگه از وزن های از پیش اموزش دیده شده که روی imagenet اموزش دیده نمیشه استفاده کرد؟
بسیار ممنون و سپاسگزارم .
حقیقتا کار شما شایسته احترام هست
سلیس، شیوا, روان و مسلط
لطفا با همین انگیزه و توانایی به این مسیر ادامه بدید
هیات علمی گروه برق
سلام 🌹
ممنون از محبت شما😊
سلام
بسیار عالی
اگر نسخه های دیگر موبایل نت را هم تغییراتشان را بیان کنید فوق العاده خواهد شد.
سلام
واقعا خدا قوت،
خیلی خوب بود،
ممنون که ذکات علمتون رو دادین، اونهم خیلی خوب و با حصله و با دقت، خدا خیرتون بده
یاعلی…
سلام، ممنونم از وقتی که برای تولید این آموزش گذاشید.
در کانوولوشن dws یک فلیتر کانوولوشنی با اندازه مشخص در تمامی فیچر مپ کانوالو میشه؟
چون تو شکلی که براش قرار دادین هر صفحه فیچر مپ یک فیلتر جداگانه داره
خیلی ممنون
مثل همیشه مفید و روان بود
با سلام
دستتون درد نکنه، خیلی زحمت کشیدین و مطالب خوب و آموزنده بود
آیا این مبحث ادامه داره؟
سلام
جلسات دوره آموزش یادگیری عمیق رایگان تموم شده. فعلا برنامه ما تکمیل دوره یادگیری ماشین رایگان هست.
از اینکه آموزشها رو دوست داشتید، خوشحالیم.
ممنون 🙏🌹
سللم خسته نباشید
من دارم طبقه بندی تومور های مغزی انجام میدم خود مقاله اصلیم از شبکه resnet34 استفاده کرده به نظر شما من از چه شبکه هایی میتونم استفاده کنم
سلام
معمولا روشهای پیشنهادی (خصوصا دسته بندی) محدودیتی روی بکبون ایجاد نمیکنن. بنابراین، احتمالا شما میتونید بسیاری از شبکه های کانولوشنی مثل شبکه موبایل نت رو استفاده کنید.
بسیار روان و قابل فهم و عالی
سلام
سپاس 🙏🌹
خیلی ممنون از آموزش بسیار روان و مفیدتون
سلام
سپاس 🌹🙏
سلام. تشکر از توضیحات خوبتان.
بهتر بود عبارات اصلی مانند فیچرمپ به نقشه ویژگی یا فولی کانکتد به کاملاً متصل ترجمه می شد.
سلام
ممنون سید عزیز 🌹🙏
ما هدفدار از عبارتهای کلیدی به زبان اصلی در آموزش استفاده میکنیم. به دو دلیل:
* معتقدیم نباید ترجمه نعل به نعل انجام داد. درغیراینصورت، بعضی کلمات نامانوس میشن.
* معتقدیم بهتر هست از عبارتهای کلیدی با نام انگلیسی استفاده کنیم. چون افراد با خوندن مقاله و مطالب انگلیسی کمتر به مشکل میخورن.
سعی کردیم این رویه رو در همه آموزشها مثل شبکه عصبی کانولوشن یا شبکه عصبی LSTM رعایت کنیم.
موافقم باید همینطور باشه
خیلی عالی و مفید. تشکر
سلام
سپاس 🙏🌹