آشنایی با شبکه عصبی کانولوشنی (پیچشی) یا CNN

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

یک شبکه عصبی کانولوشنی (CNN) دارای یک یا بیشتر از یک لایه‌ی پیچشی است و به طور عمده برای پردازش تصویر، طبقه‌بندی، تقسیم‌بندی و همچنین سایر داده‌های خودهمبسته (autocorrelated data) استفاده می‌شوند. یک پیچش (convolution)، فیلتری بر روی ورودی است. یک راه مفید برای فکر‌کردن در مورد این شبکه‌ها تمرکز بر روی جمله‌ی معروف دکتر Prasad Samarakoon می‌باشد که گفته: “یک پیچش می‌تواند به عنوان نگاه به عملکرد شبکه برای بهتر ‌‌ساختن یا پیش‌بینی دقیق‌تر خروجی در نظر گرفته ‌شود.” این مانند آن است که برای پیدا کردن ویژگی‌های قطعه‌ای از عکس به جای اینکه به کل تصویر نگاه کنیم، بخشی از آن را در نظر می‌گیریم.

کاربردهای رایج CNNها

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

اگرچه اغلب از CNN‌ها در شبکه‌های عصبی بازگشتی (RNN) استفاده می‌شود اما در پردازش زبان طبیعی (NLP) و تشخیص گفتار هم کاربرد دارند.

همچنین CNN می‌تواند به عنوان معماری U-Net پیاده سازی شود که دو CNN منعکس شده هستند که در نهایت منجر به یک CNN می‌شوند. در نتیجه معماری آن را می‌توان به شکل U نشان داد.

کاربردهای جالب دیگر برای شبکه عصبی کانولوشنی به غیر از پردازش تصویر

کاربردهای متنوع و جالب تری برای معماری‌های CNN یافت می‌شود. نمونه‌ای از کاربردهای غیر تصویری “اثربخشی غیر منطقی شبکه‌های عصبی کانوولوشن در استنتاج ژنتیکی جمعیت” می‌باشد. این مورد برای یافتن جریان ژن، استنباط تغییرات اندازه‌ی جمعیت و استنباط نرخ بازترکیبی (recombination) کاربرد دارد.

محققانی مانند پروفسور Gerald Quon در آزمایشگاه زیست شناسی Quon-titative هستند که از CNN برای مدل‌های تولید تک‌سلولی جهت شناسایی بیماری استفاده می‌کنند.

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

Deepmind’s WaveNet یک مدل شبکه عصبی کانولوشنی برای تولید صدای ترکیبی است که به عنوان پایه‌ای برای ترکیب کننده‌ی صدای دستیار گوگل (Google Assistant) استفاده می‌شود.

 

هسته‌های پیچشی

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

از دید کامپیوتر، ورودی اغلب یک کانال 3 تایی RGB است. برای سادگی از یک تصویر سیاه سفید استفاده می‌کنیم که یک کانال (یک ماتریس دو بعدی) و یک هسته‌ی پیچشی \(3\times 3\) دارد. هسته بر روی ماتریس ورودی اعداد، به صورت افقی، ستون به ستون حرکت می‌کند. اولین ردیف‌های ماتریس را که دربردارنده‌ی مقادیر پیکسلی تصویر است؛ اسکن می‌کند. سپس هسته به صورت عمودی به ردیف‌های بعدی می‌رود. توجه داشته باشید که فیلتر ممکن است بر روی بیش از یک یا چند پیکسل به طور همزمان حرکت کند؛ این موضوع در زیر بیشتر توضیح داده شده است.

در سایر برنامه‌های غیر بصری، یک پیچش 1 بعدی ممکن است به طور عمودی بر روی یک ماتریس ورودی حرکت کند.

 

ایجاد یک نقشه ویژگی از یک هسته پیچشی

هسته پیچشی
هسته پیچشی

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

در زیر نیز تصویری از یک نمایش عالی ارائه شده است که اسکن هسته را روی مقادیر موجود در ماتریس ورودی نشان می‌دهد.

 

اسکن هسته از پیکسل‌ها
اسکن هسته از پیکسل‌ها

لایه

برای مدیریت پیکسل‌های حاشیه چندین رویکرد وجود دارد:

  • از دست دادن پیکسل‌های حاشیه
  • لایه همراه با پیکسل‌هایی با مقدار صفر
  • لایه‌ی ‌انعکاسی

لایه‌‌ی بازتابی بهترین روش است، جایی که تعداد پیکسل‌های مورد نیاز برای هسته پیچشی جهت پردازش پیکسل‌های حاشیه در هنگام کپی پیکسل‌ها از حاشیه‌ی عکس به بیرون اضافه شده است. برای یک هسته\(7\times7\) ، سه پیکسل در خارج منعکس می‌شوند. پیکسل‌هایی که در هر طرف اضافه می‌شوند‌‌‌؛ ابعادی هستند که به نصف رسیده و گرد شده‌اند.

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

با لایه ، خروجیِ حاصل از ورودی با عرض \(w\) و ارتفاع \(h\)، می‌تواند عرض  \(w\) و ارتفاع \(h\) باشد (همان ورودی با یک کانال ورودی واحد)؛ با فرض اینکه هسته از یک پیکسل به طور همزمان استفاده کند.

ایجاد چندین کانال/نقشه‌ی ویژگی با چندین هسته

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

