شبکه عصبی پرسپترون
قبل از پیدایش شبکه عصبی mlp ، در سال 1958 فرانک روزنبلات یک شبکه عصبی به نام پرسپترون ابداع کرد. روزنبلات یک لایهای از نورونها را تشکیل داد و شبکه حاصل را پرسپترون نامید. اما پرسپترون روزنبلات نیز مشکلات فراوانی داشت. مینسکی و پپرت در سال 1969 کتابی به نام پرسپترون نوشتند. آنها تمامی تواناییها و مشکلات پرسپترون را در این کتاب مورد بررسی قرار دادن. مینسکی و پپرت در کتاب خود ثابت کردند که پرسپترون فقط مسائلی را میتواند حل کند که به صورت خطی تفکیکپذیر باشند. همین امر باعث شد تا محققان از حوزه شبکه عصبی نا امید شوند! ساختار پرسپترون در شکل زیر نشان داده شده است:
مشاهده میکنیدکه وزنها به صورت wi,j تغییر داده شدهاند. wi,j یعنی وزن مربوط به اتصال ورودی i به نورون j . پس i شماره ورودی و j شماره نورون را نشان میدهد. با این تغییر، روابطی که برای نورون گفتیم نیز به شکل زیر تغییر خواهند کرد:
حل مسئله xor با شبکه عصبی mlp
در جلسه قبل گفتیم که Minsky و Papert کتابی به نام perceptrons نوشتند. آنها در این کتاب ضعفهای جدی پرسپترون را برشمردند. آنها بیان کردند که پرسپترون قادر به حل برخی مسائل پیش پا افتاده نیست. یکی از این مسائل، مسئله XOR است. پرسپترون قادر به حل مسئله XOR نیست. زیرا آنها فقط میتوانند مسائلی که به صورت خطی تفکیکپذیر هستند را حل کنند. و مسئله XOR خطی نیست! به شکل زیر دقت کنید:
نمیتوان با یک خط مربعها را از مثلثها جدا کرد، درست است؟ بنابراین پرسپترون نمیتواند این مسئله را حل کند. با این حال بعدها مشخص شد که با چسباندن چند پرسپترون پشت هم، یکسری از مسائل قابل حل خواهند شد. از جمله مسئله XOR. به شبکهای که از چسباندن چند پرسپترون به هم ساخته میشود یک پرسپترون چند لایه ، multilayer perceptron یا به اختصار mlp گفته میشود. مثلا شبکه mlp زیر میتواند مسئله XOR را حل کند:
اتصالات خاکستری وزن یک دارند. اما از کجا بفهمیم که چنین شبکهای مسئله XOR را حل میکند. خب بهتر است قلم و کاغذ بردارید و محاسبه کنید.
مشاهده میکنید که خروجی نشان میدهد که شبکه عصبی mlp که ما تعریف کردیم، درواقع یک بلوک XOR است. نکته جالب این است که Y1، یک گیت and و Y2 یک گیت or است. (اگر متوجه نشدید که چرا اینگونه است به خروجی های آنها دقت کنید.) یعنی دو نورون Y1 و Y2، ورودیها را به فضای جدیدی بردند، طوری که تفکیک دادهها راحت است. یعنی شکل 1 به صورت زیر تغییر میکند:
مشاهده میکنید که نورونهای Y1 و Y2 ورودیها را طوری تغییر دادند که مسئله به صورت خطی قابل حل است! اما این وزنهایی که ما برای شبکه عصبی mlp درنظر گرفتیم از کجا آمدند؟ شبکه عصبی mlp که طراحی میکنیم، خودش باید این وزنها را یاد بگیرد. فرآیند یادگیری چگونه است؟ پاسخ را در بخشهای بعدی خواهید یافت. با هوسم همراه باشید …
شبکه عصبی پرسپترون چند لایه
در بخش قبل نحوه حل مسئله XOR با شبکه عصبی mlp را بررسی کردیم. در این بخش میخواهیم نحوه نمایش یک شبکه عصبی پرسپترون چندلایه را نشان دهیم. سپس رابطه میان شبکه عصبی mlp و شبکه عصبی عمیق را خواهیم گفت. همچنین چند اصطلاحی که در این حوزه وجود دارد را معرفی خواهیم کرد.
گفتیم یک شبکه عصبی پرسپترون چندلایه از پشت هم قرار دادن چند پرسپترون حاصل خواهد شد. یعنی ما در چنین شبکهای چند لایه از نورونها را خواهیم داشت. شبکه زیر یک نمونه از یک شبکه عصبی پرسپترون چند لایه است:
مشاهده میکنید که یک لایه خروجی و یک لایه ورودی داریم. همچنین دو لایه از نورونها بین لایههای ورودی و خروجی وجود دارد. به لایههایی که بین لایه ورودی و خروجی قرار دارند، لایه پنهان (Hidden Layer) گفته میشود. معمولا به لایههایی که نزدیک به لایه ورودی باشند، لایههای پایین گفته میشود. همچنین به لایههایی که نزدیک به لایه خروجی هستند، لایههای بالا گفته میشود. به جز خروجی، هر لایه یک بایاس دارد.
شبکهای که تعداد زیادی لایه پنهان داشته باشد شبکه عصبی عمیق (Deep Neural Network) گفته میشود. در دهه 90 میلادی به شبکههایی که بیش از دو نورون داشت، شبکه عصبی عمیق گفته میشد. اما امروزه شبکههای عصبی وجود دارند که صدها لایه دارند. بنابراین برای واژه عمیق تعریف دقیقی وجود ندارد. امروزه معمولا همه شبکههای عصبی را عمیق میخوانند، حتی آنهایی که عمیق نیستند!