برای مطالعه قسمت های بعدی این مقاله و مقاله های پیرامون موضوع شبکه های عصبی، کلیک کنید:
تاریخچه یادگیری عمیق و شبکه عصبی ___ (قسمت دوم)
شبکه های عصبی چیست __ تاریخچه شبکه عصبی و یادگیری ماشین (قسمت سوم)
شبکه عصبی بازگشتی چیست ؟ آشنایی با شبکههای عصبی بازگشتی (RNN) و (LSTM)
شبکه عصبی کانولوشن یا Convolutional چیست ؟ __ راهنمای جامع به روش ELI5
شبکه عصبی چیست ؟ ___ آشنایی با شبکه های عصبی مصنوعی
پیش گفتار: سونامی یادگیری عمیق
“چندین سال است که امواج یادگیری عمیق، به ساحل زبان شناسی محاسباتی (computational linguistics) وارد شده است. اما به نظر میرسد سال 2015، سالی است که نیروی کامل این سونامی، به کنفرانسهای اصلی پردازش زبان طبیعی (NLP) برخورد کند.” دکتر کریستوفر دی مانینگ (Dr. Christopher D. Manning)، دسامبر 2015.
ممکن است اغراق آمیز به نظر برسد اگر بگوییم روشهای استقرار یافته در یک حوزه تحقیقاتی، با یک کشف جدید به سرعت جایگزین میشوند، گویی با یک “سونامی” تحقیقاتی برخورد کردهاند. اما، این بیان فاجعه آمیز برای توصیف رشد سریع السیر یادگیری عمیق در چند سال گذشته مناسب است رشدی که با بهبود چشمگیر رویکردهای حاکم بر سخت ترین مسائل در هوش مصنوعی، سرمایه گذاریهای عظیم غولهای صنعتی مانند گوگل و رشد تصاعدی در نشریات تحقیقاتی (و فارغ التحصیلان یادگیری ماشین) قابل تشخیص است.
با گذراندن چندین کلاس در زمینه یادگیری ماشین، و حتی استفاده از آن در تحقیقات دانشگاهی، برایم جای سوال بود که آیا این “یادگیری عمیق” جدید، یک چیز جالب توجه است یا فقط یک نسخه بزرگ شده از “شبکه های عصبی مصنوعی” است که قبلا در اواخر دهه 80 میلادی توسعه یافته بود.
بگذارید به شما بگویم، پاسخ بصورت یک داستان است. نه فقط داستان شبکه های عصبی و نه فقط داستان یکسری پیشرفتهای تحقیقاتی که یادگیری عمیق را تا حدودی جالب تر از “شبکه های عصبی بزرگ” میکند (که من سعی خواهم کرد به نحوی توضیح دهم که تقریباً هر کسی بتواند آن را درک کند)، بلکه بیشتر به سراغ بیان این مطلب میرویم که چگونه چندین محقق تسلیم ناپذیر، سالهایی تاریک را پشت سر گذاشتند تا سرانجام شبکههای عصبی را دوباره احیا کرده و به رویای یادگیری عمیق دست یابند.
هم رویش منتشر کرده است:
آموزش شبکه عصبی مصنوعی -- از صفر به زبان ساده
قسمت 1: سرآغاز (دهه 1950 تا 1980 میلادی)
آغاز داستانی به وسعت نیم قرن، درباره اینکه چگونه یاد گرفتیم که به رایانهها یاد بدهیم.
در این قسمت، مطالبی نظیر تولد شبکه های عصبی با پرسپترون در سال 1958، زمستان هوش مصنوعی در دهه 70 و بازگشت محبوبیت شبکههای عصبی با انتشار رو به عقب یا پس انتشار (backpropagation) در سال 1986را پوشش خواهیم داد.
-
الگوریتم یادگیری ماشین با قرنها قدمت
بیایید با بیان مختصری از مبانی اولیه یادگیری ماشین شروع کنیم تا به الگوریتم یادگیری ماشین برسیم. نقاطی را بر روی یک نمودار دو بعدی در نظر بگیرید و سعی کنید تا آنجا که ممکن است، خطی متناسب با نقطهها رسم کنید. کاری که الان انجام دادید، تعمیم چند نمونه از زوج مقادیر ورودی (x) و مقادیر خروجی (y) به یک تابع کلی است که میتواند هر مقدار ورودی را به یک مقدار خروجی نگاشت کند.
این کار که با عنوان رگرسیون خطی (linear regression) شناخته میشود، یک تکنیک کوچک اما فوق العاده، با قدمت 200 ساله برای برون یابی یک تابع کلی از مجموعهای از زوجهای ورودی-خروجی است. و به همین دلیل است که داشتن چنین تکنیکی فوق العاده است. تعداد بی شماری از توابع وجود دارد که تشکیل معادلات به طور مستقیم برای آنها دشوار است، اما جمع آوری نمونههایی از زوجهای ورودی و خروجی برای آنها در دنیای واقعی آسان است.
مثال:
تابعی که یک صدای ضبط شده از یک واژه (به عنوان ورودی) را به اینکه واژه ضبط شده چیست (به عنوان خروجی)، نگاشت میکند.
رگرسیون خطی، برای حل مسئلهای مانند تشخیص گفتار، چندان کارگشا نیست، اما آنچه در اصل انجام میدهد همان چیزی است که مبنای یادگیری ماشین تحت نظارت (supervised Machine Learning) است: “یادگیری” یک تابع یا یک عملکرد، با توجه به مجموعهای از نمونههای آموزشی (training set)، بطوری که هر نمونه، یک زوج ورودی و خروجی از آن تابع است (کمی بعد، سراغ یادگیری بدون نظارت هم میرویم).
به طور خاص، روشهای یادگیری ماشین باید به تابعی دست یابند که بتواند به خوبی، به ورودیهایی که در مجموعه آموزشی نبودهاند، قابل تعمیم باشد. در اینصورت است که میتوانیم آن تابع را به ورودیهایی که خروجیشان در دسترس ما نیست، اعمال کنیم.
مثال:
تکنولوژی فعلی تشخیص گفتار گوگل، با استفاده از یادگیری ماشین با در اختیار داشتن مجموعهای گسترده از دادههای آموزشی پشتیبانی میشود. اما این مجموعه، به بزرگی تمامی ورودیهای گفتاری که ممکن است شما برای تلفن خود بیان کنید، نیست.
این اصل تعمیم به قدری مهم است که تقریباً همیشه یک مجموعه داده آزمایشی (test set) (نمونههای بیشتری از ورودی و خروجی) وجود دارد که بخشی از مجموعه آموزشی نیست. از این مجموعه جداگانه میتوان برای ارزیابی اثربخشی روش یادگیری ماشین استفاده کرد؛ بدین صورت که بررسی کند، این روش، خروجی را برای چه تعداد از نمونههای ورودی به درستی محاسبه میکند.
اما در تعمیم، با یک دشمن قدیمی به نام بیش برازش (overfitting) مواجهیم. یعنی یادگیری یک تابع که بر روی مجموعه آموزشی واقعاً خوب عمل میکند اما بر روی مجموعه آزمایشی، عملکرد بدی دارد. از آنجا که محققان یادگیری ماشین به ابزارهایی برای مقایسه اثربخشی روشهای خود نیاز داشتند، با گذشت زمان، مجموعه دادههای استاندارد (standard datasets) برای مجموعههای آموزشی و آزمایشی پیدا شده است که میتوانند برای ارزیابی الگوریتمهای یادگیری ماشین استفاده شوند. بسیار خوب، تعریف کافی است.
نکته این است:
تلاش ما برای ترسیم خط، یک مثال بسیار ساده از یادگیری ماشین تحت نظارت است: نقطهها، مجموعه آموزشی هستند (X ورودی و Y خروجی است)، خط ترسیم شده همان تابع تخمینی است و ما میتوانیم از این خط، برای پیدا کردن مقادیر Y به ازای مقادیری از X که جزو هیچ یک از نقاط ابتدایی ما نبودهاند، استفاده کنیم. نگران نباشید، بقیه این تاریخچه به این اندازه خشک و کسل کننده نخواهد بود! پس با ما همراه باشید!
-
نادانی وعدههای دروغین
چرا این همه مقدمه در رابطه با رگرسیون خطی بیان کردیم، در حالی که موضوع بحث ظاهراً شبکه های عصبی است ؟ خوب، در واقع رگرسیون خطی شباهت زیادی به اولین ایدهای دارد که به طور خاص به عنوان روشی برای یادگیری ماشینها تصور شده است: پرسپترون فرانک روزنبلات (Frank Rosenblatt).
روزنبلات، که یک روانشناس بود، پرسپترون (perceptron) را به عنوان یک مدل ریاضی ساده شده از نحوه عملکرد نورونهای مغز ما تصور کرد. این مدل، مجموعهای از ورودیهای باینری یا دودویی (از نورونهای مجاور) را دریافت میکند، هر ورودی را در یک وزن با مقداری پیوسته (قدرت سیناپس در هر نورون مجاور) ضرب میکند و مجموع این ورودیهای وزن دار طوری آستانه گذاری (thresholding) میشوند که اگر مجموع به اندازه کافی بزرگ بود، خروجی 1 و در غیر اینصورت، خروجی 0 باشد (مشابه نورونها که یا شلیک میکنند یا نمیکنند)
اکثر ورودیهای یک پرسپترون، یا برخی دادهها هستند یا خروجی یک پرسپترون دیگر. اما توضیح بیشتر این است که پرسپترونها، دارای یک ورودی “بایاس” (bias) مخصوص هم هسنتد که فقط دارای مقدار 1 است و اساساً اطمینان میدهد که با قابلیت ایجاد آفست (مقدارجبرانی یا offset) برای مقدار مجموع، توابع بیشتری با همان ورودی قابل محاسبه هستند.
این مدل از نورون بر اساس کار وارن مک کالِک (Warren McCulloch) و والتر پیتس (Walter Pitts) ساخته شده است. به همین دلیل آن را مدل مک کالِک-پیتس یا به اشتباه رایج در کشور مک کولاک پیتس مینامند. این دو نشان دادند یک مدل نورونی که ورودیهای باینری را جمع میکند و در صورت عبور حاصل جمع از مقدار معین آستانه (thershold)، خروجی 1 و در غیر این صورت خروجی 0 تولید میکند، میتواند توابع پایه OR/AND/NOT را مدل سازی کند.
بیان این مطلب، در روزهای اولیه هوش مصنوعی، یک کار بزرگ بود – تفکر غالب در آن زمان این بود که قادر ساختن رایانهها به انجام استدلال منطقی رسمی، اساساً هوش مصنوعی را حل میکند.
با این حال، مدل مککالِک-پیتس فاقد یک مکانیزم برای یادگیری بود، که برای استفاده از آن در هوش مصنوعی بسیار مهم تلقی میشد. اینجا بود که پرسپترون، گوی سبقت را ربود – روزنبلات با الهام از کار بنیادی دونالد هب (Donald Hebb) راهی برای یادگیری این نورونهای مصنوعی ارائه کرد. خب، ایدهای غیرمنتظره و بسیار تأثیرگذار را مطرح کرد که میگفت دانش و یادگیری، در درجه اول، از طریق شکل دهی و تغییر سیناپسهای بین نورونها رخ میدهد که به طور خلاصه با عنوان قانون هب به این صورت بیان شده است:
” وقتی آکسون سلول A به اندازه کافی به سلول B نزدیک باشد تا آن را تحریک کند، و مکرراً یا پیوسته در شلیک به آن نقش داشته باشد، برخی از فرایندهای رشدی یا تغییرات متابولیکی در یک یا هر دو سلول اتفاق میافتد، به طوری که کارآیی A، به عنوان یکی از سلولهای شلیک کننده به B، افزایش مییابد. “
پرسپترون دقیقاً از این ایده پیروی نکرد، اما وزن گذاری بر روی ورودیها یک طرح یادگیری بسیار ساده و شهودی را ممکن ساخت: با توجه به مجموعه دادههای آموزشی (training set) متشکل از نمونههای ورودی-خروجی که پرسپترون باید تابعی از آنها را یاد بگیرد. به ازای هر نمونه، اگر خروجی پرسپترون برای ورودی آن نمونه، در مقایسه با نمونه بسیار کم باشد، وزنها را افزایش دهید و در غیر اینصورت، اگر خروجی بیش از حد زیاد بود، وزنها را کاهش دهید. اگر بخواهیم کمی رسمی تر توضیح دهیم، الگوریتم به صورت زیر قابل بیان است:
الگوریتم
- کار را با یک پرسپترون با وزنهایی تصادفی و یک مجموعه آموزشی شروع کنید
- به ازای ورودیهای یک نمونه از مجموعه آموزشی، خروجی پرسپترون را محاسبه کنید
- اگر خروجی پرسپترون با خروجی صحیح آن نمونه مطابقت نداشت:
- اگر خروجی باید 0 باشد اما 1 بود، وزنهایی که ورودی 1 داشتند را کاهش دهید.
- اگر خروجی باید 1 باشد اما 0 بود، وزنهایی که ورودی 1 داشتند را افزایش دهید.
- به سراغ نمونه بعدی مجموعه آموزشی بروید و مراحل 2 تا 4 را تکرار کنید تا زمانی که پرسپترون دیگر اشتباه نکند.
این روند، ساده است و یک نتیجه ساده تولید میکند: یک تابع خطی ورودی (مجموع وزن دار)، درست مانند رگرسیون خطی، که توسط یک تابع فعال سازی غیر خطی (آستانه گذاری حاصل جمع) “فشرده” شده است.
زمانی که تابع فقط میتواند مجموعهای محدود از مقادیر خروجی داشته باشد (مانند توابع منطقی، که در آنها فقط دو حالت وجود دارد – درست/1 و غلط/0) خوب است که برای مجموع، یک آستانه (threshold) در نظر بگیرید. بنابراین در این حالت، مسئله ما، تولید یک خروجی پیوسته برای هر مجموعه از ورودی یعنی رگرسیون نیست. بلکه مسئله، دسته بندی ورودیها با یک برچسب صحیح است یعنی دسته بندی (classification).
روزنبلات ایده پرسپترون را بصورت سخت افزاری پیاده سازی کرد (این مربوط به قبل از رواج استفاده از زبانهای جالب برنامه نویسی بود)، و نشان داد که میتوان از آن برای یادگیری دسته بندی صحیح اشکال ساده با ورودیهای 20 در 20 پیکسل استفاده کرد. و بنابراین، یادگیری ماشین متولد شد. رایانهای ساخته شد که میتوانست تابعی را با توجه به جفتهای ورودی و خروجی شناخته شده از آن تخمین بزند. در این مورد، ماشین، تابع یک اسباب بازی کوچک را آموخت، اما تصور برنامههای کاربردی مفیدی مانند تبدیل آشفتگیهای دست خط انسان به متن قابل خواندن برای ماشین، دشوار نبود.
اما صبر کنید، ما تاکنون متوجه شدهایم که چگونه یک پرسپترون میتواند یاد بگیرد که یک 1 یا یک 0 را به عنوان خروجی تولید کند. اما چگونه میتوان آن را برای کارهای دسته بندی با چندین دسته مختلف، مانند دست خط انسان (که در آن تعداد زیادی حرف و رقم به عنوان دسته وجود دارد) توسعه داد ؟
این کار برای یک پرسپترون غیرممکن است، زیرا تنها یک خروجی دارد. اما توابعی با خروجیهای متعدد را میتوان با داشتن چندین پرسپترون در یک لایه آموزش داد، به طوری که همه این پرسپترونها ورودی یکسانی دریافت میکنند و هر کدام، مسئول یک خروجی از تابع هستند.
در واقع، شبکه های عصبی (یا به طور رسمی “شبکه های عصبی مصنوعی” یا ANN) چیزی بیشتر از لایههایی متشکل از پرسپترون – یا نورونها یا واحدها، همانطور که امروزه معمولاً نامیده میشوند، نیستند و در این مرحله فقط یک لایه وجود داشت – لایه خروجی (output layer).
بنابراین، یک نمونه اولیه استفاده از شبکه عصبی، دسته بندی تصویر یک رقم دست نویس است. ورودیها پیکسلهای تصویر هستند و 10 نورون خروجی وجود دارد که هریک مربوط به مقدار یکی از 10 رقم ممکن است. در این حالت تنها یکی از 10 نورون، خروجی 1 میدهد، بیشترین مجموع وزن دار به عنوان خروجی صحیح در نظر گرفته شده، و بقیه خروجی 0 تولید میکنند.
همچنین میتوان شبکههای عصبی را با نورونهای مصنوعی متفاوت با پرسپترون تصور کرد. به عنوان مثال، استفاده از تابع فعال سازی آستانه لزوما ضروری نیست. برنارد ویدرو (Bernard Widrow) و تد هوف (Tedd Hoff)، خیلی زود امکان تولید خروجی از ورودی وزن دار را با «یک نورون تطبیقی ” ADALINE ” با استفاده از “ممیستور”های شیمیایی» بررسی کردند و نشان دادند که چگونه میتوان این “نورونهای خطی تطبیقی” را در مدارهای الکتریکی با ممیستور (memistor) – مقاومتهای حافظه دار ادغام کرد. آنها همچنین نشان دادند که نداشتن تابع فعال سازی آستانه از نظر ریاضی خوب است، زیرا مکانیسم یادگیری نورون میتواند به طور رسمی مبتنی بر به حداقل رساندن خطا از طریق انجام محاسبات باشد.
ببینید، اگر تابع نورون را با این پرش تند تابع آستانه از 0 به 1 عجیب و غریب نکنیم، اندازه گیری میزان تغییر خطا هنگام تغییر هر وزن (مشتق) میتواند برای کاهش خطا و یافتن مقادیر وزن بهینه استفاده شود. همانطور که خواهیم دید، پیدا کردن وزنهای درست با استفاده از مشتقات خطای آموزش نسبت به هر وزن، دقیقاً همان شیوهای است که برای آموزش شبکههای عصبی تا به امروز استفاده میشود.
هم رویش منتشر کرده است:
آموزش ساخت شبکه عصبی با پایتون (و دیگر زبانها) از صفر
اگر کمی بیشتر در مورد ADALINE فکر کنیم، بینش بیشتری به دست میآوریم: پیدا کردن مجموعهای از وزنها برای تعدادی از ورودیها در واقع فقط نوعی رگرسیون خطی است. و باز هم، مانند رگرسیون خطی، برای حل مسائل پیچیده هوش مصنوعی نظیر تشخیص گفتار یا بینایی رایانه کافی نخواهد بود.
چیزی که مک کالِک، پیتس و روزنبلات از آن بسیار هیجان زده بودند، ایده وسیع اتصالگرایی (Connectionism) بود: اینکه شبکههایی متشکل از این واحدهای محاسباتی ساده میتوانند بسیار قدرتمندتر باشند و مسائل دشوار هوش مصنوعی را حل کنند. روزنبلات تا جایی سخن گفت که نیویورک تایمز در آن زمان، اینچنین نقل قول خنده دار و مضحکی را بیان میکند:
“نیروی دریایی، امروز از جنین یک رایانه الکترونیکی رونمایی کرد که انتظار میرود بتواند راه برود، صحبت کند، ببیند، بنویسد، تولیدمثل کند و از وجود خود آگاه باشد. دکتر فرانک روزنبلات، روانشناس تحقیقاتی در آزمایشگاه هوانوردی کرنل، بوفالو، گفت که ممکن است پرسپترونها به عنوان کاوشگرهای مکانیکی فضایی به سمت سیارات شلیک شوند”
برای تماشای فیلمی تاریخی در این زمینه در YouTube کلیک کنید (+)
این طرز صحبت، بدون شک باعث آزردگی سایر محققان در زمینه هوش مصنوعی شد که بسیاری از آنها بر رویکردهای مبتنی بر دستکاری نمادها با قوانین مشخص که از قوانین ریاضی منطق ناشی میشدند، متمرکز شده بودند. ماروین مینسکی (Marvin Minsky)، بنیانگذار آزمایشگاه هوش مصنوعی MIT و سیمور پاپرت (Seymour Papert)، مدیر وقت آزمایشگاه، برخی از محققانی بودند که نسبت به این هیاهو و تبلیغات، شک و تردید داشتند و در سال 1969 شک و تردید خود را در قالب تحلیل دقیق محدودیتهای پرسپترونها در یک کتاب با عنوان پرسپترونها (Perceptrons) منتشر کردند.
جالب اینجاست که مینکسی احتمالا اولین محققی است که یک شبکه عصبی سخت افزاری را با SNARC (ماشین حساب تقویتی آنالوگ عصبی تصادفی) در سال 1951 پیاده سازی کرده است که مربوط به سالها قبل از کار روزنبلات بوده است. اما فقدان هرگونه اثری از کار او در این سیستم و ماهیت انتقادی تجزیه و تحلیل در پرسپترونها نشان میدهد که او به این نتیجه رسید که این رویکرد در مورد هوش مصنوعی به بن بست خورده است.
بیشترین عنصر مورد بحث در این تحلیل، روشن شدن محدودیتهای پرسپترون است. به عنوان مثال، آنها نمیتوانند عملکرد ساده بولی XOR را یاد بگیرند، زیرا به طور خطی قابل تفکیک ( linearly separable) نیست.
اگرچه تاریخ در اینجا مبهم است، اما اعتقاد بر این است که این نشریه، به آغاز اولین زمستان هوش مصنوعی (AI Winters) کمک کرده است. یعنی دورهای همراه با موج گستردهای از هیاهو و تبلیغات برای هوش مصنوعی که با سرخوردگی منجر به توقف منابع مالی و انتشارات شناخته میشود.
پیش از این در همرویش فیلم شبکه عصبی کانولوشنی به زبان ساده منتشر شد. برای دیدن فیلم معرفی این آموزش بر روی این لینک (+) و یا پخش کننده پایین کلیک کنید:
برای دریافت بسته کامل این آموزش بر روی لینک زیر کلیک کنید:
شبکه عصبی کانولوشن به زبان ساده
-
پایانی بر زمستان هوش مصنوعی
خب، پس همه چیز برای شبکههای عصبی خوب پیش نمیرفت. اما چرا؟ به هر حال، ایده این بود که بجای استفاده از یک نورون، مجموعهای از نورونهای ساده ریاضی را برای انجام کارهای پیچیده با هم ترکیب کنیم. به عبارت دیگر، به جای داشتن فقط یک لایه خروجی، یک ورودی را به تعداد دلخواهی از نورونها ارسال کنیم که به آنها لایه مخفی یا پنهان (hidden layer) گفته میشود زیرا خروجی آنها، به عنوان ورودی به یک لایه مخفی دیگر یا ورودی لایه خروجی نورونها عمل میکند.
فقط خروجی لایه خروجی “دیده میشود” که همان پاسخ شبکه عصبی است. اما همه محاسبات میانی که توسط لایه (های) مخفی انجام میشود، میتواند مشکلات بسیار پیچیده تری را نسبت به یک لایه تنها برطرف کند.
دلیل خوب بودن لایههای مخفی، در اصول اولیه، این است که لایههای مخفی میتوانند ویژگیهایی را در دادهها پیدا کرده و به لایههای بعدی اجازه دهند تا بجای کار بر روی دادههای خام بزرگ و نویزی، بر روی این ویژگیها کار کنند. به عنوان مثال، برای یافتن چهره انسان در یک تصویر، که یکی از کارهای رایج شبکههای عصبی است، اولین لایه مخفی میتواند مقادیر خام پیکسل را گرفته و خطوط، دایرهها، بیضیها و … را درون تصویر پیدا کند.
لایه بعدی موقعیت این خطوط، دایرهها، بیضیها و … را در تصویر دریافت میکند و از آنها برای پیدا کردن موقعیت چهره انسان استفاده میکند که بسیار راحت تر بود! و مردم اساساً این را درک کردند. در حقیقت، تا همین اواخر، تکنیکهای یادگیری ماشین معمولاً بطور مستقیم بر روی ورودیهای خام داده مانند تصاویر یا صدا اعمال نمیشد.
در عوض، یادگیری ماشین بر روی دادهها پس از گذراندن مرحله استخراج ویژگیها (feature extraction) انجام میشد. یعنی به منظور سهولت یادگیری، یادگیری ماشین بر روی دادههای پیش پردازش شدهای انجام میشد که ویژگیهای مفیدتری مانند زوایا یا اشکال، قبلاً از آنها استخراج شده بود.
بنابراین، توجه به این نکته ضروری است که تحلیل مینسکی و پاپرت از پرسپترونها، صرفا عدم امکان محاسبه XOR با یک پرسپترون را نشان نمیداد، بلکه به طور خاص استدلال میکرد که این کار باید با لایههای متعددی از پرسپترونها انجام شود چیزی که امروزه به آن شبکههای عصبی چند لایه (multilayer neural nets) میگوییم. و اینکه الگوریتم یادگیری روزنبلات برای چندین لایه کار نمیکرد. و مشکل واقعی این بود: قانون یادگیری سادهای که قبلاً برای پرسپترون بیان شده بود، برای چندین لایه کار نمیکرد.
برای درک علت، بیایید مجدداً مرور کنیم که یک لایه از پرسپترونها، چگونه یاد میگیرد برخی از توابع را محاسبه کند:
- تعدادی پرسپترون که برابر با تعداد خروجیهای تابع هستند، با وزنهای اولیه کوچک شروع به کار میکنند
- برای ورودیهای یک نمونه از مجموعه آموزش، خروجی پرسپترونها را محاسبه کنید
- برای هر پرسپترون، اگر خروجی با خروجی نمونه مطابقت ندارد، وزنها را متناسب با آن تنظیم کنید
- به نمونه بعدی در مجموعه آموزش بروید و مراحل 2 تا 4 را تکرار کنید تا زمانی که پرسپترونها دیگر اشتباه نکنند
دلیل این که چرا این روند برای چندین لایه جواب نمیدهد، باید واضح باشد: نمونه فقط خروجی صحیح را برای لایه خروجی نهایی مشخص میکند، بنابراین از کجا باید بدانیم که چگونه وزنهای پرسپترونها را در لایههای قبل از آن تنظیم کنیم؟ پاسخ، با وجود اینکه مدتی طول کشید تا به دست آید، اما بار دیگر بر اساس محاسبات قدیمی مشخص شد: قانون زنجیرهای (chain rule).
کلید درک موضوع این بود که اگر نورونهای شبکه عصبی صرفا پرسپترون نباشند، اما طوری طراحی شده باشند که خروجی را با یک تابع فعال سازی که هنوز غیرخطی اما مشتق پذیر است، محاسبه کنند، مانند Adaline، نه تنها میتوان از مشتق برای تنظیم وزن به منظور به حداقل رساندن خطا استفاده کرد، بلکه میتوان از قانون زنجیرهای نیز برای محاسبه مشتق همه سلولهای عصبی در لایه قبلی استفاده کرد و بنابراین روش تنظیم وزن آنها نیز مشخص خواهد شد.
یا به عبارت ساده تر: ما میتوانیم با استفاده از محاسبات، گناه برخی اشتباهات مجموعه آموزشی در لایه خروجی را به گردن هر یک از نورونها در لایه مخفی قبلی بیندازیم و سپس در صورت وجود لایههای مخفی دیگر، میتوان این گناه و تقصیر را بیشتر بین آنها تقسیم کرد. یعنی ما خطا را رو به عقب انتشار میدهیم. و بنابراین، میتوانیم بفهمیم که اگر هر وزنی را در شبکه عصبی، از جمله وزنهای لایههای مخفی، تغییر دهیم، خطا چقدر تغییر میکند. سپس از یک تکنیک بهینه سازی – برای مدت طولانی، معمولاً گرادیان نزولی تصادفی (stochastic gradient descent) – برای پیدا کردن وزنهای بهینه به منظور به حداقل رساندن خطا استفاده کنیم.
پس انتشار (Backpropagation) توسط محققان متعددی در اوایل دهه 60 میلادی به دست آمد و در اوایل 1970 توسط سپو لیناینما (Seppo Linnainmaa) برای اجرا بر روی رایانهها پیاده سازی شد، اما پل وربوس (Paul Werbos) اولین بار در ایالات متحده، پس از تحلیل عمیق آن در پایان نامه دکتری خود در 1974 پیشنهاد کرد که میتوان از آن برای شبکههای عصبی استفاده کرد.
جالب اینجاست که همانطور که در مورد پرسپترونها از مدل عملکرد ذهن انسان الهام گرفت، در این مورد از نظریههای روانشناسی فروید بهره جست. همانطور که خود او اینگونه بیان میکند:
“در سال 1968، من پیشنهاد دادم که مفهوم فروید در مورد جریان رو به عقب واگذاری اعتبار را به نوعی تقلید کنیم؛ بصورت جریان رو به عقب از یک نورون به نورون دیگر، … من محاسبات معکوس را با استفاده از ترکیبی از شهود و مثالها و قانون زنجیره معمولی توضیح دادم، هرچند این دقیقاً ترجمهای ریاضی وار از چیزهایی بود که فروید قبلاً در نظریه روان پویایی خود ارائه کرده بود! “
وربوس، علیرغم حل این سوال که چگونه میتوان شبکههای عصبی چند لایه را آموزش داد، و مشاهده آن در هنگام کار بر روی پایان نامه دکتری خود، تا سال 1982 به دلیل تاثیرات سرد زمستان هوش مصنوعی، در مورد کاربرد پس انتشار در شبکههای عصبی مقالهای منتشر نکرد.
در واقع، وربوس تصور میکرد که این رویکرد برای حل مشکلات ذکر شده در مورد پرسپترونها منطقی خواهد بود، اما جامعه به کلی ایمان خود را برای مقابله با این مشکلات از دست داده بود.
“کتاب مینسکی بیشتر بخاطر این استدلال مشهور بود که (1) ما باید از MLPها پرسپترونهای چند لایه (Multi Layer Perceptron)، اصطلاح دیگری برای شبکههای عصبی چندلایه حتی برای نمایش توابع غیر خطی ساده مانند نگاشت XOR استفاده کنیم. و (2) هیچ بشری روی زمین، روش مناسبی برای آموزش MLPها پیدا نکرده است که بتواند این قبیل توابع ساده را به خوبی یاد بگیرد.
کتاب مینسکی اکثر جهانیان را متقاعد کرد که شبکههای عصبی یک بن بست بی اعتبار بودند بدترین نوع بدعت. ویدرو تأکید کرده است که این بدبینی، که مکتب اولیه “پرسپترون” هوش مصنوعی را تحت فشار قرار داد، واقعاً نباید به گردن مینسکی بیفتد.
مینسکی صرفاً تجربیات صدها محقق صادق را خلاصه میکرد که تلاش کرده بودند راههای خوبی برای آموزش MLPها بیابند، اما فایدهای نداشت.
هنوز جای امید وجود داشت، مثلا الگوریتمی که روزنبلات آن را “پس انتشار” نامید (که اصلاً شبیه به آنچه که ما اکنون آن را پس انتشار مینامیم، نیست!)، و یا پیشنهاد مختصر آمری (Amari) مبنی بر این که ممکن است حداقل مربعات [که مبنای رگرسیون خطی ساده است] را به عنوان راهی برای آموزش شبکههای عصبی در نظر بگیریم (بدون بحث در مورد چگونگی بدست آوردن مشتقات، و با این هشدار که او، انتظار زیادی از این رویکرد نداشت.)
اما بدبینی در آن زمان به پایان رسید. در اوایل دهه 1970، من با مینسکی در MIT در واقع ملاقات کردم. من پیشنهاد دادم که یک مقاله مشترک انجام دهیم که نشان میدهد MLPها در واقع میتوانند بر مشکلات قبلی غلبه کنند … اما مینسکی علاقهای نداشت. در واقع در آن زمان، هیچ کس در MIT یا هاروارد یا هر مکانی که بتوانم پیدا کنم علاقهای به این کار نداشت.”
به نظر میرسد به دلیل این عدم علاقه آکادمیک بود که بیش از یک دهه طول کشید تا در سال 1986، این رویکرد در مقاله “بازنماییهای یادگیری با پس انتشار خطاها” (Learning representations by back-propagating errors) توسط دیوید روملارت (David Rumelhart)، جفری هینتون (Geoffrey Hinton) و رونالد ویلیامز (Ronald Williams) رواج یابد.
علیرغم اکتشافات متعدد این روش (این مقاله حتی به صراحت از دیوید پارکر (David Parker) و یان لکان (Yann LeCun) به عنوان دو نفر که قبلاً آن را کشف کردهاند نام میبرد)، انتشار آن در سال 1986 نشان میدهد که این ایده چقدر واضح و مختصر بیان شده است. در حقیقت، به عنوان یک دانشجوی یادگیری ماشین، به راحتی متوجه شدم که توضیحات موجود در مقاله آنها اساساً با روشی که مفهوم آن هنوز هم در کتابها و کلاسهای هوش مصنوعی توضیح داده میشود، یکسان است. با نگاهی به گذشته، IEEE اینگونه بیان میکند:
” متأسفانه، کارهای وربوس در جامعه علمی تقریبا ناشناخته ماند. در سال 1982، پارکر این تکنیک را دوباره کشف کرد [39] و در 1985، گزارشی از آن را در M.I.T. چاپ کرد[40] زمان زیادی از انتشار یافتههای پارکر نگذشته بود که، روملارت، هینتون و ویلیامز [41]، [42] نیز این تکنیکها را دوباره کشف کردند و، عمدتا به عنوان نتیجهای از چارچوب روشنی که در آن ایدههای خود را ارائه کردند، سرانجام موفق شدند آن را به طور گستردهای معرفی کنند.”
اما این سه نویسنده بسیار فراتر از صرف ارائه این الگوریتم یادگیری جدید پیش رفتند. در همان سال آنها مقاله بسیار عمیق تری با عنوان “بازنماییهای داخلی یادگیری با انتشار خطا” (Learning internal representations by error propagation) منتشر کردند، که به طور خاص مشکلات مورد بحث مینسکی در مورد پرسپترونها را مورد بررسی قرار داد.
با اینکه این ایده در گذشته توسط مردم متصور شده بود، دقیقاً همین فرمول بود که در سال 1986 به طور گسترده باعث فهم این موضوع شد که چگونه میتوان شبکههای عصبی چند لایه را برای مقابله با مسائل پیچیده یادگیری، آموزش داد.
و بنابراین، شبکههای عصبی برگشته بودند! در ادامه، خواهیم دید که چگونه چند سال بعد، پس انتشار و برخی ترفندهای دیگر که در مقاله ” بازنماییهای داخلی یادگیری با انتشار خطا” مورد بحث قرار گرفته بودند، در یک مسئله بسیار مهم به کار گرفته شدند: قادر ساختن کامپیوترها برای خواندن دست خط انسان.
کلیدواژگان
تاریخچه شبکه عصبی – تاریخچه شبکه های عصبی – تاریخچه شبکه عصبی کانولوشن – مقاله شبکه عصبی مصنوعی – تحقیق در مورد شبکه های عصبی – تاریخچه یادگیری ماشین – تاریخچه یادگیری عمیق – مفاهیم یادگیری ماشین – تاریخچه یادگیری ماشینی – مقدمه یادگیری ماشین – الگوریتم یادگیری ماشین – شبکه عصبی چیست – شبکه عصبی مصنوعی چیست – شبکه های عصبی چیست – شبکه عصبی عمیق چیست – شبکه عصبی پرسپترون چند لایه – شبکه عصبی پرسپترون چگونه کار میکند – تاریخچه هوش مصنوعی – تاریخچه رشته هوش مصنوعی – تعریف و تاریخچه هوش مصنوعی – مقاله در مورد تاریخچه هوش مصنوعی – تاریخچه شبکه های عصبی – تاریخچه شبکه های عصبی و یادگیری عمیق – تاریخچه شبکه های عصبی کانولوشن – تاریخچه شبکه عصبی
منبع
دوره های آموزشی مرتبط
- آموزش YOLO - تشخیص اشیا با پایتون در OpenCV ۷۵,۰۰۰ تومان
- آموزش یادگیری ماشین از صفر --- یادگیری سریع و آسان ۶۸,۰۰۰ تومان
1 دیدگاه برای “تاریخچه شبکه عصبی و یادگیری عمیق ___ (قسمت اول) ”
مقاله بسیار خوب و قلم بی نظیر و گویا. ممنون از نویسنده محترم آقای ماجدی نیا. به خوانندگان مطالعه قسمت های بعدی رو هم توصیه می کنم.