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

<p>یادگیری عمیق در هوش مصنوعی</p>

یادگیری عمیق (Deep Learning) یعنی چی؟ 🧠 (خیلی ساده!)

بذارید ساده بگیم: یادگیری عمیق یه شاخه از یه حوزه بزرگتر به اسم یادگیری ماشین (Machine Learning) هست. خود یادگیری ماشین هم یه تیکه از پازل غول‌پیکریه به اسم هوش مصنوعی (Artificial Intelligence). هدف اصلی یادگیری ماشین، ساختن ماشین‌هاییه که می‌تونن «یاد بگیرن» (و بعضی وقتا هدف نهایی‌شون رسیدن به هوش مصنوعی عمومیه، مثل ربات‌های توی فیلما!).

تو دنیای واقعی و صنعت، از یادگیری عمیق برای حل کردن کلی مسئله خفن استفاده می‌کنن. مثلاً:

  • بینایی ماشین (Computer Vision): کار با عکس و ویدیو، مثل تشخیص چهره. 📸
  • پردازش زبان طبیعی (NLP): کار با متن، مثل همین ChatGPT. 📝
  • تشخیص خودکار گفتار (Speech Recognition): کار با صدا، مثل دستیارهای صوتی. 🎙️

خلاصه که، یادگیری عمیق یه جعبه ابزار خیلی قدرتمند تو دنیای یادگیری ماشینه که بیشتر از همه از «شبکه‌های عصبی مصنوعی» استفاده می‌کنه؛ الگوریتم‌هایی که یه جورایی از ساختار مغز خود ما آدما الهام گرفتن.

هوش مصنوعی

یادگیری ماشین

یادگیری عمیق

همونطور که تو این شکل می‌بینید، هدف همه یادگیری عمیق این نیست که ربات‌های هوشمند و احساساتی مثل تو فیلما بسازن! 😉 خیلی از کاربردهای این تکنولوژی برای حل کردن مشکلات روزمره تو صنعته.

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

خب، حالا که فهمیدیم یادگیری عمیق کجای این نقشه قرار داره، آماده‌اید که بریم سراغ اولین و مهم‌ترین الگوریتم‌هاش؟ 

یادگیری ماشین (Machine Learning) چیه؟ 🐒

«شاخه‌ای از علم که به کامپیوترها این قابلیت رو میده که بدون اینکه مستقیماً براشون برنامه‌نویسی شده باشه، یاد بگیرن.»
— آرتور ساموئل

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

خلاصه کلام، ماشین یه الگو رو مشاهده می‌کنه و سعی می‌کنه اون رو به یه شکلی (مستقیم یا غیرمستقیم) تقلید کنه.

یادگیری ماشین

میمون هر چی می‌بینه، یاد می‌گیره!

اینکه میگیم تقلید «مستقیم» یا «غیرمستقیم»، به دو نوع اصلی یادگیری ماشین اشاره داره: نظارت‌شده (Supervised) و نظارت‌نشده (Unsupervised).

یادگیری نظارت‌شده: تقلید مستقیم 🎯

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

  • استفاده از پیکسل‌های یه عکس برای تشخیص اینکه آیا تو عکس گربه هست یا نه. 🐈
  • استفاده از فیلم‌هایی که لایک کردید برای پیش‌بینی فیلم‌های بیشتری که ممکنه دوست داشته باشید. 🎬
  • استفاده از حرف‌های یه نفر برای پیش‌بینی اینکه اون شخص خوشحاله یا ناراحت. 😊/😞
  • استفاده از داده‌های سنسورهای هواشناسی برای پیش‌بینی احتمال بارندگی. 🌧️
  • استفاده از سنسورهای موتور ماشین برای پیش‌بینی بهترین تنظیمات ممکن برای موتور. 🏎️
  • استفاده از داده‌های اخبار برای پیش‌بینی قیمت سهام در فردا. 📈
  • استفاده از یه عدد ورودی برای پیش‌بینی عددی که دو برابر اونه. (مثلاً ورودی ۵، خروجی ۱۰)
  • استفاده از یه فایل صوتی خام برای پیش‌بینی متن پیاده‌شده اون فایل صوتی. 🎤

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

