شبکه عصبی (Neural Network) چیست؟

پیش نیاز این درس:

بهتر است ابتدا طبقه بندی و خوشه بندی را مطالعه ای داشته باشید. یا دوره آشنایی با داده کاوی را نگاهی انداخته باشید.

مدرس: مسعود کاویانی

مغزِ انسان و بسیاری از موجودات زنده در خود تعداد بسیار زیادی از نورون‌ها (neurons) را جای داده است تا اطلاعاتِ مختلف را پردازش کرده و جهانِ اطراف را بشناسد. به صورت ساده، نورون‌ها در مغزِ انسان اطلاعات را از نورون‌های دیگر به وسیله‌ی دندریت (dendrite) می‌گیرند. این نورون‌ها اطلاعاتِ ورودی را با هم تجمیع کرده و اگر از یک حدِ آستانه‌ای فراتر رود به اصلاح فعال (fire) می‌شود و این سیگنالِ فعالْ شده از طریق آکسون‌ها (axons) به نرون‌های دیگر متصل می‌شود. این فرآیند، باعث یادگیریِ ما انسان‌ها شده است و برای مثال یک انسان می‌تواند تفاوت یک عدد سیب و یک تکه سنگ را با همین مکانیزم بفهمد. در واقع ما انسان‌ها از بدو تولد با مشاهده‌ی تعداد زیادی سیب و تعداد زیادی سنگ، تفاوت سیب و سنگ را درک کرده‌ایم، ولی یک بچه‌ی کوچک که هنوز تعداد زیادی سیب و سنگ مشاهده نکرده، احتمالاً نمی‌تواند بین این دو عنصر تفاوتی قائل شود.

البته که این توضیح در علم پزشکی مفید است ولی در علومِ کامپیوتر و هوش‌مصنوعی ما از این مکانیزمِ نورون‌های مغز برای ساخت الگوریتمی به نام شبکه‌ی‌ عصبیِ مصنوعی (artificial neural network) بهره می‌گیریم. شبکه‌های عصبیِ مصنوعی که در علوم کامپیوتر به شبکه‌های عصبی نیز معروف هستند، می‌توانند مانند یک الگوریتمِ یادگیری ماشین عمل کرده و با مشاهده‌ی نمونه‌های مختلف با برچسب‌های متفاوت، تفکیک و تمایزِ آن‌ها را یادگرفته و بر روی نمونه‌های جدید پیش‌بینی یا برچسب‌گذاری را انجام دهند.

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

اجازه بدهید در این درس به سراغ یک مدل کلی و ساده‌ی شبکه‌ی عصبی برویم. فرض کنید می‌خواهیم با استفاده از شبکه‌های عصبی یک الگوریتم طبقه‌بندی بسازیم. فرض کنید مجموعه‌ی داده‌ها مانند مثال درسِ «طبقه‌بندی چیست» باشد. یعنی مدیریت بانک، مجموعه‌ی داده‌هایی از مشتریان قبلی بانک و اینکه آیا توانسته‌اند وام را پس دهند یا خیر، جمع‌آوری کرده است و می‌خواهد این داده‌ها را به الگوریتم یادگیری ماشین شاخه‌ی طبقه‌بندی تزریق کرده تا این الگوریتم بعد از یادگیری، بتواند احتمال بازگرداندنِ وام برای مشتریان جدید که برچسب آن‌ها نامشخص است، را پیش‌بینی کند. بخشی از مجموعه‌ی داده آموزشی (training set) برای تزریق به الگوریتم، شبیه به شکل زیر است:

در شکل بالا که یک داده‌ی مستطیلی یا همان ماتریس است، هر سطر یک مشتری بانک را نمایش می‌دهد. هر مشتری چهار ویژگی دارد (۱. خانه دارد یا خیر، ۲. تعداد فرزندان، ۳. اتومبیل دارد یا خیر، ۴. حقوق دریافتی) که به آن‌ها متغیرهای مستقل می‌گوییم. در ستون آخر یا همان متغیر وابسته، مشخص شده است که این مشتری آیا وام را پس داده است یا خیر؟ این داده‌ها، مجموعه داده‌های آموزشی است که بایستی به الگوریتمی مانند الگوریتم شبکه‌ی عصبی تزریق شود. در واقع برای هر مشتری چهار متغیر مستقل وجود دارد و ستون آخر (متغیر وابسته) ستون برچسب (label) یا هدف (target) است که مدیر بانک می‌خواهد الگوریتم بتواند با مشاهده‌ی مجموعه‌ی داده‌ی آموزشی، یادگیری را انجام داده و سپس برای یک مشتریان جدید، مقدار هدف یا همان برچسب را پیش‌بینی کند. یعنی الگوریتم بعد از فرآیند یادگیری، می‌تواند تشخیص دهد که یک مشتری جدید که برچسب آن نامشخص است آیا می‌تواند وام خود را پس دهد یا خیر؟

