شبکه عصبی و مبانی یادگیری عمیق (deep learning)

در حوزه یادگیری داده‌ها یکی از چالش‌های مطرح استخراج ویژگی‌های موردنیاز برای مسئله است. در یادگیری ماشین بایستی تمام ویژگی‌ها را به‌عنوان ورودی به مسئله بدهیم، اما برخلاف آن یادگیری عمیق (Deep Learning) و شبکه عصبی (Neural Network)، این ویژگی‌ها را خودشان استخراج و با یکدیگر ترکیب می‌کنند.

بیایید مفاهیم را گام‌به‌گام از ابتدا تشریح کنیم و ببینیم شبکه عصبی چگونه می‌تواند در یادگیری عمیق ما را یاری کند:

تعریف شبکه عصبی:

سیستم عصبی از نورون تشکیل‌شده است، که اجزای اصلی آن عبارت‌اند از:

Dendrites: از ورودی‌های دیگر به صورت الکتریکی ورودی می‌گیرد.

Cell Body: با استنتاج از ورودی‌ها تصمیم می‌گیرد چه‌کاری را انجام دهد.

Axon terminals: خروجی‌ها را به صورت ولتاژ الکتریکی منتقل می‌کند.

درواقع هر نورون از سلول‌های عصبی دیگر از طریق Dendrites ورودی می‌گیرد. سپس پردازش موردنیاز را با Cell Body روی ورودی انجام داده و Axon terminals ولتاژ الکتریکی نهایی را از طریق گره‌های پایانی به سلول‌های عصبی دیگر ارسال می‌کند. حال بیایید این تعاریف را روی کاربرد شبکه عصبی در یادگیری داده‌ها بیان کنیم:

شبکه عصبی 3 نوع لایه دارد:

لایه ورودی: مشاهدات آموزشی از طریق این نورون‌ها تغذیه می‌شوند.

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

لایه خروجی: خروجی نهایی از دو لایه قبلی استخراج می‌شود.

 

 

عملکرد شبکه عصبی:

 

عملکرد یک نورون در شبکه عصبی

شبکه عصبی دارای ورودی‌های x1, x2, …, xn است. w0, w1, w2, …, wn وزن‌های مسئله است که میزان اهمیت هر یک از ویژگی‌ها را مشخص می‌کند. مثلاً اگر متغیر x3 دارای اهمیت بیشتری باشد، آنگاه وزن نظیر آن یعنی w3 نیز نسبت به سایر مقادیر دارای مقدار بیشتری است. در ابتدای مسئله مقادیر وزن‌ها به طور تصادفی انتخاب می‌شود. حال اگر همه وزن‌ها صفر باشد، چون وزن‌ها در متغیرهای نظیرشان ضرب می‌شود، بایستی مقداری باشد که از صفر شدن کل معادله جلوگیری کند، که آن مقدار x0، بایاس است. بایاس یک مقدار ثابت است که به ورودی تابع فعال‌سازی اضافه می‌شود. و مقدار آن معمولاً +1 است.

معادله محاسبه:

به ازای هر نورون مقدار a محاسبه می‌شود.

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

 

 

تابع فعال سازی:

در اینجا f یک تابع فعال‌سازی شناخته‌شده است. این باعث می‌شود یک شبکه عصبی بسیار انعطاف‌پذیر باشد و توانایی تخمین روابط پیچیده غیرخطی در داده‌ها را فراهم آورد. در تصویر زیر چند نمونه از توابع فعال‌سازی را می‌بینیم.

نمودار انواع نوابع فعال‌ساز

انتخاب تابع فعال‌سازی بستگی به خروجی دارد که ما می‌خواهیم.

مثال تابع فعال سازی:

مثالی از طبقه بندی دو کلاسی با استفاده از تابع فعال‌سازی sigmoid

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

شبکه عصبی چندلایه:

یک شبکه عصبی می‌تواند روابط پیچیده را با استفاده از چندین لایه مدل کند. برای این کار از چندین لایه میانی استفاده می‌کند.

استخراج ویژگی های مختلف تصویر با استفاده از شبکه عصبی

به‌طور مثال در تصویر بالا برای تشخیص چهره از 3 لایه میانی استفاده می‌کند. در لایه اول لبه‌ها را تشخیص می‌دهد. لایه دوم با کنار هم قرار دادن لبه‌ها ،قسمت‌های مختلف چهره (بینی، چشم، لب، ابرو) را تشخیص می‌دهد. لایه سوم با کنار هم قرار دادن اجزای مختلف چهره تصویر کامل چهره را ایجاد می‌کند.

ساختار کلی شبکه عصبی:

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

ساختار کلی شبکه عصبی

 

N =تعداد ورودی شبکه عصبی

L=شماره لایه

ساختار ورودی: 

ورودی یک شبکه عصبی یک بردار با ابعاد (Ni+1,1)است. که درایه‌های آن مقادیر ورودی مسئله هستند.

Ai = [ ai(0), ai(1), ……, ai(N)i]

Dimension: 1 x Ni+1

ساختار وزن‌ها:

یک ماتریس با ابعاد (Ni+1 , Ni+1) برای ساختار وزن‌ها استفاده می‌شود. مقادیر وزن‌ها در ابتدای مسئله به‌صورت تصادفی مقداردهی می‌شود.

W(i) = [ [ W01(i)    W11(i)  …….   WNi1(i) ]

          [ W02(i)    W12(i)  …….   WNi2(i) ]

            …

            …

           [ W0Ni+1(i)  W1Ni+1(i)  ……. WNiNi+1(i) ] ]

Dimension: Ni+1 x Ni+1

ساختار خروجی:

خروجی یک بردار با ابعاد (Ni+1,1) است. که در آن F تابع فعال‌سازی است. مقدار خروجی از حاصل‌ضرب دو مقدار بالا و اعمال تابع فعال‌سازی به‌دست می‌آید.

Ai+1 = f( Ai.W(i) )

Dimension: 1 x Ni+1

Back-Propagation:

پس‌ازاینکه یک بار Forward Propagation انجام شد خروجی نهایی (Ŷ) می‌باشد. حال میزان خطا را به ازای خروجی به‌دست می‌آوریم: \(A=(\hat{y}-y)\)

 

حال با توجه به این خطا روندی را که آمدیم برمی‌گردیم و مقدار جدیدی برای ورودی به‌دست می‌آوریم تا مجدداً با آن Forward Propagation انجام شود. تا جایی این روند ادامه می‌یابد که خطای خروجی قابل‌قبول باشد. (روند محاسبه مقادیر جدید با مشتق‌گیری است.)

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

2 نظرات
  1. نسرین جمشیدی می گوید

    باز هم یه پست عالی.
    سپاس

    1. فائزه غلامرضایی می گوید

      سپاس

ارسال یک پاسخ

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