یادگیری نظارت‌شده (Supervised): تبدیل داده‌ها به طلا! ✨

یادگیری نظارت‌شده، روشی برای تبدیل یک مجموعه داده به یک مجموعه داده دیگه است. مثلاً فرض کنید شما یه مجموعه داده به اسم «قیمت سهام در روز دوشنبه» دارید که قیمت همه سهم‌ها رو در هر دوشنبه طی ۱۰ سال گذشته ثبت کرده. یه مجموعه داده دیگه هم به اسم «قیمت سهام در روز سه‌شنبه» برای همون دوره دارید. یه الگوریتم یادگیری نظارت‌شده می‌تونه یاد بگیره که با استفاده از یکی، اون یکی رو پیش‌بینی کنه.

قیمت‌های دوشنبه

➡️

یادگیری نظارت‌شده

➡️

قیمت‌های سه‌شنبه

اگه شما این الگوریتم رو با موفقیت روی داده‌های ۱۰ سال آموزش بدید، بعدش می‌تونید قیمت سهام هر سه‌شنبه‌ای در آینده رو فقط با داشتن قیمت دوشنبه قبلش، پیش‌بینی کنید! یه لحظه به این فکر کنید... چه قدرت فوق‌العاده‌ای!

یادگیری نظارت‌شده، نون و کره هوش مصنوعی کاربردیه. کارش اینه که چیزی که می‌دونید رو به عنوان ورودی بگیره و اون رو به سرعت به چیزی که می‌خواید بدونید، تبدیل کنه. این قابلیت به ما اجازه میده تا هوش و توانایی‌های انسانی رو به روش‌های بی‌شماری گسترش بدیم.

اکثر کارهایی که با یادگیری ماشین انجام میشه، در نهایت به آموزش یه مدل نظارت‌شده ختم میشه. حتی یادگیری نظارت‌نشده هم معمولاً برای کمک به ساخت یه مدل نظارت‌شده دقیق‌تر انجام میشه.

یادگیری نظارت‌نشده (Unsupervised): کشف الگوهای پنهان! 🕵️‍♂️

یادگیری نظارت‌نشده هم مثل نظارت‌شده، یه مجموعه داده رو به یه مجموعه داده دیگه تبدیل می‌کنه. اما تفاوت بزرگ اینجاست: مجموعه داده خروجی، از قبل مشخص یا شناخته شده نیست! برخلاف یادگیری نظارت‌شده، اینجا هیچ «جواب درستی» وجود نداره که بخوایم مدل اون رو تقلید کنه. ما فقط به الگوریتم میگیم: «برو تو این داده‌ها الگو پیدا کن و بهم بگو چی پیدا کردی!»

مثلاً، خوشه‌بندی (Clustering) یه نوع یادگیری نظارت‌نشده است. خوشه‌بندی، یه سری داده رو به یه سری برچسب خوشه تبدیل می‌کنه. اگه مدل ۱۰ تا خوشه پیدا کنه، معمولاً این برچسب‌ها اعداد ۱ تا ۱۰ هستن. هر داده بر اساس اینکه تو کدوم خوشه قرار گرفته، یه شماره می‌گیره. پس یه عالمه داده، تبدیل میشه به یه عالمه برچسب عددی.

چرا برچسب‌ها عدد هستن؟ چون الگوریتم به شما نمیگه این خوشه‌ها چی هستن! از کجا باید بدونه؟ اون فقط میگه: «هی دانشمند! من یه ساختاری پیدا کردم. به نظر میرسه تو داده‌هات چندتا گروه وجود داره. بیا، ایناهاش!»

لیست داده‌ها

➡️

یادگیری نظارت‌نشده

➡️

لیست برچسب‌ها

