پیاده سازی شبکه عصبی عمیق در متلب – قسمت اول : کانولوشن

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

مقاله مرتبط :

یادگیری عمیق :

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

طی سالهای اخیر, یادگیری عمیق در حوزه بینایی ماشین بصورت گسترده مورد مطالعه قرار گرفته است و به همین دلیل, تعداد زیادی از روش های مرتبط با آن بوجود آمده است. این روش ها را  بر اساس روش پایه ای که از آن مشتق شده اند می توان به ۴ دسته مختلف تقسیم کرد که عبارتند از:

  1. شبکه های عصبی کانولوشنی ( Convolutional neural networks )
  2. ماشین بولتزمن محدود ( Restricted Boltzmann Machines :RBMS )
  3. انکودرهای خودکار ( Autoencoders )
  4. کد نویسی پراکنده ( Sparse Coding )

شبکه های عصبی کانولوشنی ( Convolutional neural networks )

شبکه های عصبی کانولوشن ( CNN ) یکی از مهمترین روش های یادگیری عمیق  هستند که در آنها چندین لایه با روشی قدرتمند آموزش می بینند. این روش بسیار کارآمد بوده و یکی از رایج ترین روش ها در کاربردهای مختلف بینایی کامپیوتر است. بطور کلی, یک شبکه CNN از سه لایه اصلی تشکیل می شود که عبارتند از : لایه کانولوشن , لایه Pooling و لایه تماما متصل. لایه های مختلف وظایف مختلفی را انجام می دهد. در هر شبکه عصبی کانولوشن دو مرحله برای آموزش وجود دارد. مرحله Feed forward و مرحله Back propagation یا پس انتشار .در مرحله اول  تصویر ورودی به شبکه تغذیه می شود و این عمل چیزی جز ضرب نقطه ای بین ورودی و پارامترهای هر نورون و نهایتا اعمال عملیات کانولوشن در هر لایه نیست. سپس خروجی شبکه محاسبه می شود. در این جا به منظور تنظیم پارامترهای شبکه و یا به عبارت دیگر همان آموزش شبکه, از نتیجه خروجی جهت محاسبه میزان خطای شبکه استفاده می شود. برای اینکار خروجی شبکه را با استفاده از یک تابع خطا ( Loss function ) با پاسخ صحیح مقایسه کرده و اینطور میزان خطا محاسبه می شود. در مرحله بعدی بر اساس میزان خطای محاسبه شده مرحله Back propagation آغاز میشود. در این مرحله مشتق هر پارامتر با توجه به قائده Chain rule محاسبه میشود و تمامی پارامترها با توجه به تاثیری که بر خطای ایجاد شده در شبکه دارند تغییر پیدا می کنند. بعد از بروز آوری شدن پارامترها مرحله بعدی Feed forward شروع می شود. بعد از تکرار تعداد مناسبی از این مراحل آموزش شبکه پایان می ابد.

نقش هر کدام از لایه ها را در ادامه بررسی می کنیم:

 لایه کانولوشن :

این لایه از تعدادی فیلتر تشکیل شده است که با کانوالو شدن در ورودی شبکه، نقشه های ویژگی را می سازند. فرآیند یادگیری شبکه عصبی عمیق، بروز رسانی مداوم عناصر فیلترها می باشد. یعنی وزنهای شبکه ی عصبی، همان عناصر این فیلترها می باشند. برای شبیه سازی این لایه، ابتدا باید تعدادی فیلتر با سایزهای یکسان و مقادیر تصادفی درست کنیم. که برای این کار می توان از دستور randn در محیط نرم افزار متلب استفاده کرد. برای فیلتر کردن هم می توان از دستور convn استفاده کرد. به عنوان نمونه برای تصویر اصلی زیر، عملیات را پیاده سازی می کنیم :

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

کد لایه ی کانولوشن به صورت زیر است:

<span style="color: #aeaeae; font-style: italic;">%Read an Example Image</span>

x1 = <span style="color: #99cf50;">imread</span>(<span style="color: #65b042;">'child.jpg'</span>);

x = <span style="color: #9b859d;">imresize</span>(x1, <span style="color: #3387cc;">1</span>);

<span style="color: #aeaeae; font-style: italic;">% x = rgb2gray(x1);</span>

<span style="color: #aeaeae; font-style: italic;">%convert to single format</span>
 x = <span style="color: #9b859d;">im2single</span>(x);

<span style="color: #aeaeae; font-style: italic;">%Visualize the input x</span>
<span style="color: #9b859d;">figure</span>(<span style="color: #3387cc;">1</span>);
<span style="color: #9b859d;">clf</span>;
<span style="color: #9b859d;">imagesc</span>(x);

<span style="color: #aeaeae; font-style: italic;">%create a bank of linear filter</span>
w = <span style="color: #e28964;">randn</span>(<span style="color: #3387cc;">5</span>, <span style="color: #3387cc;">5</span>, <span style="color: #3387cc;">3</span>, <span style="color: #3387cc;">10</span>, <span style="color: #65b042;">'single'</span>);

<span style="color: #aeaeae; font-style: italic;">%convolution of the image with filters</span>
<span style="color: #9b859d;">figure</span>();

<span style="color: #e28964;">for</span> k = <span style="color: #3387cc;">1 </span><span style="color: #e28964;">: </span><span style="color: #3387cc;">10</span>
    y(<span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, k) = <span style="color: #e28964;">convn</span>(x(<span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>), w(<span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, k), <span style="color: #65b042;">'valid'</span>);

    <span style="color: #9b859d;">subplot</span>(<span style="color: #3387cc;">2</span>, <span style="color: #3387cc;">5</span>, k);
<span style="color: #9b859d;"> imshow</span>(y(<span style="color: #e28964;">:</span>, <span style="color: #e28964;">:</span>, k))
<span style="color: #e28964;">end</span>

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

در درسنامه های بعدی، مراحل دیگر فرآیند یادگیری عمیق را ادامه خواهیم داد.

بیشتر بخوانید :

منبع شهاب

همچنین ببینید

پلاک خوان هوشمند چیست

پلاک خوان هوشمند چیست و چگونه عمل می کند + معرفی بهترین پلاک خوان ایران

پلاک خوان هوشمند دستگاهی است که از فناوری پیشرفته هوش مصنوعی (AI) و بینایی ماشین …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *