درسنامه ی یادگیری عمیق – قسمت اول- مقدمه

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

الف) کاربران از طریق رابطی که در مرورگر وب یا برنامه تلفن همراه در حال اجرا است با برنامه ارتباط برقرار می کنند.

ب) برنامه ما برای پیگیری وضعیت هر کاربر و نگهداری سوابق معاملات با یک موتور پایگاه داده تجاری تعامل می کند.

ج) در قلب برنامه ما ، منطق کسب و کار برنامه ی ما (ممکن است بگویید مغز) با جزئیات روشمند، اقدام مناسبی را که باید توسط برنامه ی ما در هر شرایط قابل تصور انجام شود ، بیان می کند.

 جهت ساختن مغز برنامه، ما باید برای هر احتمال پیش بینی که ممکن است با آن روبرو شویم، قوانین مناسبی را تدوین کنیم. هر بار که مشتری برای افزودن کالایی به سبد خرید خود کلیک می کند ، ورودی را به جدول پایگاه داده سبد خرید اضافه می کنیم و شناسه ی آن کاربر را با شناسه ی کالای درخواستی مرتبط می کنیم. در حالی که تعداد کمی از توسعه دهندگان بار اول آن برنامه را کاملاً درست طراحی می کنند (زیرا ممکن است آزمایش­هایی برای حل این مسائل ضروری باشد)، در بیشتر موارد ما می توانیم چنین برنامه ای را به صورت ابتدایی و با استفاده از اصول اولیه (که پیش بینی کرده ایم) بنویسیم و قبل از دیدن مشتری واقعی با اطمینان آن را اجرا کنیم. توانایی ما در طراحی سیستم های خودکار با استفاده از اصول اولیه، اغلب در شرایط جدید، یک کار برجسته است. وقتی می توانید راه حل­هایی را طراحی کنید که همیشه و در صد درصد زمان کارساز باشد ، نباید از یادگیری ماشین استفاده کنید.

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

  • برنامه ای بنویسید که وضعیت هوای فردا را با توجه به اطلاعات جغرافیایی، تصاویر ماهواره ای و اطلاعاتی از وضعیت گذشته ی آب و هوایی منطقه، پیش بینی کند.
  • برنامه ای بنویسید که در آن سوالی مطرح شده و در متن آن به صورت فرم آزاد[۱] بیان شده و به درستی به آن پاسخ دهد.
  • برنامه ای بنویسید که بتواند تمام افراد موجود در یک تصویر را شناسایی کند و دور هر کدام از آنها حاشیه ای بگذارد.

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

  1. یک مثال انگیزشی

قبل از شروع نوشتن ، ما نویسندگان این کتاب ، مانند بسیاری از نیروهای کار ، قهوه خوردیم. سوار ماشین شدیم و شروع به رانندگی کردیم. با استفاده از آیفون ، الکس “Hey Siri” را صدا زد و سیستم تشخیص صدای تلفن را بیدار کرد. سپس مو دستور “راهنمایی به کافی شاپ” را داد. تلفن به سرعت رونوشت دستور او را نشان داد. همچنین تشخیص داد که ما راهنمایی می خواهیم و برنامه ی نقشه را برای تحقق درخواست ما راه اندازی کرد. پس از راه اندازی ، برنامه ی نقشه، تعدادی از مسیرها را شناسایی کرد. در کنار هر مسیر ، تلفن همراه، زمان رسیدن پیش بینی شده را به ما نشان می  داد. در حالی که ما این داستان را برای راحتی آموزش ساختیم ، این نشان می دهد که فقط در عرض چند ثانیه ، تعاملات روزمره ما با یک تلفن هوشمند می تواند چندین مدل یادگیری ماشین را درگیر کند.

تصور کنید فقط یک برنامه می نویسید تا به کلمه بیداری مانند “الکسا” ، “OK Google” و “Hey Siri” پاسخ دهید. همانطور که در شکل ۱٫۱٫۱ نشان داده شده است ، سعی کنید آن را به تنهایی و فقط با داشتن یک کامپیوتر ویرایشگر کد در یک اتاق، پیاده سازی و اجرا کنید. چگونه می توانید چنین برنامه ای را از ابتدا بنویسید؟ به آن فکر کنید … مسئله ی سختی است. در هر ثانیه ، میکروفون تقریباً ۴۴۰۰۰ نمونه را جمع آوری می کند. هر نمونه، مقدار دامنه موج صوتی است که اندازه گرفته شده است. چه قاعده ای می تواند از قطعه صوتی خام تا پیش بینی های مطمئن (بله ؛ خیر) در مورد اینکه آیا قطعه حاوی کلمه ی بیداری است یا نه، قابل اعتماد باشد؟ اگر گیر کرده اید نگران نباشید. ما نمی دانیم که چگونه چنین برنامه ای را از ابتدا بنویسیم. به همین دلیل است که ما از یادگیری ماشین استفاده می کنیم.

این ترفند است. بعضی اوقات، حتی وقتی نمی دانیم چگونه به طور صریح به رایانه بگوییم چگونه نگاشتی را از ورودی ها به خروجی ها اجرا کند، با این وجود توانایی انجام کار مورد نظر را خودمان داریم. به عبارت دیگر، حتی اگر نمی دانید چگونه یک کامپیوتر را برای تشخیص کلمه “الکسا” برنامه ریزی کنید، خودتان می توانید آن را تشخیص دهید. با استفاده از این توانایی ، می توانیم یک مجموعه داده عظیم شامل نمونه هایی از صدا جمع آوری کنیم و آنهایی را که حاوی کلمه بیداری هستند، برچسب گذاری کنیم. در روش های یادگیری ماشینی ، ما سعی در طراحی سیستمی برای تشخیص واژه های بیداری نداریم. در عوض ، ما یک برنامه انعطاف پذیر تعریف می کنیم که رفتار آن توسط تعدادی پارامتر تعیین می شود. سپس ما از مجموعه داده برای تعیین بهترین مجموعه ممکن از پارامترها استفاده می کنیم ، پارامترهایی که عملکرد برنامه ما را با توجه به اندازه گیری عملکرد در مورد کارمورد نظر بهبود می بخشند.

شما می توانید پارامترها را به عنوان دکمه هایی در نظر بگیرید که می توانیم آنها را چرخانده و رفتار برنامه را دستکاری کنیم. با رفع پارامترها ، برنامه را مدل می نامیم. به مجموعه تمام برنامه های مجزا (نگاشت های خروجی ورودی) که می توانیم با دستکاری پارامترها تولید کنیم ، خانواده ای از مدل ها گفته می شود. و متا برنامه ای که از مجموعه داده ما برای انتخاب پارامترها استفاده می کند ، الگوریتم یادگیری نامیده می شود.

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

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

همانطور که حدس می زنید ، اگر همه دکمه ها را به صورت تصادفی تنظیم کنیم، بعید است که مدل ما “الکسا” ، “زردآلو” یا هر کلمه انگلیسی دیگری را تشخیص دهد. در یادگیری ماشین، یادگیری فرایندی است که ما می توانیم تنظیمات صحیح دکمه های اعمال رفتار مطلوب از مدل خود را کشف کنیم. به عبارت دیگر، ما مدل خود را با داده ها آموزش می دهیم. همانطور که در شکل ۱٫۱٫۲ نشان داده شده است، روند آموزش معمولاً به شرح زیر است:

۱٫ با یک مدل اولیه تصادفی که نمی تواند کار مفیدی انجام دهد، شروع کنید.

۲٫ برخی از داده های خود را بگیرید (به عنوان مثال ، قطعه های صوتی و برچسب های بله و خیر مربوط).

۳٫ دکمه ها را فشار دهید تا مدل با توجه به این نمونه ها کمتر تغییر کند.

۴- مرحله ۲ و ۳ را تکرار کنید تا مدل عالی شود.

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


[۱]  یعنی سوال به هر قالب و فرم دل خواهی می تواند به برنامه کاربردی ما وارد شود.

[۲] منظور همان هدف مورد نظر است. چیزی که با شنیدن آن، سیستم باید خروجی خاصی را اعلام کند.

مطالب مرتبط

دیدگاهتان را بنویسید

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