یه خبر خوب! شما می‌تونید با خیال راحت، همین ایده «خوشه‌بندی» رو به عنوان تعریف اصلی یادگیری نظارت‌نشده تو ذهنتون نگه دارید. با اینکه شکل‌های مختلفی از یادگیری نظارت‌نشده وجود داره، اما همه اون‌ها رو میشه یه جورایی نوعی از خوشه‌بندی در نظر گرفت.

یه مثال باحال از خوشه‌بندی:

فرض کنید این لیست کلمات رو به یه الگوریتم نظارت‌نشده میدیم:

[توله سگ، پیتزا، بچه گربه، هات داگ، برگر]

الگوریتم ممکنه این خروجی رو به ما بده:

[۱، ۲، ۱، ۲، ۲]

با اینکه الگوریتم به ما نگفته اسم خوشه‌ها چیه، شما می‌تونید حدس بزنید چطوری کلمات رو خوشه‌بندی کرده؟ (جواب: ۱ == بامزه، ۲ == خوشمزه! 😋)

```

یه دسته‌بندی دیگه: پارامتریک در مقابل غیرپارامتریک

تو بخش‌های قبلی، الگوریتم‌های یادگیری ماشین رو به دو گروه نظارت‌شده و نظارت‌نشده تقسیم کردیم. حالا می‌خوایم همین الگوریتم‌ها رو از یه زاویه دیگه نگاه کنیم و به دو گروه پارامتریک (Parametric) و غیرپارامتریک (Nonparametric) تقسیم کنیم.

پس در واقع، ما چهار نوع کلی الگوریتم داریم:

نظارت‌شده / نظارت‌نشده
پارامتریک / غیرپارامتریک

دسته‌بندی قبلی (نظارت) در مورد نوع الگویی بود که یاد گرفته میشه، اما این دسته‌بندی جدید در مورد روشیه که یادگیری ذخیره میشه و اغلب، روش خودِ یادگیریه.

یه تعریف خیلی ساده و خودمونی: یادگیری پارامتریک مثل آزمون و خطاست، در حالی که یادگیری غیرپارامتریک بیشتر شبیه شمردن و احتمالاته.

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

یادگیری نظارت‌شده پارامتریک: یادگیری با پیچ‌های تنظیم! ⚙️

ماشین‌های یادگیری نظارت‌شده پارامتریک، ماشین‌هایی هستن که یه تعداد پیچ تنظیم (Knob) ثابت دارن (این همون بخش پارامتریک ماجراست) و یادگیری با چرخوندن این پیچ‌ها اتفاق می‌افته.

داده ورودی میاد، بر اساس زاویه این پیچ‌ها پردازش میشه و به یه پیش‌بینی تبدیل میشه.

داده ورودی

➡️

ماشین با پیچ‌های تنظیم

➡️

پیش‌بینی

یادگیری با چرخوندن این پیچ‌ها به زاویه‌های مختلف انجام میشه. فرض کنید می‌خواید احتمال قهرمانی یه تیم فوتبال رو پیش‌بینی کنید. مدل اول داده‌ها رو می‌گیره (مثلاً آمار برد و باخت تیم) و یه پیش‌بینی می‌کنه (مثلاً ۹۸٪ شانس قهرمانی). بعد، مدل می‌بینه که آیا اون تیم واقعاً قهرمان شد یا نه. بعد از اینکه جواب درست رو فهمید، الگوریتم یادگیری، پیچ‌ها رو آپدیت می‌کنه تا دفعه بعدی که همین داده‌ها رو دید، پیش‌بینی دقیق‌تری بکنه.

شاید «پیچِ آمار برد و باخت» رو بیشتر کنه، چون پیش‌بینی‌گر خوبی بوده. و برعکس، شاید «پیچِ میانگین تعداد انگشتان پای بازیکنان» رو کمتر کنه، چون داده به درد نخوری بوده! اینطوریه که مدل‌های پارامتریک یاد می‌گیرن!

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

سه مرحله یادگیری نظارت‌شده پارامتریک

  1. مرحله ۱: پیش‌بینی
    همونطور که گفتیم، اول داده‌ها (آمار تیم) وارد ماشین میشن و ماشین یه پیش‌بینی می‌کنه (مثلاً ۹۸٪ شانس برد).
  2. مرحله ۲: مقایسه با واقعیت
    حالا پیش‌بینی (۹۸٪) رو با جواب واقعی مقایسه می‌کنیم. فرض کنید تیم باخت! (یعنی جواب واقعی ۰٪ بود). مقایسه میشه این:
    پیش‌بینی: 98% > واقعیت: 0%
    اینجا مدل می‌فهمه که اگه ۰٪ پیش‌بینی می‌کرد، کاملاً درست گفته بود. ما می‌خوایم ماشین دقیق باشه، پس میریم مرحله بعد.
  3. مرحله ۳: یادگیری (چرخوندن پیچ‌ها)
    تو این مرحله، الگوریتم با توجه به اینکه چقدر اشتباه کرده (۹۸٪) و داده ورودی چی بوده، پیچ‌ها رو می‌چرخونه تا دفعه بعدی پیش‌بینی دقیق‌تری بکنه. هر پیچ، حساسیت مدل به یکی از داده‌های ورودی رو نشون میده. این همون چیزیه که موقع «یادگیری» تغییر می‌کنه.

یادگیری نظارت‌نشده پارامتریک: گروه‌بندی با پیچ‌های تنظیم!

این نوع یادگیری هم از یه روش خیلی مشابه استفاده می‌کنه. یادتونه که یادگیری نظارت‌نشده کارش گروه‌بندی داده‌ها بود؟ اینجا هم از پیچ‌های تنظیم برای این کار استفاده میشه. معمولاً برای هر گروه چندتا پیچ تنظیم داریم که هر کدوم، تمایل داده ورودی به اون گروه خاص رو نشون میدن.

مثلاً فرض کنید می‌خوایم داده‌هامون رو به سه گروه تقسیم کنیم. مدل برای هر داده ورودی، یه احتمال عضویت تو هر کدوم از این سه گروه رو به ما میده:

داده ورودی: [موقعیت: خانه، تعداد تماشاگر: ۱۰۰ هزار]

خروجی مدل (احتمال عضویت):

  • گروه ۱: ۹۴٪
  • گروه ۲: ۱٪
  • گروه ۳: ۵٪

اینجا هم مدل با چرخوندن پارامترها و پیچ‌های تنظیم یاد می‌گیره که داده‌های ورودی رو به بهترین شکل ممکن به گروه‌های مشترکشون تبدیل کنه.

یادگیری غیرپارامتریک: یک دفترچه خاطرات هوشمند! 📖

خب، می‌رسیم به یادگیری غیرپارامتریک. می‌دونم توضیحات قبلی شاید یکم گنگ بوده باشه. پس بیاید کلاً اون مثال‌های قبلی رو فراموش کنیم و با یک دید کاملاً جدید و داستانی بهش نگاه کنیم.

برای فهمیدن این مدل، بهترین راه اینه که به جای فکر کردن به «پیچ‌های تنظیم»، بهش مثل یک «کتاب قانون هوشمند» یا یک «دفترچه خاطرات» نگاه کنیم که با دیدن هر داده جدید، یک قانون یا خاطره جدید بهش اضافه میشه.

فرض کنید ما می‌خوایم یک مدل بسازیم که قیمت یک خانه را بر اساس محله‌ای که در آن قرار دارد، پیش‌بینی کند.

داستان دفترچه خاطرات مدل ما:

خاطره اول: مدل ما اولین خانه را می‌بیند. «یک خانه در محله الف به قیمت ۵ میلیارد تومان.»
مدل ما چیکار می‌کنه؟ یک صفحه جدید در دفترچه‌اش باز می‌کنه، اسمش رو میذاره «محله الف» و توش می‌نویسه: «میانگین قیمت: ۵ میلیارد.»
در این لحظه، مدل ما فقط یک پارامتر داره: میانگین قیمت محله الف.

خاطره دوم: مدل خانه بعدی را می‌بیند. «یک خانه دیگر در محله الف به قیمت ۶ میلیارد تومان.»
مدل به دفترچه‌اش نگاه می‌کنه. صفحه «محله الف» رو پیدا می‌کنه و قانونش رو آپدیت می‌کنه: «میانگین قیمت: (۵+۶)/۲ = ۵.۵ میلیارد.»
تعداد پارامترهای ما (تعداد صفحات دفترچه) هنوز یکی است. فقط اطلاعات داخلش دقیق‌تر شد.

خاطره سوم (نکته کلیدی اینجاست!): حالا مدل ما یک خانه در یک محله جدید می‌بیند. «یک خانه در محله ب به قیمت ۱۰ میلیارد تومان.»
مدل ما اینجا چیکار می‌کنه؟ چون تا حالا چیزی در مورد «محله ب» نشنیده، یک صفحه کاملاً جدید در دفترچه‌اش باز می‌کنه! اسمش رو میذاره «محله ب» و توش می‌نویسه: «میانگین قیمت: ۱۰ میلیارد.»

دیدید چی شد؟ با اومدن یک نوع داده جدید (یک محله جدید)، مدل ما مجبور شد ساختار خودش رو بزرگ‌تر کنه و یک پارامتر جدید (یک صفحه جدید) به خودش اضافه کنه. تعداد پارامترهای ما از یک به دو افزایش پیدا کرد!

این یعنی یادگیری غیرپارامتریک!

تعداد پارامترها (تعداد صفحات دفترچه ما) از قبل مشخص نیست و بسته به پیچیدگی و تنوع داده‌ها، رشد می‌کنه. اگه ۱۰۰ تا محله مختلف بهش بدیم، دفترچه ما ۱۰۰ تا صفحه (۱۰۰ پارامتر) خواهد داشت.

مقایسه با مدل پارامتریک (ماشین با پیچ‌های ثابت)

یادتونه مدل پارامتریک چطور بود؟ اون مثل یک ماشین با تعداد ثابتی پیچ تنظیم بود. اگه می‌خواستیم همین مسئله قیمت خانه رو با یک مدل پارامتریک حل کنیم، از اول یک فرمول ثابت داشت. مثلاً:

قیمت = (پیچ تنظیم ۱ * متراژ) + (پیچ تنظیم ۲ * تعداد اتاق خواب)

این مدل اصلاً براش مهم نیست اسم محله چیه! فقط دو تا پیچ تنظیم داره و سعی می‌کنه با چرخوندن همین دو تا پیچ، بهترین فرمول رو برای همه خانه‌ها، از هر محله‌ای که باشن، پیدا کنه. چه شما بهش داده از ۲ تا محله بدید، چه از ۲۰۰ تا محله، تعداد پیچ‌های تنظیمش همیشه دوتاست و تغییر نمی‌کنه.

جمع‌بندی تفاوت:

  • پارامتریک ⚙️: ساختار ثابت (تعداد پیچ‌ها مشخص). یادگیری یعنی تنظیم کردن این پیچ‌ها.
  • غیرپارامتریک 📖: ساختار انعطاف‌پذیر (تعداد صفحات دفترچه نامشخص). یادگیری یعنی اضافه کردن اطلاعات و قوانین جدید.

و نکته مهم برای ما اینه که بدونیم یادگیری عمیق (Deep Learning)، با اون همه پیچیدگیش، جزو دسته پارامتریک حساب میشه. چون شما از اول ساختار شبکه عصبی (تعداد لایه‌ها و نورون‌ها که همون پیچ‌های تنظیم ما هستن) رو مشخص می‌کنید و مدل فقط اون‌ها رو تنظیم می‌کنه.