کورس یادگیری عمیق آقای Andrew Ng

زمان تقریبی مطالعه 10 دقیقه

سوالات زیادی توسط کاربران فارسی زبان در مورد کورس های جدید یادگیری عمیق آقای Andrew NG مطرح شد،این کورس ها در تاریخ 15 آگوست 2017 به صورت رسمی شروع شدند اما ویدیوها و تمرین ها از همان تاریخ معرفی در وب سایت ایشان، یعنی 8 آگوست در دسترس بودند.در همان روز های اول تعداد زیادی از دانش آموزان و دانشجویان از سراسر دنیا این سری آموزش را به پایان رساندند.بعد از تکمیل این سری آموزش و حل تمرین ها تصمیم گرفتم به صورت خلاصه توضیحات مختصری درباره این کورس و اینکه چه مواردی در این سری آموزش مطرح شده است را برایتان بازگو کنم.

15 آگوست سال 2011 بود که پروفسور استندفورد آقای Andrew NG یک ویدیو در درباره کورس آموزش یادگیری ماشینی در یوتیوب منتشر کرد (لینک ویدیو که مطمئنا بیشتر افرادی که در این حوزه فعالیت میکنند این سری آموزش را دنبال کرده اند. همان روز روزنامه نیویورک تایمز در مورد کورس آموزشی ایشان مطلبی را منتشر کرد متن مقاله این کورس به حدی در بین کاربران دنیا محبوبیت یافت که ایشان به همراه همکارشان آقای Daphne Koller تصمیم گرفتند که سایت [Coursera] (https://www.coursera.org/) را تاسیس کنند.

و حالا دقیقا در 15 آگوست سال 2017 کورس یادگیری عمیق ایشان در اختیار محققین هوش مصنوعی دنیا قرار گرفته است ایشان در می 2014 Coursera را ترک کردند و به شرکت بایدو ملحق شدند .

_config.yml

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

_config.yml

این سری آموزش شامل 5 کورس است که سه کورس آن در حال حاضر در دسترس است و دو کورس دیگر با توجه به نظرات کاربران در اوایل سپتامبر منتشر خواهد شند.ابتدا توضیح مختصری در مورد نحوه ثبت نام میدهم و در ادامه مباحثی که مطرح شده را به صورت خلاصه برایتان بازگو میکنم.

این مجموعه آموزش برای چه افرادی است؟

جواب کوتاه :

برای افراد مبتدی!

جواب بلند:

در صورتی که قبلا کورس یادگیری عمیق دانشگاه استندفورد یا سایر کورس هایی که از سوی دانشگاه های مطرح دنیا، مثل کورس یادگیری عمیق Jeremy Howard که در دانشگاه سانفرانسیسکو تدریس شد را گذرانده مطالب مطرح شده در این مجموعه آموزش برای شما کاملا آشنا یا شاید “مبتدی” به نظر رسد. اگر شما جزء این افراد هستید این مجموعه آموزش مورد جدیدی برای شما نخواهد داشت و در صورتی که علاقه مند به گذراندن این کورس ها باشید فقط یک مرور بر ادبیات گذشته خواهد بود. اما اگر شما جزء افراد دوم هستنید و میخواهید یادگیری عمیق را فرا گیرید، پیشنهاد میکنم ابتدا این کورس ها را بگذرانید و سپس کورس هایی مثل cs231n استندفورد و … برای شروع این مجموعه آموزش نیاز به اطلاعات جزیی در مورد پایتون دارید اما در صورتی که حتی آشنایی اولیه با این زبان برنامه نویسی ندارید مواردی که نیاز است شما از آنها آگاه باشید مثل طریقه کارکردن با کتابخانه numpy ، استفاده از jupyter notebook و غیره توسط Andrew Ng شرح داده خواهند شد. در صورتی که حتی با یادگیری ماشین نیز آشنایی ندارید،این مجموعه آموزشی به گونه ای طراحی شده که موارد ابتدایی یادگیری ماشینی را نیز پوشش میدهد.

و در نهایت ریاضیات!

یادگیری ماشین، برای شروع نیاز به ریاضیات پیچیده ای ندارد، هر فردی با دانش ابتدایی در مورد جبر خطی ،حسابان و کمی آمار و احتمالات (ریاشیات دبیرستان!) میتواند یادگیری ماشینی را شروع کند اما به هیچ وجه نگران نباشد آقای Andrew Ng ریاضیات مورد نیاز را توضیح خواهند داد.شاید مهمترین بخشی که بیشتر درگیر ریاضیات خواهید شد در الگوریتم انتشار رو به عقب (Back propagation ) باشد! قبل از پرداختن به مراحل ثبت نام شاید خواندن مطلبی که در مورد این الگوریتم برایتان تهیه کردم خالی از لطف نباشد.

هر چند کتابخانه های زیادی وجود دارد که عملیات انتشار رو به عقب را به صورت خودکار اجرا میکنند اما به عقیده من تمام افردی که یادگیری ماشینی را دنبال میکنند نیاز است این الگوریتم را یاد بگیرند و منظور من از یادگیری این الگوریتم پیاده سازی حداقل یک شبکه عصبی با چد لایه بدون استفاده از هیچ فریم ورک و فقط با استفاده زا کتابخانه numpy است.به قول Andrej Karpathy الگوریتم back propagation یک انتزاع رخنه گر است. برای شرح دلیل اینکه چرا یک انتزاع رخنه گر بد هست ابتدا خود مفهوم انتزاع رو بایستی تعریف کرد.

فرض کنید که یک مفهوم پیچیده داریم برای ساده سازی این مفهوم با حذف جزییات میتوانیم به آن مفهوم یک عمومیت ببخشیم.این کاری هست که مغز ما روز مره انجام میدهد در نتیجه ما میتوانیم با انبوهی از اطلاعات رابطه برقرار پیدا کنیم. به عنوان یک مثال ساده شما نمی گویید “ لپ تاپ Dell Inspiron 2676 اٌم با دو گیگابایت رم و یک هارد دیسک 512 گیگا بایتی با شماره سریال ….” : در عوض شما میگویید “ لپ تاپ من”. در برنامه نویسی انتزاع به ما این اجازه را میدهد که در سطح بالا فکر کنیم.به عنوان مثال هنگامی که یک عملیات اعتبار سنجی برای یک کاربر انجام میشود تنها چیزی که کاربر میبیند دو جعبه متن نام و کلمه عبور است اما در پشت این دو تعداد زیادی کد وجو دارد که عملیات اعتبار سنجی را انجام میدهند. این یعنی ایجاد یک انتزاع. بدون انتزاع مدیریت هر سیستم پیچیده خیلی سخت خواهد بود.اگر میخواهید احساس کنید که برنامه نویسی بدون انتزاع چه حسی دارد، یک برنامه به زبان اسمبلی بنویسید!

اما چرا “انتزاع رخنه گر” بد است؟

انتزاع رخته گر بدین معنی است که برای استفاده از مفاهیم سطح بالا نیاز است که مفاهیم سطح پایین را بدانید.این یعنی انتزاعی که در این سیستم به کار رفته دچار نقض میباشد. یک انتزاع خوب انتزاعی است که بتواند مفاهیم سطح پایین را به خوبی بپوشاند. به عنوان مثال فرض کنید در حال کارکردن با یک برنامه کاربردی هستید و به پیغام “ Memory location 00FFE133 could not be written to” بر میخورید، واقعا احساس بدی بهمون دست میده! این یک نمونه از انتزاع رخنه گر هست. برای درک اینکه این پیغام خطا چیست، نیاز است ما یک دانش نسبت به چگونگی کار کرد برنامه در سطح پایین داشته باشیم.فکر میکنم متوجه شده باشید که چرا دانستن, چگونگی عملکرد الگوریتم back propagation ضروی است

سال گذشته وقتی کلاس CS231n در استندفورد برگزار شد ایشان تکالیف درسی را به صورتی طراحی کردند که دانشجویان مجبور بودند دو الگوریتم انتشار رو به جلو و عقب را فقط توسط کتابخانه numpy پیاده سازی کنند، هر چند با واکنش هایی از سمت دانشجویان روبرو شد، به عنوان مثال “با وجود فریم ورک هایی مثل تنسورفلو که این عملیات را به صورت خودکار انجام میدهد چه ضرورتی وجود دارد که بخواهیم این کار را به صورت دستی انجام دهیم؟” اما ایشان دلیل محکمی برای این کار داشتند “ الگوریتم back propagation یک انتزاع رخنه گر است”. به عبارتی در ظاهر شاید اینطور به نظر برسد که تعداد زیادی لایه را بر روی هم سوار میکنیم و این لایه ها به صورت اسرار آمیزی روابط بین ورودی و خروجی را یاد میگیرند اما همیشه این فرآیند اینور نخواهد ماند (مشکلاتی از قبیل ناپدید شدن گرادیان، Dying ReLU و …) جزییات بیشتر را در پست آموزش هفته دوم تنسورفلو ارائه خواهم کرد اما در طول این مجموعه آموزش سعی کنید حتما طریقه کارکرد این الگوریتم را فرا گیرید!

روش ثبت نام

این سری آموزش شامل پنج کورس متفاوت است، در صورتی که میخواهید بعد از گذراندن آنها، ازاین سایت یک گواهینامه دریافت کنید هزینه ثبت نام برای اشتراک ماهیانه 49 دلار است، اما در صورتی که میخواهید به صورت رایگان از این مجموعه بهره مند شوید میتوانید به صورت Audit ثبت نام کنید. در صورتی که در مد Audit ثبت نام کنید میتوانید به تمامی ویدیوها دسترسی پیدا کنید،به تمامی سوالاتی که در پایان هر جلسه از شما پرسیده میشود پاسخ دهید،تمرین هایی که در پایان هر هفته از شما خواسته میشود را حل کنید اما امکان submit تمرین ها را ندارید!

برای ثبت نام به صورت Audit بایستی به صورت جداگانه هر کدام از کورس های زیر را باز کنید و ثبت نام کنید:

شبکه های عصبی و یادگیری عمیق

بهبود شبکه های عمیق عصبی:Hyperparameter tuning, Regularization, and Optimization

ساختاربندی پروژه های یادگیری ماشینی

شبکه های عصبی کانولوشنال

مدل های بازگشتی و ترتیبی مثل LSTM و RNN

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

_config.yml

کاربرانی که در ایران هستند فقط در این مرحله نیاز است برای عبور از مرحله ثبت نام از *** شکن استفاده کنند. بعد از گذراندن این مرحله دیگر نیازی به استفاده از آن نمیباشد. در صورتی که از اپلیکیشن اندروید (IOS را چک نکردم) را نصب کنید میتوانید علاوه بر دسترسی به ویدیوها آنها را دانلود کنید و به صورت آفلاین دنبال کنید.

در طول کورس Andrew Ng مطالب را بر روی یک سری اسلاید پیش میبرد و توسط یک خودکار دیجیتال مطالب را شرح میدهد. همچنین زیرنویس برای اکثر ویدئو ها به زیان انگلیسی در دسترس است.

_config.yml

در پایان اکثر ویدیو ها سوالاتی از کاربر پرسیده میشود که در صورت تمایل میتوانید به آنها پاسخ دهید: (در صورتی که ویدیو های هر لکچر را به دقت دنبال کنید پاسخ به این سوالات راحت خواهد بود) در صورتی که در تلاش اول به هر کدام از سوالات به صورت اشتباه پاسخ دادید میتوانید مجددا گزینه دیگری را انتخاب کنید. در برخی از کوییز ها نیاز است برای پاسخ دادن به سوال گزینه های متعددی را انتخاب کنید.

_config.yml

تمرین های برنامه نویسی که در پایان هر هفته از شما خواسته شده توسط Jupyter notebooks  در مرور گر شما قابل اجرا است. در صورتی که میخواهید به صورت لوکال کد ها را اجرا کنید نیاز است ابتدا کد ها و دیتابیس هایی که در سایت قرار داده شده را دانلود کنید سپس Anaconda را نصب و کد های مربوط را اجرا کنید. انجام این تمرین ها به هیچ وجه سخت نیست!به عبارتی این تمرین ها به گونه ای طراحی شده اند که دانش آموز نیاز به ننوشتن فقط چند خط کد در نواحی مشخص شده دارد.(در صورتی که مفهوم vectorization را به خوبی فراگیرید حل این تمرین ها به هیچ وجه سخت نیست)

_config.yml

اگر علاقه مند هستید همین الان شروع کنید، و کلی از یادگیری مطالب جدید لذت ببرید.

سخن پایانی

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

Written on August 16, 2017