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

بــه نــامــ خــدا

شبکه عصبی مصنوعی(Artificial neural network) یا به اختصار ANN چیست؟

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

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

تعریف دکتر هچ نیلسن(Robert Hecht-Nielsen) درباره ی شبکه های عصبی:

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

تعریف لیپینگ یانگ:

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


تعریف دقیق در درباره سازوکار شبکه های عصبی مصنوعی:

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

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

برای مثال:

مثلا شما میخواهید یک نودل درست کنید، در این حالت نورون ها خود نودل و ادویه ی آن هستند چون نقطه ی شروع فعالیت در شبکه عصبی هستند، و همینطور مقدار هر عنصر(نودل و ادویه) وزن هستند، وقتی دقت کنید،

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

تاریخچه شبکه عصبی مصنوعی

تاریخچه شبکه های عصبی احتمالاً در اواخر دهه 1800 با تلاش های علمی برای مطالعه فعالیت مغز انسان آغاز شد. در سال 1890، ویلیام جیمز اولین کار خود را در مورد الگوهای فعالیت مغز منتشر کرد. در سال 1943، مک کالوچ و پیتس مدلی از نورون را ایجاد کردند که امروزه هنوز در یک شبکه عصبی مصنوعی استفاده می شود.

همچنین در سال 1969(یا طبق این مطلب 1951)، ماروین مینسکی اولین شبکه عصبی مصنوعی (ANN) را در حین کار در دانشگاه پرینستون ساخت.

تاریخچه ی کامل یادگیری عمیق و شبکه عصبی از سال 1943 تا 2019
تاریخچه ی کامل یادگیری عمیق و شبکه عصبی از سال 1943 تا 2019



یک شبکه عصبی مصنوعی(ANN) چگونه کار میکند؟

یک شبکه عصبی مصنوعی(ANN) مشابه شبکه عصبی مغز انسان عمل می کند. یک نرون در یک شبکه عصبی مصنوعی(ANN) یک تابع ریاضی است که اطلاعات را بر اساس یک معماری خاص جمع آوری و طبقه بندی می کند. شبکه های عصبی مصنوعی(ANN) شبیه به روش های آماری مثل رگرسیون هستند.

شباهت بین سلول های عصبی مغز و شبکه عصبی مصنوعی
شباهت بین سلول های عصبی مغز و شبکه عصبی مصنوعی

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



انواع شبکه عصبی مصنوعی(ANN):

پرسپترون(Perceptron)

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

انواع پرسپترون(Perceptron):

  1. پرسپترون تک لایه، فقط می تواند الگوهای قابل جداسازی خطی را یاد بگیرد.
  2. پرسپترون های چند لایه(Multilayer perceptron) یا MLP، می توانند در مورد دو یا چند لایه که دارای قدرت پردازش بیشتری هستند یاد بگیرند.

مثالی از پرسپترون چند لایه(MLP) با استفاده از کتابخانه ی scikit-learn در پایتون:

در این مثال با استفاده از داده های آموزشی شبکه را آموزش میدهیم.

داده های آموزشی:

training_data_inputs = [[0,0],[1,1],[0,1],[1,0]]
training_data_labels = [0,2,1,1]

همینطور که مشاهده میکنید جمع هر لیست، برچسب آن در متغیر training_data_labels میشود.


تمام کد ها:

from sklearn.neural_network import MLPRegressor
training_data_inputs = [[0,0],[1,1],[0,1],[1,0]]
training_data_labels = [0,2,1,1]
rgs = MLPRegressor(solver='lbfgs', alpha=1e-05,hidden_layer_sizes=(8,2),random_state=1)
rgs.fit(training_data_inputs,training_data_labels)


تست شبکه با استفاده از داده تست:

rgs.predict([[1,0]])

خروجی:


شبکه های پیشخور(Feedforward) یا به اختصار FF

شبکه های پیشخور(feedforward) مدل یادگیری عمیقی هستند که در آن ها اطلاعات در جهت رو به جلو حرکت میکنند؛

به زبان قابل فهم تر، سیگنال در شبکه های پیشخور(FF) فقط در یک جهت از لایه ورودی، به لایه های پنهان و بعد به لایه خروجی حرکت می کند و داده های قبلی در حافظه ذخیره نمی شوند.

FF networks
FF networks



شبکه های عصبی کانولوشنال(Convolutional neural networks) یا CNN

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

نحوه ی کارکرد شبکه عصبی کانولوشنال(CNN)
نحوه ی کارکرد شبکه عصبی کانولوشنال(CNN)



شبکه های عصبی مکرر یا بازگشتی(Recurrent neural network) یا RNN

شبکه عصبی بازگشتی (RNN) نوعی شبکه عصبی است که در آن خروجی مرحله قبل به عنوان ورودی به مرحله فعلی تغذیه می شود. برای مثلا در شبکه های عصبی (تغذیه رو به جلو)feed forward همه ورودی‌ها و خروجی‌ها مستقل از یکدیگر هستند، اما مثلا در NLP(پردازش زبان طبیعی) یا در کپشین نویسی عکس ها زمانی که لازم است کلمه بعدی یک جمله پیش‌بینی شود، کلمات قبلی مورد نیاز است و به خاطر همین، نیاز به یادآوری کلمات قبلی است.

تفاوت شبکه های عصبی پیشخور یا تغذیه رو به جلو با شبکه های عصبی مکرر:

انواع شبکه های عصبی مکرر:

شبکه عصبی مکرر از نوع یک به یک یا one-to-one :

از این نوع RNN ها برای حل مسائلی که کلا یه ورودی و یک خروجی دارند استفاده میشوند، برای مثال برای طبقه بندی عکس ها استفاده میشوند که فقط یک ورودی(خود عکس) و یک خروجی(نوع عکس) استفاده میشوند.

one to one
one to one


شبکه عصبی مکرر از نوع یک به چند یا one-to-many :

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

one to many
one to many

شبکه عصبی مکرر از نوع چند به یک یا many-to-one :

در این شبکه ها برنامه باید با چند ورودی که دریافت میکند یک خروجی واحد را بدهد

many to one
many to one

شبکه های عصبی مکرر از نوع چند به چند:

در این نوع از شبکه های عصبی مکرر سیستم باید با دنباله ای از ورودی هایی که میگیرد، دنباله ای از خروجی ها تولید کند، برای مثال در چت بات ها سیستم، دنباله ای از کلمات(جمله) را میگیرد و باید دنباله از کلمه ها(همون جمله ی پاسخ) را تولید کند

many to many
many to many
  • نظریه:

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



شبکه های عصبی LSTM یا Long Short Term Memory :

شبکه‌های عصبی LSTM با افزودن یک سلول حافظه ویژه که می‌تواند اطلاعات را برای مدت طولانی ذخیره کند، مشکل ناپدید شدن گرادیان در RNN را حل می‌کند.

تفاوت بین شبکه های عصبی مکرر و LSTM
تفاوت بین شبکه های عصبی مکرر و LSTM


شبکه های LSTM چگونه کار میکنند؟

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

لایه ورودی:

معلوم میکند که چه اطلاعاتی باید در حافظه بمانند


لایه خروجی:

اطلاعات های داده شده به لایه بعدی را کنترل می کند.


لایه فراموشی:

زمان فراموش کردن دیتا ها را کنترل میکند.