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

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

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

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

 

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

  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

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

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

با ما همراه باشید.

 

بدون دیدگاه

ارسال یک نظر

نظر
نام
ایمیل
وبسایت