ازجمله مهمترین چالش های پیش روی بشر، مخصوصا در حوزه ی یادگیری ماشین و شناسایی الگو این است که چه قسمت ها و بخش هایی از یک سیستم یادگیری باعث موفقیت یا شکست سیستم میشوند و با چه تغییراتی در این بخش ها میتوان عملکرد سیستم را بهبود داد.به مسایلی از این قبیل fundamental credit assignment problem می گویند. این مسایل به دنبال پاسخ دادن به روش هایی برای ایجاد یک سیستم کلی حل مسأله (universal problem solvers) می باشند. یادگیری عمیق هم یکی از آن روش هاست که در این پروژه به آن میپردازیم.
# مقدمه
یادگیری عمیق در واقع روشی نوین برای یادگیری همان شبکه های عصبی استاندارد چند لایه است . شبکه ی عصبی استاندارد (NN) شامل تعداد بسیار زیادی از پردازنده های ساده و متصل به نام نرون است که خروجی هرکدام یک مقدار حقیقی (در صورت انتخاب تابع sigmoid به عنوان تابع activation) یا یک مقدار باینری (در صورت انتخاب تابع پله به عنوان تابع activation) میباشد.نرون های لایه ی ورودی ، از طریق سنسورهای ورودی ، اطلاعات را از محیط میگیرند. در حالی که نرون های لایه ی میانی از طریق اتصالات وزن دار ، فعال میشوند. برخی از نرون ها میتوانند با انجام یک action خروجی تولید کنند و روی محیط تاثیر بگذارند.
شبکه های عصبی مصنوعی به 2 دسته ی feedforward FNN (جریان داده ها به صورت یک طرفه از ورودی به سمت خروجی ) و بازگشتی RNN(دو طرفه) تقسیم میشوند، RNNها عمیقترین نوع شبکه های عصبی هستند و محاسبات آنها بسیار قویتر از FNNهاست.RNNها میتوانند برنامه هایی را که ترکیبی از اطلاعات پردازش شده ی parallel , sequential هستند را به صورت مناسبی یادبگیرند.
![](https://boute.s3.amazonaws.com/228-1.png)
فرآیند آموزش (credit assignment) در واقع یافتن وزن اتصالات به گونه ایی است که شبکه ی NN رفتار دلخواه را انجام دهد.(برای مثال در پردازش تصویر بتواند شی خاصی را شناسایی کند ). جواب یک شبکه ی NN معمولن به صورت باینری است (می تواند یک مسأله ی 2 کلاسه را تشخیص دهد). تعداد نرون ها بسته به پیچیدگی مسأله افزایش می یابد و در مسایل پیچیده به چندین زنجیره از صفحات محاسباتی (stage)مرتبط و طولانی نیاز داریم به این ترتیب که هرصفحه مجموع فعالیت کل شبکه را به صورت غیرخطی تغییر میدهد.یادگیری عمیق سعی میکند با دقت بالا عملیات وزن دهی (learning) را برای تعداد صفحات بالا انجام دهد. از آنجا که روش های آموزش برای NN در سطوح بالا عملن ناکام ماند تا قبل از روش آموزش عمیق مدل های سطحی شبکه عصبی (shallow ) که دارای تعداد صفحات کمی هستند برای دهه های زیادی مورد استفاده قرار گرفتند. روش back propagation جزو معروف ترین روش های gradian descent برای مسایل با ناظر(supervised) در دهه های 60 و 70 میلادی بوده است.(در این روش اصلاح وزن ها در جهت حداقل شدن خطای کل برای نمونه های آموزشی معرفی شده انجام میشود که یک الگوریتم تکراری است)
در دهه های 80 و 90 سعی شد از BP(back propagation) برای شبکه های عصبی عمیق با تعداد صفحات بالا استفاده شود، اما بسیار سخت و درعمل برای 4 لایه به بالا نشدنی بود.یادگیری عمیق به صورت بدون ناظر( unsupervised ) (UL) توانست در بعضی زمینه ها عملی شود.در حدود های سال 2000 یادگیری عمیق توانست در مسایل باناظر بهبود یابد و در نهایت شبکه های عمیق عصبی که اعتبار خود را نسبتا از دست داده بودند توانستند به خاطر عملکرد خوب نسبت به بقیه ی روش های یادگیری ماشین توجه افراد زیادی را به خود جلب کنند. از جمله ی این دست آوردها ماشین های کرنل (Kernel machin (Vapnik,1995;scholkopf et all.,1998) بودند که روی تعداد بسیار زیادی از application های مهم و کاربردی با دقت بالا جواب میدادند.از سال 2009 به بعد شبکه های عمیق باناظر در بسیاری از مسابقات جهانی شناسایی الگو برنده شدند.بعدها شبکه های عمیق ، با مبحث کلی تری به اسم Reinforcement learning (RL) مرتبط شدند که در آنها معلم ناظری وجود ندارد.
شبکه های یادگیری عمیق در واقع در لایه های پایینی آموزش را براساس انتقال ویژگی های سطح پایین به مجموعه ایی از ویژگی های سطح بالا انجام میدهد (توسط ماشین بولتزمن تغییر یافته RBM) . به این ترتیب وزن ها در لایه های پایینی به صورت حدودی تعیین میشوند.بنابراین نیازی به اصلاح چندانی ندارند و با روش BP از بین رفتن اثر گرادیان تاثیر منقی چندانی روی شبکه نمیگذارد
# کارهای مرتبط
## اولین یادگیری عمیق(IVAKHNKO-1965)
از پرسپترون چند لایه با توابع فعالیت چندجمله ایی استفاده شده است.آموزش به صورت افزایشی (incremental layer-wise)در لایه ها وبه وسیله ی رگرسیون انجام شد.به این ترتیب تا سال 1971 توانستند 8 لایه را آموزش دهند.
## BP با ناظر
BP(back propagation) ابتدا در برنامه نویسی پویا استفاده شد ، سپسbrayson از آن درماتریس گسسته ی اسپارس بهره برد , و درسال 1970 در شبکه های شبه-عصبی توسط linnainma استفاده شد.در نهایت در سال 1981 werbos از BP درNN استفاده کرد و در سال های 1986-89 rumelhart توانست شبکه های عصبی بازگشتی را با الگوریتم BP آموزش دهد.
## RNNها:
درسال 1991 schmidhuber توانست حافظه ی موقت سلسله مراتبی را به صورت بدون ناظر آموزش دهد.این حافظه در واقع به صورت مجموعه ایی از RNNها بود. که در نهایت با فشرده سازی حافظه توانست روش هایی برای سرعت بخشیدن به یادگیری باناظر پیدا کند.مشابه این مسأله برای FNNها تحت عناوین 1-پشته های کدگذار خودکار (Auto-Encoder stack) که توسط بالارد در سال 1981 معرفی شد و 2-شبکه های اعتقادی عمیق (deep belief network) توسط hinton در سال 2006 انجام شد.
RNNها به صورت long –shot term memory (LSTM) پیاده سازی شد تا اثر گرادیان تا لایه های ابتدایی هم باقی بماند . به این صورت که حافظه ی موقتی ( نرون قرمز در شکل ) تعریف شد که به خاطر وجود self- connection (خود اتصالی) میتواند خطا را تا هزار مرحله منتقل کند . به این ترتیب LSTM براساس روش گرادیان (neural comp,1995) توانست بسیاری از شبکه های عمیق غیرقابل آموزش را آموزش دهد مانند: (گرامرها ، متالرنینگ، تشخیص صدا با HMM، تشخیط دستخط و ...(
![](https://boute.s3.amazonaws.com/228-2.png)
## MPCNNها (max pooling ):
این روش به دنبال اصلاح وزن ها به طور دلخواه در لایه ها و اختصاصی کردن لایه ها به مجموعه های کوچکتر مییاشد.از حدودهای سال 1980 تا 2011 کارهایی در این زمینه انجام گرفته که در نهایت با پیاده سازی آن بر روی GPUها Ciresan (Swiss AI Lab IDSIA توانستند جایزه ی مسابقات FFN را از آن خود کنند.
# آزمایشها
# کارهای آینده
# مراجع
[1] 1991- Fundamental Deep Learning Problem discovered and analysed: in standard NNs, backpropagated error gradients tend to vanish or explode.
[2] J. Schmidhuber. Deep Learning in Neural Networks: An Overview. Neural Networks, Volume 61, January 2015
[3] http://deeplearning.net/reading-list/