مسیر یادگیری هوش مصنوعی از صفر

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

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

من به عنوان کسی که دانشگاه نرفته و در حوزه ی هوش مصنوعی پروژه های مختلفی رو داخل و خارج از کشور انجام دادم،‌ داخل این مقاله Road map یادگیری خودم رو توضیح میدم.

قبل از هر چیزی این موضوع رو mention کنم که این Road map توسط خودم با آزمون خطا به دست اومده و به طور کلی روش تایید شده ای نیست و ممکنه برای همه مناسب نباشه. من صرفا به این حوزه علاقه داشتم و از صفر شروع به یادگیری ریاضیات و آمار و درنهایت الگوریتم های هوش مصنوعی کردم تا به حدی رسیدم که تونستم پروژه های مختلف رو توی این حوزه به سرانجام برسونم.




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

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

به طور مثال، کسی که میخواد یادگیری هوش مصنوعی رو شروع بکنه باید اینطور مسائلی رو برای خودش مطرح کنه و یک deadline برای حل اون مسئله تعیین کنه (این مثال ها دقیقا پروژه های اصلی هستند که من از اول یادگیری اون هارو برای خودم مطرح کردم)

الف) یک ایرانگرد میخواد از تمامی شهر های ایران دیدن کنه، اون سفر خودش رو از مشهد شروع میکنه. کم هزینه ترین مسیر سفر برای بازدید از تمامی شهر ها چه مسیری هست؟

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

  • محاسبات graph
  • الگوریتم های بهینه سازی
  • الگوریتم A*
  • الگوریتم ژنتیک
  • و....

تهیه این لیست حدود سه ماه از من زمان برد ولی مسیر دقیقی برام مشخص بود. برای هر مبحث من اونقدر وقت میذاشتم تا بتونم کاربردش رو داخل مسئله ی ایرانگرد بالا درک کنم و دقیقا متوجه بشم چه اتفاقاتی میفته تا فلان الگوریتم یا فرمول ریاضی یا مفهوم به نزدیک شدن به حل این مسئله کمک کنه.

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

هر چی بیشتر جلو رفتم دیدم تمامی مباحثی که برای این مسئله یاد گرفتم داخل مسائل پیچیده تر به کمک من اومدن و بین اطلاعاتی که به طور پراکنده داخل ذهنم داشتم میتونستم ارتباط برقرار کنم.

ب) یادگیری گیت های منطقی توسط کامیپوتر.

من خیلی به حوزه یادگیری ماشین علاقه داشتم و با مطرح کردن این مسئله تلاش کردم وارد مبحث شبکه های عصبی و Deep learning بشم.

و دقیقا مثل مسئله ی ایرانگرد، تحقیق کردم و یک لیست از مواردی که باید یادبگیرم تهیه کردم.

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

اینبار کار برای من سخت تر بود چون اصلا ریاضیات قویی نداشتم و توی دبیرستان همیشه با کمترین نمره درس های ریاضی رو پاس میکردم. با این حال از ابتدا چند کتاب آموزش ریاضی تهیه کردم و اونقدر مطالعه و تمرین کردم تا به مباحث مورد نظر مسلط شدم (حل این پروژه به دلیل عمق زیادی که داشت حدود ۶ ماه از من زمان گرفت. به طور شبانه روز)

اول با گیت های AND و OR شروع کردم. یک شبکه عصبی ساده با تابع خطی میتونست این گیت هارو یاد بگیره. ولی گیت XOR یک تابع خطی نبود. پس مجبور شدم شبکه های عصبی یک لایه رو تبدیل کنم به شبکه های عمیق تر چند سلولی. روز ها ساعت ها وقتم رو صرف حل کردن معادلات یادگیری شبکه عصبی برای مدارات و گیت های مختلف میکردم. بعد از اینکه دقیقا به نحوه کارکرد شبکه عصبی ساده مسلط شدم و توی این مقطع دیگه هیچ ترسی از شبکه های عصبی نداشتم :)

ج) دسته بندی داده های مختلف

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

باز هم برای خودم یک لیست تهیه کردم که از لیست های قبلی خیلی بزرگتر بود.

  • شبکه های عمیق
  • یادگیری Unsupervised
  • الگوریتم های دسته بندی
  • آماده سازی و جمع اوری دیتا
  • و....

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

د) شناسایی سلول های معیوب به طور Live زیر میکروسکوپ

از اونجایی که اعتماد به نفس بالایی پیدا کرده بودم تصمیم گرفتم داخل شرکتی که اون زمان به عنوان برنامه نویس Full-stack developer و برنامه نویس نرم افزار های ویندوزی و اندرویدی کار میکردم، وارد یکی از پروژه های هوش مصنوعی و بینایی ماشین بشم. این اولین قدم من برای قابل لمس کردن دانشم از هوش مصنوعی بود. (یکی از سخت ترین دوران زندگیم بود چون واقعا I pushed myself to my limits ?)

باز هم شروع به تهیه لیست یادگیری کردم. با این تفاوت که فقط حدود ۳ ماه فرصت داشتم برای ارائه یک راه حل.

شبکه های CNN

اصول پردازش تصویر و بینایی ماشین

الگوریتم های Pattern recognition

و....

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

خوشبختانه «یادگرفتن» رو یاد گرفته بودم و تونستم با جمعاوری دیتاست توسط چند نرم افزار که برای Label گذاری توسعه داده بودم (توسط چند مرکز تخصصی پاتولوژی سلول)، به یک راه حل با دقت قابل قبول برسم.

از این نقطه به بعد تا همین امروز تحقیق و تمرین توی این حوزه رو رها نکردم و درکنار تخصص اصلی خودم (برنامه نویسی backend و cloud computing) هوش مصنوعی رو ادامه دادم و طی چند سال داخل سوئد و هلند هم پروژه هایی با چاشنی هوش مصنوعی انجام دادم. و همینطور موفق شدم چند الگوریتم و روش برای یکسری از مسائل خاص ابداع کنم.

نتیجه گیری

  • با هر سطحی از دانش درمورد ریاضیات و علوم کامپیوتر میشه هوش مصنوعی رو یادگرفت.
  • باید به طور پروژه محور پیش رفت و پشتکار بسیار بالایی داشت. همیشه در حال حل یک مسئله باشید و اولین فرصت خودتون رو درگیر پروژه های real world کنید.
  • همیشه out of box فکر کنید و ذهن خودتون رو محدود به یک راه حل خاص نکنید.
  • تحقیق و تمرین مستمر مهمترین پارامتر ممکن برای حرفه ای شدن توی این حوزه هست.
  • یادگیری ۱۰۰ درصد وجود خارجی نداره. هرچقدر که داخل این اقیانوس پیش برید باز هم میتونه شگفت زدتون بکنه.
  • صبر داشته باشید