حال به تصویر زیر که یک معماری از شبکه‌ی عصبی ساده است نگاهی بیندازید:

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

اول Xها هستند. اینها همان ورودی‌های ما (نورون های ورودی) هستند که از مجموعه‌ی داده‌ها استفاده می‌کنند. در واقع ورودیِ الگوریتم همین‌ها Xها هستند که در شکل از x1  تا xn وجود دارند. تعداد ورودی به تعداد ویژگی یا همان متغیرهای مستقل در مسئله مربوط است. برای مثال در مجموعه‌ی داده‌ی مشتریان بانک، چون ۴ ویژگی داشتیم، تعداد ورودی‌ها (xها) نیز باید برابر ۴ باشد (x1, x2, x3, x4).

عناصرِ دوم وزن‌ها (w) هستند. در شبکه‌های عصبی هر کدام از نورون‌ها که در اینجا xها هستند، یک وزن دارند که با w نمایش می‌دهیم. همان‌طور که مشاهده می‌کنید هر کدام از نورون‌ها به یک وزن متصل شده است. در واقع هر نورون بایستی در وزنِ خود ضرب شود. مثل x1 که یک وزن به اسم w1 دارد و باید در آن ضرب شود و به همین ترتیب تا آخر.

عنصرِ سوم در شبکه‌ی عصبی تابع جمع (سیگما) است. که حاصلِ ضربِ xها در wها را با هم جمع می‌کند.

عنصر چهارم یک تابع فعال‌سازی است که فعلاً به صورت خلاصه فرض کنید تابعی است که یک عدد را دریافت کرده و آن را در صورت مثبت بودن به ۱+ و در صورت منفی بودن به ۱- تبدیل می‌کند. مثلاً اگر عدد ۱۳۲ به این تابع بدهیم، عدد ۱+ را در خروجی برمی‌گرداند. توابع فعال‌سازی مختلفی در شبکه‌های عصبی موجود است که در دروس آینده به آن‌ها خواهیم پرداخت.

عنصرِ پنجم و آخر نیز خروجیِ شبکه‌ی عصبی است که در واقع نتیجه‌ی این شبکه را مشخص می‌کند.

اجازه بدهید شکلِ بالا را با کمک اعداد توضیح دهیم. فرض کنید که xهای شما در یک بردار به صورت زیر موجود هستند:

[۸, ۶, ۲, ۱]

یعنی x1 برابر ۸، x2 برابر ۶، x3 برابر ۲ و بلاخره x4 برابر ۱ است. این‌ها می‌توانند برای مثال، چهار ویژگی از یک مشتری بانک باشند. مثلاً x1 این است که خانه دارد یا خیر که اینجا برابر ۸ است، x2 تعداد فرزندان که برابر ۶ است و x3 اتومبیل دارد یا خیر (مثلا اینجا ۲ اتومبیل دارد) و x4 حقوق دریافتیست که در اینجا برابر ۱ است. پس در واقع این بردار (vector) که چهار عضو دارد نشان دهنده‌ی یک مشتری است. فرض کنید این مشتری توانسته است وام خود را بازگرداند. الگوریتم شبکه‌ی عصبی با مشاهده‌ی این مشتری و هزاران مشتری قبلیِ دیگر و برچسب آن‌ها، باید بتواند وزن‌ها (Wها) را طوری آپدیت کند تا به طور دقیق از روی ویژگی‌های یک مشتری، بتواند ستون هدف یا برچسب را پیش‌بینی کند (یعنی اینکه آیا این مشتری می‌تواند وام را پس دهد یا خیر؟). از آن‌جایی که شبکه عصبی مانند بسیاری از الگوریتم‌های یادگیری ماشین نیاز به اعداد برای یادگیری دارد، برای ستونِ آخر یعنی ستون برچسب یا همان متغیر وابسته، مثلاً اگر شخص توانسته بود وام را پس دهد، عدد ۵۰+ و اگر نتوانسته بود وام را پس دهد عدد ۵۰- را به الگوریتم می‌دهیم. در واقع به شبکه‌ی عصبی می‌گوییم که هر وقت یک سری ویژگیِ خاص یا نزدیک به آن را دید، عددی نزدیک به ۵۰+ یا ۵۰- را در خروجی به ما بدهد.

