پست وبلاگ

یادگیری عمیق یا همون Deep learning !

یادگیری عمیق یا همون Deep learning !

بسم الله الرحمن الرحیم

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

سعی میکنم هر وقت سرم خلوت شد مطالبی اینجا بزارم اما قول نمیدم زود به زود باشه چون فعلا سرم خیلی شلوغه.فعلا تا مدتی یکم کارهای مربوط به سایت طول میکشه و همزمان سعی میکنم مطالب رو هم قرار بدم.

سعی میکنم به سوالات اگر چیزی باشه و بلد باشم جواب بدم .

خب برای خالی نبودن عریضه و اینکه یه توضیح خیلی خیلی مختصر هم در مورد یادگیری عمیق بدم این چند خط رو مینویسیم .

خلاصه :
یادگیری عمیق چیست؟

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

مدلهای یادگیری عمیق مختلفی در تحقیقات و فعالیت های تجاری مورد استفاده قرار میگیرند. بعضی از این مدلها به قرار زیر اند :

  • شبکه عصبی کانولوشن
  • شبکه باور عمیق
  • شبکه عصبی feed-forward

بسیاری از مدلهای یادگیری عمیق, الهام گرفته از فرآیند های بیولوژیکی اند.

یادگیری عمیق را میتوان هم در یادگیری با نظارت(supervised) و هم بدون نظارت(unsupervised) مورد استفاده قرار داد

یادگیری عمیق چگونه کار میکند؟

الگوریتم BackPropagation (پس انتشار [خطا] ) الگوریتم محبوبی است که یادگیری را در یادگیری عمیق در بسیاری از مدلها پیاده میکند. ایده این الگوریتم در دهه ۷۰ میلادی مطرح و در سال ۱۹۸۶ در مقاله ای توسط Rumelhart, Hinton, و Williams (5)به شهرت رسید.

کمی توضیح بیشتر:

یادگیری عمیق یکی از زیرمجموعه های ماشین لرنینگ هست و یعنی یادگیری با استفاده از معماری های عمیق.این معماری هایی که ازش اسم بردیم همون شبکه های عصبی قدیمی هستن که حالا بلطف پیشرفتهای چند سال اخیر مشکلاتی که در زمان عمیق کردن اونها باهاش مواجه بودیم برداشته شده و این شبکه ها عمیق شدن. با عمیق شدن این شبکه ها, و سلسله مراتبی که ارائه میشه توسط لایه های مختلف ,سطوح انتزاع مختلفی توسط این شبکه ها بدست میاد. این شبکه ها داده محور هستن و بصورت خودکار مهندسی ویژگی در اونها انجام میشه و ما دخالتی نداریم . و همین نکته هم دقیقا باعث دقت بسیار خوب و کارایی عالی اونها تو حوزه های مختلف شده. از قدیم الایام دانشمندا میدونستن که با عمیق کردن شبکه ها قابلیت های اونها رو میشه افزایش داد اما نبود داده کافی نبود سخت افزار مناسب و قوی و همینطور اور فیتینگ شدید به اضافه مشکل انتقال سیگنال از انتها به ابتدای یه شبکه عمیق و… همه باعث میشد که بصورت عملی نشه کاری کرد. طی چند سال اخیر این مشکلات برطرف شدن و همین امر باعث رونق گرفتن دوباره بحث معماری های عمیق شد. پس میشه گفت که یادگیری عمیق مجموعه ای از تکنیکهای مبتنی بر شبکه های عصبی هست که اجازه  یادگیری ویژگی ها بصورت خودکار از خود داده های ورودی رو بما میده. معماری های مختلفی از این نوع امروزه وجود داره. معروف ترین و موفق ترین اونها شبکه های کانولوشنی هستن .اخیرا LSTM‌ها که نوعی از شبکه های عصبی recurrent هستن هم رو بورس افتادن به اضافه اینکه  deep boltzman machine‌ها و DBN‌ها و(و یه دوجین معماری دیگه) هم هست که از اونا استفاده میشه.(البته DBN ها و DBM ها که روشهای بدون سرپرست هستن بعد از ظهور شبکه های کانولوشن عمیق و RNN ها استفاده ازشون خیلی کمتر شده خصوصا بخاطر وجود و در دسترس بودن دیتاست های لیبل گذاری شده (مثلا ایمیج نت بیش از یک میلیون تصویر برچسب گذاری شده داره که حجمش بیش از ۱۵۰ گیگابایت هست. دیتاست ها تو بخش های مختلف دیگه هم همینطور خیلی زیاد شدن (بخش دیتاستها و یا پست بهشت دیتاست ها رو ببینید خوبه). البته نمونه های ترکیبی هم از این معماری ها بوجود اومده که فعلا جای بحثش نیست) (اینجا روخواستید یه نگاه بندازید) ولی در حال حاضر اکثر مقاله ها و کارهایی که من دیدم تو حوزه کامپیوتر ویژن بوده(البته حوزه های دیگه هم بشدت داره کار میشه.تصویر زیر رو ببینید)  شاید بالای ۹۰ درصد دارن (چیزی که من دیدم) روی شبکه های کانولوشنی کار میکنن تو حوزه یادگیری عمیق(بینایی کامپیوتر).(معماری های دیگه هم هست ولی خب کاربردهای خاص خودشونو دارن مثل همون rnnها که تو پردازش زبان طبیعی و شناسایی فعالیت و…. خیلی عالی کار میکنن.
معماری های عمیق و کاربردهای هریک
در مقابل یادگیری عمیق یادگیری کم عمق یا اصطلاحا  shallow learning‌ وچود داره که قدیما (و البته الان هم) و قبل از دیپ لرنینگ ازش استفاده میشد . اونم چیزی نیست جز استفاده از همون support vector machine‌ها و شبکه های عصبی معمولیو…
اون بحث یادگیری هم که میاد اشاره به ماهیت training‌این نوع سیستم ها داره . یعنی شما اگه ماشین لرنینگ بخونید (توضیح دادم یکم تو سایت) میبینید ما یه دیتاست داریم بعد میایم داده ها رو آموزش میدیم . تو یادگیری کم عمق ما از شبکه عصبی (کم عمق) یا support vector machine‌ها و… استفاده میکنیم برای دسته بندی و تمایز قاپل شدن بین کلاسهای مختلفی که در داده هامون وجود داره (مثلا این عکس سرطان هست و فلان عکس سرطان نیست یا مثلا تو پیش گویی ها مثل اینکه قیمت مسکن تو ده سال اخیر داده میشه بعد میگه اگه زیربنا انقدر باشه قیمت چقدر میشه و …) همه اینا یادگیری هستن اما چون از روشهای غیرعمیق استفاده میکردن میگن روش کم عمق. معمولا تا قبل از یادگیری عمیق رسم بر این بود که تو این روشها ما خودمون باید میومدیم مهندسی ویژگی میکردیم و یکسری الگوها و یا معادلات برای کشف ارتباط تو دادها پیدا میکردیم و بعد با استفاده از چیزایی که گفتم مدلمون رو آموزش میدادیم. تو یادگیری عمیق خود سیستم میاد مهندسی ویژگی رو انجام میده ما دخالتی نداریم . برای همین هم خیلی خیلی مورد توجه قرار گرفته و نتایج بسیار عالی ای رو سبب شده .تو یادگیری عمیق ما از یه سلسله مراتب از ویژگی ها استفاده میکنیم (سیستم استفاده میکنه ) تا به نتیجه مورد نظر برسه و وجود این سلسله مراتب حیاتی هست.داشت یادم میرفت! یه نکته بدیهی هم تو اسم این روش هست کم عمق هست مثلا شبکه عصبی هم در یادگیری عمیق کاربرد داره هم در یادگیری کم عمق! فرقشون چیه؟‌درسته در عمقشون! در اصل یادگیری عمیق الان بوجود نیومده! تو دهه ۸۹ و ۹۰ هم بوده منتها بخاطر مشکلاتی که بعدا توضیح میدیم(مهمترینش نبود سخت افزار مناسب و الگوریتم های مورد نیاز) نمیشد از یه حد خاصی تعداد لایه های شبکه عصبی رو بیشتر کرد و اونجا متوقف میشد تا اینکه چند سال پیش (تقریبا ۲۰۰۶ به بعد فکر کنم) بود که اون مشکلات برطرف شد و نهایتا از ۲۰۱۰ ۲۰۱۱ و خصوصا خصوصا ۲۰۱۲ با شدت تمام استارتش خورد. (تو سال ۲۰۱۱  اندرو ان جی به اتفاق یکی از کارکنان گوگل یه شبکه عصبی رو اموزش دادن که تونست فقط با دیدن فیلمهای یوتیوب ! بفهمه یه گربه چه شکلیه!؟ البته اونا فکر کنم از ۱۶ هزار کامپیوتر استفاده کرده بودن. سال ۲۰۱۲ بود که در اصل الکس کریژوسکی و جف هینتون معروف (یکی از پایه گذاران یادگیری عمیق دنیا ) تونستن با استفاده از کارت گرافیک یه شبکه کانولوشنی رو اموزش بدن و نتایج حیرت انگیزی رو تا اون موقع بدست بیارن و اینطور بقیه محققا با دیدن این نتیجه به این سمت هجوم اوردن)
شبکه های کانولوشنی هم نوعی از شبکه های عصبی هستن که از شبکه های کاگنیترون تو دهه ۸۰ میلادی الهام گرفته شدن و تو این شبکه سعی شده روش مغز در شناسایی تصاویر رو بنوعی پیاده بشه . (از مغز انسان الهام گرفتن!) . و تقریبا کلیات شبکه  عصبی درموردش صدق میکنه بجز اینکه یکسری تقاوت هایی داره . مثلا در شبکه های عصبی ما اتصالات کامل داشتیم اینجا نداریم(نه اینکه نتونیم ولی معمولش اینه که اشتراک پارامتر داریم توضیحات بعدا تو سایت میدم) . تو شبکه عصبی ما لایه هامون مثل لیست بودن یک بعدی بودن . اما تو شبکه کانلووشن لایه کانولوشن چند بعدی هستن. و یکسری لایه ها و عملیاتهای خاص خودشو داره که توضیح بیشترش بمونه برای بعد.
امروزه برای استفاده از دیپ لرنینگ حتما حتما به یه کارت گرافیک انویدیا نیاز دارید اونم از نوع قویش!‌ (کارتهای AMD بصورت غیررسمی فقط در Torch پشتیبانی میشن تا الانی که این متن رو مینویسم.بقیه فریم ورکهای معروف همه از اندویا استفاده میکنن چون کتابخونه عالی ای داره که سرعت اموزش رو بشدت بالا میبره.) ( احتمالا طی یکی دو سال آینده کارتهای AMD‌هم پشتیبانی میشن ولی فعلا بخاطر cuda‌و cudnn انویدیا که شدیدا سرعت رو عالی میکنه همه کتابخونه ها و ابزارهای پدر مادر دار از اون استفاده میکنن . در این مورد بیشتر توضیح میدم بعدا تو بخش پیش نیازهای سخت افزاری دیپ لرنینگ). البته میشه از سی پی یو هم استفاده کرد البته فقط در دو صورت!‌۱. برای تست چند دقیقه ای که ببینید اصلا چطوریه!‌۲. کلا عمر حضرت نوح دارید و میخواید کاری که با کارت گرافیک مثلا ۱ ساعته انجام میش با سی پی یو (اونم از نوع خیلی عالیش )‌۱۰ تا ۲۰ ساعته حداقلش انجام بدید!!

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

آپدیت :

Caffe هم مثل Torch یه نسخه بتا برای OpenCL زده که از بخش ابزارها میتونید دانلود کنید. احتمالا طی امسال این پشتیبانی ها بیشترم بشه (انشاالله)

در پناه حق موفق و سربلند باشید

سید حسین حسن پور متی کلایی ۱۶ اسفند ۱۳۹۴

سید حسین حسن پور متی کلایی

درباره ی سید حسین حسن پور متی کلایی

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

مقالات مرتبط

10 دیدگاه در “یادگیری عمیق یا همون Deep learning !

    1. سلام .
      درسته OpenCL‌معادل cudda‌ تو کارتهای AMD هست اما تا جایی که من اطلاع دارم هیچ چارچوب مطرحی از کارتهای AMD‌ (و قايدتا OpenCL )پشتیبانی نمیکنه بصورت رسمی (البته Torch‌یه ورژن تو این زمینه ارایه کرده.)اما هنوز خیلی مونده تا پشتیبانی مثل کارتهای انویدیا باشه و هنوز نسخه رسمی اون فقط با کارتهای انویدیا هست.
      سرعت OpenCL‌هم نسبت به cudda‌ انگار پایین تر هست.
      اگه از کارتهای ای ام دی پشتیبانی بشه فکر کنم خیلی خوب بشه چون از لحاظ قیمتی مقرون به صرفه تر از کارتای انویدیا هستن ولی فعلا جواب نه هست.
      البته مگر اینکه یکی خودش بخواد یه چارچوب تو این زمینه بنویسه با OpenCL‌که اون بحثش جداس.

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

  2. سلام.
    موضوع من پروژه استفاده از DNN در تشخیص سرطان است. چند تا سوال دارم: اول اینکه در مطلب tools داریم که بتونم با اون این الگوریتم رو روی پروژه م تست بگیرم؟آیا بدون نصب اپ مثل Caffe و .. نمیتونم خروجی ها رو تولید کنم؟ دوم اینکه شما چند مدل برای این الگوریتم عنوان کردید، کار من هم تصویرکاوی هست. آیا مقالاتی برای انجام این کارها سراغ دارید؟ من چندین الگوریتم پیدا کردم اما روش اونها عمیق نیست و خیلی زیاد درگیر پیدا کردن ابزارها شدم و هنوز به نتیجه خوی نرسیدم. سوم اینکه با یک سیستم معمولی میتونم خروجی تولید کنم؟ هیچ سخت افزار غولی برای این کار در دسترس ندارم!!!!
    ممنون
    بسیار سایت مفید و خوبی دارید

    1. سلام
      متلب تو دیپ لرنینگ زیاد کاربرد نداره پتشیبانیش خیلی ضعیفه. تو این حوزه پایتون حرف اول رو میزنه (به متلب هم خیلی نزدیکه مشکلی ندارید)
      برای کارکردن و تحقیق میتونید Caffe رو نصب کنید و بعد یا از رپر متلبش استفاده کنید (یعنی از کتابخونه caffe در متلب استفاده کنید (پیشنهاد نمیکنم چون مستندات خوبی نداره)) یا اینکه از رپر پایتون استفاده کنید یا زبان سی++ یا اینکه اصلا از کد نویسی استفاده نکنید (که اموزش این تو سایت هست)
      من خودم خیلی زیاد پیشنهاد میکنم برید سراغ تنسورفلو که لینکش در بخش ابزارها اومده چون مستندات بسیار خوب و عالی ای داره و خیلی خیلی هم گسترده تر از Caffe هست . پشتیبانی خیلی خوبی هم داره.
      برای تنسورفلو میتونید از پایتون و C++ استفاده کنید.
      برای سرطان خیلی از دیپ لرنینگ استفاده شده و میشه یه سرچ ساده کنید نتایج خوبی میتونید پیدا کنید.(شبکه کانولوشن رو میتونید تو سرچتون لحاظ کنید تا نتایج بیشتری بگیرید)
      برای کار تو این زمینه باید یه سیستم قوی داشته باشید (تاکید روی کارت گرافیک هست. بقیه سیستم مثل سی پی یو یا رم معمولی باشه ایرادی نداره اما یه کارت گرافیک متوسط به بالا صد در صد نیازه)
      چون بحث تحقیقات هست ما میگیم کارت قوی ، وگرنه به اجرا بخوایید بگید با یه کارت متوسط مثل GTX750 هم میشه یکسری مدلها رو اجرا کرد اما زمان زیادی ممکنه صرف اموزش بشه . من خودم ابتدا یه کارت گرافیک متوسط مثل GTX750 داشتم با ۲ گیگ رم (کارت گرافیک) یه سی پی یو پنتیوم اینتل ۳ و ۸ گیگ رم! خیلی از وقتم صرف تست کردن پارامترهای مختلف میشد تا ببینیم نتیجه یه پارامتر چی میشه. این قضیه بشدت شما رو ضعیف میکنه تو تحقیقاتتون . من مجبور شدم برم و یه کارت قوی تر بگیرم تا بتونم مدلهای جدیدتر رو تست کنم .
      ما تو سایت پرسش و پاسخ به چندتا سوال در این زمینه جواب دادیم . الان بهترین خریدی که میتونید از کارتها داشته باشید به نسبت هزینه و کارایی سری GTX1060 هست با ۶ گیگ رم و ۱ میلیون . اگه سری کارتهای ۹۶۰ یا ۹۷۰ دسته دوم (۴ گیگ رم) بتونید گیر بیارید هم خوبه .
      این لینک و این لینک رو ببینید

پاسخ دهید

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