در مقاله قبل تفاوت بایاس و واریانس بررسی شد. در این قسمت، شبکههای عصبی مصنوعی به زبان ساده توضیح می دهیم. شبکه عصبی دریچه ورود به دنیای یادگیری عمیق است. توضیحات اولیه شبکه عصبی، سه لایه کلی شبکه عصبی و شبکه عصبی پرسپترون را توضیح میدهیم. پرسپترون، سادهترین شکل یک شبکه عصبی روبهجلو است که جزییات آن را بررسی میکنیم.
. . . .
شبکه عصبی به زبان ساده
شبکههای عصبی مصنوعی، یا شبکههای عصبی، یک تکنیک شناخته شده یادگیری ماشین برای پردازش داده از طریق لایههای تحلیلی است. علت نامگذاری شبکههای عصبی مصنوعی، شباهت این الگوریتم به مغز انسان است. در شکل زیر آناتومی (Anatomy) یک نورون (Neuron) از مغز انسان مشاهده میشود.
مغز انسان شامل نورونهای بههمپیوسته با دندریتهایی (Dendrites) است که ورودیها را دریافت میکنند. نورون، از این ورودیها، یک سیگنال الکتریکی تولید کرده و از طریق آکسون (Axon) به خروجی میدهد و سپس این سیگنالها را بهوسیله ترمینالهای آکسونی بین دیگر نورونها منتشر میکند.
اجزا شبکه عصبی
مشابه نورونها در مغز انسان، شبکههای عصبی مصنوعی از نورونهای بههمپیوسته تشکیل شده است که به آنها گره (Node) نیز گفته میشود. این گرهها از طریق آکسونهایی که به آنها یال (Edge) میگویند با هم در ارتباط هستند. در یک شبکه عصبی، گرهها در کنار هم قرار میگیرند و لایهها را تشکیل میدهند. لایه اول شامل داده خام مثل مقادیر عددی، متن، تصاویر و صوت هستند که بین گرهها تقسیم شدهاند. سپس هر گره، اطلاعات را از طریق یالهای شبکه، به لایه بعدی ارسال میکند.
شکل بالا گرهها، یالها/وزنها و تابع جمع/فعالسازی در یک شبکه عصبی ساده را نشان میدهد. هر یال، یک وزن عددی دارد که بر اساس تجربه، قابل تغییر یا فرمولسازی است. اگر مجموع یالهای متصلبههم، شرط یک آستانه (Threshold) را برطرف کنند، یک نورون در لایه بعدی فعال میشود. این حد آستانه توسط تابع فعالساز (Activation Function) تعیین میشود. بااینحال، اگر مجموع یالهای متصل، شرط آستانه را برطرف نکنند، فعالسازی انجام نمیشود که انگار هیچ اتفاقی نیفتاده است.
همچنین توجه کنید، برای اطمینان از فعالشدن متفاوت گرهها، هر یال وزن منحصربهفرد دارد (همانطور که در شکل زیر دیده میشود) پس خروجی گرهها کاملاً یکسان نمیشود.
برای آموزش شبکه از طریق یادگیری نظارتی، خروجی پیشبینی شده توسط مدل با خروجی واقعی (که میدانیم صحیح است) مقایسه میشود و میزان اختلاف بین این دو اندازهگیری میشود و بهعنوان هزینه (Cost) یا مقدار هزینه (Cost Value) شناخته میشود. هدف از مرحله آموزش، کاهش مقدار هزینه تا جایی است که پیشبینی مدل تا حد زیادی به خروجی صحیح، شبیه بشود. این هدف با تغییر افزایشی وزنهای شبکه تا جایی که کمترین مقدار هزینه ممکن به دست بیاید، انجام میشود. این فرایند آموزش شبکه عصبی، انتشار به عقب (Back-Propagation) نامیده میشود. بهجای حرکت از راست به چپ (به صورتی که داده به شبکه عصبی وارد میشود)، انتشار به عقب برعکس انجام میشود و از لایه خروجی از راست به سمت لایه ورودی به سمت چپ حرکت میکند.
جعبه سیاه بودن شبکه عصبی یعنی چه؟
یک نکته منفی شبکههای عصبی، این است که مثل یک جعبهسیاه (Black-Box) (ساختاری که اطلاعی از داخل آن نداریم و فقط ورودی و خروجی آن را میبینیم) عمل میکنند، چون وقتی شبکه، خروجیهای صحیحی را پیشبینی میکند، دنبالکردن ساختار آن، مقدار محدود و یا هیچدانشی از متغیرهایی که خروجی را تحتتأثیر قرار میدهند، نشان نمیدهد. برای مثال، در هنگام استفاده از یک شبکه عصبی برای پیشبینی خروجی پویش (Campaign) Kickstarter (بزرگترین بنیاد جهانی پروژههای خلاق)، شبکه، تعدادی از متغیرها از جمله نوع پویش، واحد پول، آخرین فرصت (Deadline) و حداقل میزان بیعانه را تحلیل میکند، ولی نمیتواند ارتباط آنها با خروجی نهایی را مشخص کند. همچنین، امکان دارد دو شبکه عصبی با توپولوژی (Topology) مختلف و وزنهای مختلف، یک خروجی را تولید کنند که حتی بررسی رابطه بین متغیرها و خروجی را سختتر میکند. البته مدلهای با ساختار غیر جعبهسیاه مثل رگرسیون و درخت تصمیم هم وجود دارد.
پس چه زمانی باید از شبکه عصبی جعبهسیاه استفاده کنیم؟ معمولاً، شبکههای عصبی برای حل مسائلی با الگوهای پیچیده، بهخصوص آنهایی که حل آنها برای کامپیوترها سخت ولی برای انسانها ساده و تقریباً بدیهی باشد، بهتر هستند. یک مثال بدیهی آن CAPTCHA (آزمون کاملا خودکار تورینگ عمومی برای تشخیص کامپیوترها و انسان ها از یکدیگر) است که در وبسایتها برای تشخیص اینکه یک کاربر آنلاین یک انسان واقعی است، استفاده میشود. در سطح اینترنت، تعداد زیادی مقاله آموزشی وجود دارد که نحوه استفاده از شبکههای عصبی برای دورزدن CAPTCHA را نشان میدهد.
مثال دیگر آن تشخیص این است که آیا یک عابر در مسیر یک خودروی در حرکت، قدم میگذارد یا نه، همانطور که در خودروهای خودران برای جلوگیری از وقوع یک تصادف مورد استفاده قرار میگیرد.
دوره آموزشی: برای ورود به دنیای پروژههای یادگیری ماشین، دوره آموزش یادگیری ماشین به زبان ساده با پایتون را در کانال یوتیوب دیتاهاب ببینید.
انواع سلول ها و لایه ها در شبکه های عصبی
یک شبکه عصبی رایج به سهلایهی ورودی، مخفی (Hidden) و خروجی تقسیم میشود. داده در ابتدا از لایه ورودی دریافت میشود، جایی که ویژگیهای گستردهای شناسایی میشوند. پس از آن، لایههای مخفی داده را تحلیل و پردازش میکنند. بر اساس محاسبات قبلی، داده با عبور از هر لایه مخفی سادهتر میشود. نتیجه نهایی در لایه خروجی نشان داده میشود.
لایههای میانی بهاینعلت لایههای مخفی در نظر گرفته میشوند که مثل بینایی انسان (Human Vision)، مخفیانه اشیا را بین لایههای ورودی و خروجی تجزیهوتحلیل میکنند. برای مثال، زمانی که انسانها چهار خط متصلبههم به شکل یک مربع را میبیند، بهسرعت آن چهار خط را بهعنوان یک مربع میشناسند. چهار خط را بهعنوان چهار خط مستقل و بدون ارتباط با یکدیگر نمیبینیم. مغز تنها متوجه لایه خروجی میشود. شبکههای عصبی تقریباً شبیه به این فرایند عمل میکنند، بهطوریکه داده را در لایههای مختلف تشریح و باز میکنند و با دستکاری لایههای مخفی تلاش میکنند تا خروجی نهایی را تولید کنند.
درحالیکه تکنیکهای زیادی برای ترکیب گرههای یک شبکه عصبی وجود دارد، سادهترین شکل آن شبکه روبهجلو (Feed-Forward) است. در یک شبکه روبهجلو، سیگنالها تنها در یکجهت در جریان هستند و هیچ حلقهای در شبکه نیست.
پرسپترون (Perceptron)
سادهترین شکل یک شبکه عصبی روبهجلو، پرسپترون (Perceptron) است که در شکل زیر مشاهده میکنید.
یک پرسپترون از یک یا چند ورودی، یک پردازنده (Processor) و یک خروجی تشکیل شده است. در یک مدل پرسپترون ورودیها:
- به پردازنده وارد میشوند (نورون).
- پردازش میشوند.
- خروجی ساخته میشود.
بهعنوان یک مثال، فرض کنید یک پرسپترون داریم با دو ورودی:
ورودی اول: 3x = 24
ورودی دوم: 2x = 16
سپس به این دو ورودی، یک وزن تصادفی اضافه میکنیم و برای پردازش، به داخل نورون فرستاده میشوند (شکل زیر).
وزنها:
ورودی 1: 0.5
ورودی 2: 1.0-
سپس هر وزن را در ورودی آن ضرب میکنیم:
ورودی 1: 0.5 * 24 = 12
ورودی 2: 1- * 16 = 16-
عبور مجموع وزن یالها از تابع فعالسازی، خروجی پرسپترون را تولید میکند.
ویژگی کلیدی پرسپترون این است که تنها دو خروجی “1” و “0” را دارد. مقدار “1” تابع فعالسازی را فعال میکند و مقدار “0” آن را غیرفعال میکند. با این که پرسپترون ذاتاً دودویی است، راههای زیادی برای تنظیم تابع فعالسازی وجود دارد. در این مثال، تابع فعالسازی را بزرگتر مساوی صفر قرار دادیم (> =0). یعنی اگر مجموع وزن یالها، یک عدد مثبت یا صفر باشد خروجی 1 است. اگر مجموع یک عدد منفی باشد، خروجی 0 است.
همانطور که در شکل زیر مشخص شده است، در تابع فعالسازی، وقتی x منفی باشد خروجی (y) صفر میشود و زمانی که x مثبت باشد خروجی (y) یک میشود.
در نتیجه:
ورودی 1: 0.5 * 24 = 12
ورودی 2: 1- * 16 = 16-
مجموع (Ʃ): 12 + -16 = -4
بهعنوان یک مقدار عددی کمتر از صفر، نتیجه نهایی “0” صفر میشود و در نتیجه تابع فعالسازی، فعال نمیشود.
بااینحال، میتوانیم آستانه تابع فعالسازی را تغییر دهیم، مثل:
x > 3, y = 1
x <= 3, y = 0
وقتی x کوچکتر یا مساوی 3 باشد، خروجی تابع فعالسازی 0 میشود و زمانی که x بزرگتر از 3 باشد خروجی 1 میشود (شکل زیر).
زمانی که با مدل بزرگتری از شبکه عصبی کار میکنیم (تعداد لایههای زیادی داشته باشد)، مقدار “1” طوری تنظیم میشود تا مقدار خروجی را به لایه بعدی بفرستد. برعکس، مقدار “0” طوری تنظیم میشود که خروجی در نظر گرفته نشود و برای پردازش به لایه بعدی ارسال نشود.
دوره آموزشی: از بقیه شنیدید برای یادگیری هوش مصنوعی باید ریاضیات بلد باشید و نگرانید که ریاضی را فراموش کردید؟ آموزش سریع جبر خطی را در کانال یوتیوب دیتاهاب ببینید تا خیالتان راحت شود.
آموزش داده
در یادگیری بانظارت، پرسپترونها برای آموزش داده و توسعه مدل پیشبینیکننده استفاده میشوند. مراحل آموزش داده به شرح زیر است:
- ورودیها به پردازنده وارد میشوند (نورونها/گرهها).
- پرسپترون مقدار ورودیها را تخمین میزند.
- پرسپترون خطای بین تخمین و مقدار واقعی را محاسبه میکند.
- پرسپترون وزنهایش را باتوجهبه خطا تنظیم میکند.
- تا وقتی که دقت مدل رضایتبخش نباشد، چهار مرحله قبلی را تکرار میکند. پس از آن میتوان مدل آموزشدادهشده را بر روی داده آزمایشی اعمال کرد.
نقطهضعف پرسپترون، خروجی دودویی است و همین نقطهضعف باعث قطبی شدن نتایج (Polarizing Result) در دو حالت زیر میشود:
- تغییرات کوچک در وزنها
- بایاس در هرکدام از پرسپترونها در یک شبکه عصبی بزرگتر
این ضعف، ممکن است باعث تغییرات ناگهانی در داخل شبکه و چرخش کامل خروجی نهایی بشود. در نتیجه، آموزش یک مدل بادقت بالا که بتوان آن را با موفقیت روی داده آزمایشی و دادههای ورودی آینده، اعمال کرد، بسیار سخت میشود.
. . . .
و در انتها…
در این مقاله شبکه عصبی مصنوعی به زبان ساده بررسی شد و لایه های شبکه عصبی توضیح داده شد. پس از آن به سراغ شبکه عصبی پرسپترون رفتیم و مراحل آموزش داده را بیان کردیم. همان طور که مشاهده شد، خروجی پرسپترون دودویی بود که نقطه ضعف آن است. بنابراین در مقاله یادگیری عمیق چیست نورون سیگموید را معرفی می کنیم که شباهت زیادی به پرسپترون دارد، اما انعطاف بیشتری دارد. پس از آن، شبکه عصبی عمیق را معرفی میکنیم.
دوره آموزشی: هنوز انجام پروژه یادگیری ماشین شروع نکردید، چون برنامهنویسی بلد نیستید؟ اصلا نگران نباشید. دوره آموزش رایگان پایتون را در کانال یوتیوب دیتاهاب ببینید.