تجسم کانال‌ها / نقشه‌های ویژگی‌های ایجاد شده از لایه ای از هسته‌های پیچشی.
تجسم کانال‌ها / نقشه‌های ویژگی‌های ایجاد شده از لایه ای از هسته‌های پیچشی.

ورودی 3تایی کانال

در بیشتر مواقع، پردازش تصویر نیاز به کار بر روی تصاویر RGB با سه کانال دارد. یک تصویرِ RGB، یک آرایه‌ی سه بعدی از اعداد است که در غیر این صورت به عنوان یک تنسور درجه سه شناخته می‌شود.

هنگام پردازش یک تصویرِ RGB سه کاناله ، معمولاً از یک هسته پیچشی که یک آرایه‌ی 3 بعدی یا تنسور درجه 3 است؛ استفاده می‌شود. اندازه‌ی \(3\times3\times3\) داشتن و شبیه مکعب بودن برای یک هسته‌ی پیچشی بسیار رایج است.

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

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

فیلتر در امتداد ردیف‌ها حرکت می‌کند؛ سپس به سمت پایین ستون‌ها حرکت کرده و مجدد در امتداد ردیف‌ها حرکت می‌کند تا اینکه به گوشه پایین سمت راست برسد.

هسته حلقوی 3*3*3 که در ورودی 3 کاناله فعالیت می‌کند.
هسته حلقوی 3*3*3 که در ورودی 3 کاناله فعالیت می‌کند.

با استفاده از لایه و گام اول، از ورودی با عرض \(x\) ، ارتفاع \(y\) و عمق 3، خروجی با عرض \(x\)، ارتفاع \(y\) و عمق 1 خواهیم داشت؛ زیرا مکعب مقدار خلاصه‌ای از خروجی را از هر گام تولید می‌کند. به عنوان مثال با ورودی \(64\times64\times3\) یک هسته با لایه‌ی پیکسل‌های حاشیه، یک کانال/نقشه‌ی ویژگی \(64\times64\) را به عنوان خروجی تولید می‌کند.

گام‌ها

استفاده از یک گام دوتایی پیچیده نسبت به یک گام پیچیده، در جایی که هسته‌ی پیچشی، همزمان بر روی 2 پیکسل حرکت می‌کند؛ رایج است. برای مثال هسته‌ی \(3\times3\) ما از موقعیت (1,1) شروع به حرکت می‌کند؛ سپس به (1,3) و پس از آن به (1,5) و … می‌رود. در این حالت اندازه‌ی خروجی کانال/نقشه‌ی ویژگی را در مقایسه با هسته‌ی پیچشی‌ای که یک گام برمی‌دارد؛ نصف می‌کند.

با لایه، خروجی حاصل از ورودی با عرض \(x\)، ارتفاع h و عمق 3، با عرض \(w/2\)، ارتفاع \(h/2\) و عمق 1 تولید می‌شود؛ زیرا هسته از هر گام تنها یک خروجی تولید می‌کند.

به عنوان مثال با ورودی \(64\times64\times3\) (یک تصویر سه کاناله‌یRGB با ابعاد \(64\times64\)) یک هسته با گام‌های دوتایی همراه با لایه‌ای از پیکسل‌های حاشیه، یک کانال/نقشه‌ی ویژگی \(32\times32\) تولید می‌کند.

هسته‌های زیاد

در مدل‌های CNN اغلب بیشتر از سه هسته‌ی پیچشی وجود دارد. 16 یا حتی 64 هسته در یک لایه پیچشی نیز رایج است. این هسته‌های پیچشی مختلف هر یک به عنوان یک فیلتر جداگانه یک کانال/نقشه‌ی ویژگی را ایجاد می‌کند که چیزهای مختلفی را نشان می‌دهد. به عنوان مثال ، هسته‌ها می‌توانند لبه‌های بالایی ، لبه‌های پایین ، خطوط قطری و … را فیلتر کنند. در شبکه‌های بسیار عمیق‌تر این هسته‌ها می‌توانند ویژگی‌های حیوانی مانند چشم یا بال پرنده را فیلتر کنند.

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

نمونه‌ای از چندین لایه‌ی پیچشی دو گامی

با ورودی مربع شکل 64 پیکسلیِ سه کاناله و 16 هسته \(3\times3\times3\)  لایه‌ی پیچشی ما دارای موارد زیر است:

  • ورودی: \(64\times64\times3\)
  • هسته‌های پیچشی: \(16\times3\times3\times3\) (یک تنسور چهار بعدی)
  • خروجی/فعال سازی هسته‌های پیچشی: 16*32*32  (16 کانال/ نقشه‌ی ویژگی\(32\times32\))

سپس شبکه می‌تواند از نرمال‌سازی دسته‌ای برای کاهش زمان یادگیری و کاهش overfitting، استفاده کند. علاوه بر این ، معمولاً یک تابع فعال‌سازی

تابع relu
تابع relu

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

 

 

 

به زبان ساده ، یک شبکه عصبی کانولوشنی که به اندازه‌ی کافی بزرگ باشد؛ می‌تواند هر مسئله ای را که دارای جواب است؛ حل کند. معماری قابل توجه CNN که در بسیاری از کارهای مختلف پردازش تصویر بسیار خوب عمل می‌کند شامل مدل‌های VGG، مدل‌های ResNet  و مدل‌های Google Inception هستند. این مدل‌ها میلیون‌ها پارامتر قابل آموزش دارند.

 

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.