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

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

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

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

 

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

  1. Convolutional neural networks
  2. Restricted Boltzmann Machines :RBMS
  3. Autoencoders
  4. Sparse Coding

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

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

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

اصلی زیر، عملیات را پیاده سازی می کنیم:

 

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

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

%Read an Example Image

x1 = imread('child.jpg');

x = imresize(x1, 1);

% x = rgb2gray(x1);

%convert to single format
 x = im2single(x);

%Visualize the input x
figure(1); 
clf; 
imagesc(x);

%create a bank of linear filter
w = randn(5, 5, 3, 10, 'single');

%convolution of the image with filters
figure();

for k = 1 : 10
    y(:, :, :, k) = convn(x(:, :, :), w(:, :, :, k), 'valid');

    subplot(2, 5, k);
    imshow(y(:, :, k))
end

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

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

قسمت دوم: لایه کاهش ویژگیها (pooling)
قسمت سوم: لایه تماما متصل (fully connected)
قسمت چهارم: الگوریتم پس انتشار خطا
معماریهای شناخته شده یادگیری عمیق: قسمت اول
معماریهای شناخته شده یادگیری عمیق: قسمت دوم

 

0/5 ( 0 نظر )
۱۴ دیدگاه ها
  • Avatar
    الهام
    پاسخ
    ارسال شده در۱:۱۳ ب.ظ,۲۶ تیر, ۱۳۹۸

    سلام;فرآیند آموزش شبکه یا حرکت رو به جلو آیا از لایه های کانولوشنی شروع می شوند یا نه لایه های عمیق و خروجی به کجا ختم میشه ؟طرز کارشو میشه بیشتر توضیح بدین؟
    و مورد دیگه اینکه ابعاد فیلترها و تعداد آن را چگونه تنظیم می کنیم؟

  • ارسال شده در۲:۰۰ ق.ظ,۱۴ خرداد, ۱۳۹۸
  • ارسال شده در۲:۱۸ ق.ظ,۱۳ خرداد, ۱۳۹۸
  • Avatar
    سعید داودی
    پاسخ
    ارسال شده در۹:۵۰ ب.ظ,۸ اردیبهشت, ۱۳۹۸

    سلام جناب غلامعلی نژاد
    ممنون از سایت و توضیحات خوب و عالیتون
    میخواستم بدونم این لایه کانولوشن رو که اینجا کدهاشو تو پایتون نوشتین، تو متلب چجوری باید بنویسم؟

  • Avatar
    نگار
    پاسخ
    ارسال شده در۵:۰۶ ب.ظ,۹ آذر, ۱۳۹۷

    سلام من میخام از شبکه عصبی کانولوشن استفاده کنم روی یک سیستم core i5,با ۴ گیگ رم نمیشه پیاده کرد؟

  • Avatar
    فاطی
    پاسخ
    ارسال شده در۴:۲۷ ب.ظ,۷ آذر, ۱۳۹۷

    باسلام
    ببخشید حداقل مشخصات سیستم لپ تاپی که بتوان با آن شبکه عصبی کانولوشنال ران کرد و به جواب رسید را میشه لطفا بفرمایید خیلی ضروریه
    متشکرم

  • Avatar
    بهار
    پاسخ
    ارسال شده در۷:۰۷ ق.ظ,۲۴ خرداد, ۱۳۹۷

    سلام وقت بخیر
    خیلی خوبه .ادامه بدین. اموزش دوباره یک شبکه کانولوشنی(از قبل اموزش داده شده) را هم توی متلب ۲۰۱۶ اموزش بدین لطفا.

      • Avatar
        زیبا
        پاسخ
        ارسال شده در۱۱:۲۸ ب.ظ,۶ آذر, ۱۳۹۷

        سلام ببخشید اماده نشده این اموزشتون

ارسال دیدگاه

دیدگاه
نام
ایمیل
وبسایت