فرض کنید الگوریتم شبکه‌ی عصبی با روش مخصوص به خود که در دروس آینده به آن می‌پردازیم، با مشاهده‌ی مشتریِ بالا و بقیه‌ی مشتریان وزن‌ها را هم به این صورت آپدیت کند:

[۱, ۴, ۳, ۴]

یعنی w1 برابر ۱، w2 برابر ۴، w3 برابر ۳ و بلاخره w4 برابر ۴ می‌شود. همان‌طور که گفتیم اعدادِ موجود در مجموعه‌ی xها (نورون‌ها) به صورتِ نظیر به نظیر در wها ضرب می‌شوند و سپس حاصلِ جمع آن‌ها محاسبه شده به تابع فعال‌سازی داده می‌شود:

 8*1 + 6*4 + 2*3 + 1*4 = 42

تصویر زیر نیز گویای همین ماجراست:

همان‌طور که مشخص است، تصویر بالا مثالی از شکل کلیِ تصویر قبلی بود. ورودی‌ها (xها) که در واقع همان نورون‌ها هستند در وزن‌ها (wها) به صورت نظیر به نظیر ضرب شده و نتیجه‌ی آن‌ها با یکدیگر جمع می‌شود. در اینجا فرض می‌کنیم که تابعِ فعال‌سازی به این صورت عمل می‌کند که اگر عدد بزرگتر از ۱۰ شده بود، آن را تبدیل به ۵۰+ کرده و اگر عدد کوچکتر یا مساوی ۱۰ شده بود، عدد را تبدیل به ۵۰- می‌کند. پس در واقع در مثالِ تصویر بالا، خروجیِ شبکه‌ی عصبی برابر ۵۰+ می‌شود. در اینجا فرض کنید که اگر عدد خروجی ۵۰+، منظور شبکه‌ی عصبی این بوده است که این شخص می‌تواند وام را پس دهد و اگر ۵۰- شد، یعنی شبکه به ما گفته که این شخص نمی‌تواند وام را پس دهد.

در واقع شبکه‌ی عصبی با اعدادی که برمی‌گرداند، با ما صحبت می‌کند، چون این اعداد را در هنگام آموزش برای آپدیتِ وزن‌ها به او داده‌ایم. مثلاً در همین مثال این شبکه با مشاهده‌ی نمونه‌های مختلف که مشتریانِ قبلیِ بانک هستند و کم و زیاد کردن وزن‌ها (wها) یاد می‌گیرد که اگر به نظرش شخص می‌تواند وام را پس دهد، عددی بالاتر از ۱۰ (که با تابع فعال‌سازی به ۵۰+ تبدیل شود) برگرداند و اگر حس کند که شخص نمی‌تواند وام را پس دهد، عددی کوچکتر یا مساوی ۱۰ را تولید کند (تا با تابع فعال‌سازی به ۵۰- تبدیل شود).

تا اینجای کار با شِمایِ کلیِ شبکه‌های عصبی آشنا شدید. شبکه‌های عصبی می‌تواند چند لایه نورون داشته باشند. شبکه‌ی گفته شده در مثال بالا فقط یک لایه نورون داشت. در دروس آینده به شبکه‌هایی با چندین لایه نورون اشاره خواهیم کرد.

همچنین برای درک بهتر شبکه‌های عصبی در آدرس nnplayground.chistio.ir یک محیط آزمایشی ساده و کاربردی ساخته شده است که می‌توانید از آن برای طراحی شبکه‌های عصبی و اجرای آن در مرورگر خود استفاده کنید.

منابع این بحث و اطلاعات بیشتر

» وب سایت Medium

» تصویر سیب سنگی

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

33 دیدگاه دربارهٔ «شبکه عصبی (Neural Network) چیست؟»

  1. سلام ممنون برای مطالب خوبتون و ممنون برای اینکه مطالبتون به من در ارائه پایان نامه ام کمک بزرگی کرد . موفق باشید .

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

  3. باتشکر از زحمات بی چشمداشت
    خیلی ساده و روان مختصر مفید توضیح داده شده مطالب.

    امروز صبح وقتی وارد سایت نشد گفتم نکنه کلا سایت از دسترس خارج بشه 🙁

    سپاس بیکران ازتلاشتون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *