از شبکه‌های عصبی Convolutional چه می‌دانید؟(به همراه کد)

شبکه های عصبی

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

معماری شبکه‌ های عصبی

در یک معماری اساسی، یک مدل یادگیری عمیق، شامل یک لایه ورودی، چندین لایه پنهان و یک لایه خروجی است. یک مدل یادگیری عمیق به دلیل داشتن چندین لایه پنهان به عنوان “عمیق” شناخته می شود. یک شبکه عصبی سنتی شامل حدود ۲ تا ۵ لایه پنهان است. با این حال، در یک مدل یادگیری عمیق، تعداد لایه‌های پنهان می‌تواند ۲۰، ۵۰، ۱۰۰، ۲۰۰، ۵۰۰ یا حتی بیشتر باشد.

دو روش اصلی در یک مدل یادگیری عمیق وجود دارد که  forward propagation و backward propagation  هستند.

Forward propagation

هر لایه حاوی چند نورون (x) است. پیوندهای بین هر نورون دارای وزن‌های مختلف (w) هستند. حالت اولیه وزن‌ها به طور تصادفی تنظیم می‌شود. سپس، از لایه ورودی شروع می‌کنیم. می‌توانیم مقادیر نورون‌ها را در اولین لایه پنهان از طریق شکل ۱ (محاسبه H1 به عنوان نمونه) محاسبه کنیم.

شبکه های عصبی

H1 دارای سه وزن (w1، w2 ، w3) و سه نورون ورودی (x1، x2 ،  x3) است. مقدار H1 را می توان از طریق معادله (۱) محاسبه کرد، به همراه یک بایاس (b). و معادله (۱) را می‌توان برای محاسبه نورون‌های دیگر در لایه پنهان ۱ (مثلاً H2 تا H4) استفاده کرد.

فرمول شبکه های عصبی

از آنجا که شیوه عملکرد این معادله هنوز خطی است. به منظور انتقال این مقادیر خطی به غیرخطی، قبل از گرفتن معادله (۱) برای محاسبه نورون‌ها در لایه پنهان بعدی، H5 به H8 ، یک تابع فعال سازی اعمال می‌شود. برای نمونه دسته‌ای از توابع فعال سازی می‌توان به سیگموئید ، تانژانت هیپربولیک ، ReLU و غیره اشاره کرد.

شبکه های عصبی

سپس forward propagation تا لایه خروجی پردازش می شود و اولین مجموعه از کلاس پیش‌بینی شده، کلاس‌های خروجی پیش بینی شده را تولید می کند.

Backward propagation

پس از تولید اولین مجموعه از نتایج پیش بینی شده، روند backward propagation آغاز می‌شود. این کار با محاسبه هزینه بین کلاس‌های خروجی پیش بینی شده و کلاس‌های خروجی حقیقی شروع می‌شود. الگوریتم‌های مختلف توابع ضرر و هزینه تاکنون ارائه شده است. در زیر از ضریب مربع (نوعی تابع از دست دادن) و خطای میانگین مربعات (MSE) برای نمونه استفاده می‌کنیم.

Square loss برای محاسبه ضرر بین کلاس‌های خروجی پیش و کلاس‌های خروجی حقیقی مربوطه می‌باشد.

Backward propagation

معادله یک تابع square loss مطابق زیر است:

square loss

با استفاده از اولین کلاس پیش بینی شده ، اختلاف بین (f (x1 | θ و y1 را از طریق معادله زیر محاسبه می کند: (x1 | θ)

square loss

میانگین مربعات خطا (MSE) از معادله زیر حساب می‌شود:

میانگین مربعات خطا square loss

همانطور که از معادله دیده می‌شود، MSE مقادیر خطا را جمع می‌کند و سپس میانگین را محاسبه می‌کند. پس از شناخته شدن مقدار تابع هزینه، یک قانون به روزرسانی وزن به آن‌ها اضافه می‌شود، تا بتوانید وزن‌ها را براساس عملکرد هزینه بهینه کنید. بسیاری از قوانین به روز شده در وزن، مانندStochastic Gradient Descent (SGD) ، Adam ،Adadelta  و غیره تاکنون پیشنهاد شده است.  SGD را به طور مثال در نظر بگیرید.

Stochastic Gradient Desce

هر مرحله که وزن‌ها بهینه می‌شوند ، به عنوان یک تکرار شناخته می‌شوند. تعداد تکرارها را می‌توان با محاسبه تقسیم تعداد همه نمونه‌های بر تعداد دسته‌ها (batch size) بدست آورد.

batch size

به عنوان مثال، اگر داده‌های آموزشی شامل ۱۰۰۰ نمونه آموزش و اندازه دسته‌ای ۱۰۰ نمونه آموزشی باشد، در مجموع ۱۰ تکرار پردازش می‌شوند. پس از تکمیل تمام ۱۰ تکرار، گفته می‌شود که یک دوره (epoch) کامل شده است (این بدان معنی است که تمام نمونه‌های آموزش یک بار آموزش داده می شوند). کل روش آموزش تا همگرایی به پایان می‌رسد و روش اصلی یک مدل یادگیری عمیق به پایان می‌رسد. ( لازم به ذکر است که هر لایه شامل یک تابع فعال سازی، حتی لایه خروجی است.)

پیشنهاد می‌شود ۲۰ واسط کاربری مهم در یادگیری ماشین و یادگیری عمیق که باید بدانید!  را بخوانید.

شبکه‌های عصبی Convolutional

ایده یک مدل شبکه‌های عصبی (Convolutional (CNNs در مرحله اول برای شناسایی خودکار یک تصویر مورد استفاده قرار گرفت. یک تصویر را می‌توان به یک ماتریس تبدیل کرد. سپس یک عمل جمع با جمع وزن هر سلول در اندازه یک پنجره پردازش می‌شود. این اندازه پنجره از دو جهت (از چپ به راست  و از بالا و پایین) اسکن می‌شود.

شبکه‌های عصبی Convolutional

شبکه‌های عصبی Convolutional

شبکه‌های عصبی Convolutional

پس از پردازش یک عملگر کانولوشنی و عملکرد فعال سازی به هر اندازه فیلتر، هر اندازه فیلتر سپس یک نقشه ویژگی تولید می کند. در شکل بالا K2 تا K5 هر نقشه از ویژگی‌های تولید شده از فیلتر  ۲ تا ۵ را نشان می‌دهد. این نقشه‌های ویژگی همچنین به عنوان لایه‌های حلقوی شناخته می‌شوند.

در مرحله بعد، یکی از روش‌های جمع کردن (به عنوان مثال max pooling، که درک آن ساده است و به راحتی پردازش می‌شود) برای این نقشه‌های ویژگی اعمال می‌شود. حداکثر جمع کردن، حداکثر مقدار از هر نقشه از ویژگی‌ها و تولید یک لایه pooling است. با توجه به سادگی این روش، تاکنون کاربرد گسترده‌ای داشته است.

max pooling

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

      • زمان محاسبات بالا
      • Overfitting (به این معنی که داده‌های آموزش بسیار خوب برازش دیده‌اند و قادر نخواهند بود نمونه‌های خارج از داده‌های آموزش را به طور دقیق پیش بینی کنید.)

به منظور جلوگیری از موارد ذکر شده در بالا، از روش حذف استفاده می‌شود. مقدار ترکیبی از ۰ تا ۱ تعیین می‌شود. اگر ترکیبی = ۰.۵ باشد و برای هر لایه اعمال شود، نتایج به شرح زیر خواهد بود: (اقتباس از کورسرا).

جلوگیری از overfitting

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

یک softmax function را می‌توان به عنوان یک نسخه “نرم” از max function مشاهده کرد. به عنوان مثال، با توجه به یک بردار از ۳ کلاس [a، b، c]، اگر پیش‌بینی می‌شود که یک نمونه بالاترین احتمال کلاس  به عنوان خروجی را داشته باشد، از طریق یک max function، نمونه با عنوان a مشخص می‌شود. این مدل تمایل دارد فقط یک کلاس را به نتیجه پیش‌بینی شده اختصاص دهد.

کد نویسی

برای واضح تر شدن توضیحات بالا بهترین گزینه مشاهده یک نمونه کد از پیاده سازی یک شبکه عصبی CNN به کمک کتابخانه  numpy است. این کتابخانه، برای انجام اعمال ماتریسی در پایتون پیاده سازی شده است. البته امروزه کتابخانه هایی مانند tensorflow و theano ساختارهای پایه‌ای شبکه‌های عصبی را به صورت آماده برای استفاده ایجاد کرده‌اند و کد پیوست شده تنها نمونه پیاده سازی پایه‌ای‌ترین ساختارهای یک شبکه عصبی CNN است. شما به کمک این کد میتوانید اعمال forward and backward propagation و پیاده سازی ساختار یک لایه CNN را مشاهده کنید .

برای مشاهده کد بر روی اینجا کلیک کنید.

 

برگرفته از medium

 

۴.۲ ۶ votes
امتیاز مطلب
Share on facebook
Share on whatsapp
Share on twitter
Share on pinterest
Share on linkedin
Share on telegram
Share on email
guest
0 دیدگاه
Inline Feedbacks
دیدن همه نظرات

مطالب مرتبط

تمامی حقوق مادی و معنوی این سایت متعلق به پیشرانا می‌باشد.