رفتن به محتوا

جلسه‌ی ۱: از یادگیری ماشین تا اولین نورون مصنوعی

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

این صفحه مسیر جلسه را به ترتیب نشان می‌دهد. توضیح کامل هر مبحث در صفحه‌ی خودش است.

۱. یادگیری عمیق کجای هوش مصنوعی است؟

Section titled “۱. یادگیری عمیق کجای هوش مصنوعی است؟”

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

ادامه‌ی مطلب: هوش مصنوعی، یادگیری ماشین و یادگیری عمیق

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

ادامه‌ی مطلب: انواع یادگیری ماشین

کدهای دوره در Jupyter Notebook نوشته شده‌اند. فایل‌های نوت‌بوک پسوند .ipynb (مخفف Interactive Python Notebook) دارند و با پایتون معمولی اجرا نمی‌شوند. سه مزیت دارند: توضیح و تصویر کنار کد می‌آید، خروجی هر سلول ذخیره می‌ماند، و می‌شود بخشی از کد را بارها تغییر داد و اجرا کرد بدون اینکه کارهای سنگین قبلی (مثل خواندن دیتاست) تکرار شوند.

برای اجرا روی سیستم خودتان:

  1. مخزن ML-notebooks را با git clone یا از دکمه‌ی سبز Code و گزینه‌ی Download ZIP دریافت کنید.

  2. در ویندوز، پوشه را باز کنید، در نوار آدرس بالای پنجره کلیک کنید، cmd بنویسید و Enter بزنید تا خط فرمان در همان پوشه باز شود.

  3. کتابخانه‌ها را با pip (مخفف Package Installer for Python) نصب کنید:

    Terminal window
    pip install notebook numpy matplotlib pillow scipy opencv-python scikit-learn
  4. با دستور jupyter notebook محیط را باز کنید. Jupyter در مرورگر باز می‌شود ولی به اینترنت نیاز ندارد.

اگر کارت گرافیک ندارید، سرویس‌های ابری مثل Kaggle و Google Colab یا سرویس‌های داخلی، نوت‌بوک را با پردازنده‌ی گرافیکی اجرا می‌کنند. برای این جلسه سیستم معمولی کافی است.

با نوت‌بوک 02_Intro2image دیدیم که تصویر یک آرایه‌ی سه‌بعدی (ارتفاع، عرض، کانال) از عددهای ۰ تا ۲۵۵ است. پیکسل خواندیم، تصویر بریدیم، بخشی از آن را سیاه کردیم، سیاه‌وسفیدش کردیم و به یک دام مهم رسیدیم: سرریز uint8.

ادامه‌ی مطلب: تصویر در پایتون

با نوت‌بوک 03-persian-digit-dataset مجموعه‌ی ارقام دست‌نویس فارسی هدی را خواندیم، با squeeze بعد اضافه را حذف کردیم، تصویرها را ۵×۵ کردیم و به بردار ۲۵تایی تبدیل کردیم. همه‌ی این کارها در فایل dataset.py و تابع load_hoda جمع شد.

ادامه‌ی مطلب: دیتاست هدی

با مثال قد و وزن، الگوریتم نزدیک‌ترین همسایه و مشکلش با داده‌ی پرت را دیدیم و به k نزدیک‌ترین همسایه رسیدیم. بعد در نوت‌بوک 04-persian-digit-classification-with-knn با scikit-learn روی ارقام هدی به دقت ۹۶ درصد رسیدیم، اشتباه‌ها را بررسی کردیم و مدل را روی رقمی که خودمان در Paint کشیدیم امتحان کردیم.

ادامه‌ی مطلب: الگوریتم KNN

۷. پیدا کردن رقم‌ها در عکس واقعی

Section titled “۷. پیدا کردن رقم‌ها در عکس واقعی”

روی عکس موبایل از یک کاغذ، با آستانه‌گذاری، معکوس کردن و الگوریتم مؤلفه‌های همبند OpenCV رقم‌ها را پیدا کردیم، بریدیم و با همان مدل KNN تشخیص دادیم.

ادامه‌ی مطلب: مؤلفه‌های همبند

۸. چرا KNN برای تصویر کافی نیست؟

Section titled “۸. چرا KNN برای تصویر کافی نیست؟”

جابه‌جایی چند پیکسل، عینک، نور و زاویه، فاصله‌ی پیکسلی را کاملاً به هم می‌زند. برای تصویرهای واقعی به شبکه‌های عصبی و بعدتر شبکه‌های کانولوشنی نیاز داریم؛ و برای فهمیدن آن‌ها اول باید خود شبکه‌ی عصبی را بشناسیم. از این‌جا اسلایدهای بخش اول شروع می‌شود (صفحه‌های ۱ تا ۳۶ در این جلسه).

۹. شبکه‌ی عصبی تا تابع هزینه

Section titled “۹. شبکه‌ی عصبی تا تابع هزینه”
  • پرسپترون: ورودی، وزن، بایاس و تابع پله؛ یک نورون یعنی یک مرز خطی.
  • شبکه‌ی چندلایه: لایه‌ی ورودی، پنهان و خروجی، و اینکه چرا تنظیم پارامترها باید خودکار باشد.
  • توابع فعالیت: چرا بدون تابع فعالیت شبکه فقط یک خط است؛ سیگموید، tanh و ReLU.
  • تابع هزینه: MAE، MSE و آنتروپی متقاطع.

گرادیان کاهشی و پس‌انتشار خطا: چطور شبکه با کمک مشتق، وزن‌هایش را طوری تغییر می‌دهد که تابع هزینه کم شود.

اول کوییز را بزنید تا ببینید مفهوم‌ها جا افتاده یا نه. بعد تمرین سرریز uint8 را همین‌جا حل کنید و در آخر نوت‌بوک تکلیف را دانلود کنید: نمودار انتخاب k و پیدا کردن رقم‌ها در عکس.

کوییز ۱۰ سؤالی

کوییز جلسه‌ی ۱

ده سؤال از مفهوم‌های این جلسه. بعد از ثبت پاسخ، توضیح هر سؤال را می‌بینید.

  1. کدام جمله درباره‌ی رابطه‌ی هوش مصنوعی، یادگیری ماشین و یادگیری عمیق درست است؟

  2. کدام مورد از دلیل‌هایی نبود که شبکه‌های عصبی تا سال‌ها کم‌عمق ماندند؟

  3. پیش‌بینی «قیمت یک خانه بر اساس متراژ و محله» چه نوع مسئله‌ای است؟

  4. بانک می‌خواهد بدون داشتن برچسب، تراکنش‌های عجیب و غیرعادی را پیدا کند. این کار در کدام دسته است؟

  5. چرا معمولاً در KNN به جای نزدیک‌ترین همسایه، چند همسایه (مثلاً k=3) را نگاه می‌کنیم؟

  6. آرایه‌ی تصویری با shape برابر (425, 640, 3) چه ابعادی دارد؟

  7. خروجی این کد چیست؟

    a = np.array([250], dtype=np.uint8)
    b = np.array([10], dtype=np.uint8)
    print(a + b)
    
  8. نقش بایاس در پرسپترون چیست؟

  9. اگر در یک شبکه‌ی چندلایه تابع فعالیت لایه‌های پنهان را حذف کنیم، چه می‌شود؟

  10. کدام جمله‌ها درباره‌ی تابع هزینه درست‌اند؟

    ممکن است بیش از یک گزینه درست باشد.

تمرین تعاملی

سیاه‌وسفید کردن بدون سرریز

تابع to_gray(img) را بنویسید که تصویر رنگی uint8 با شکل (h, w, 3) را بگیرد و تصویر خاکستری با شکل (h, w) برگرداند؛ مقدار هر پیکسل میانگین سه کانال است.

مراقب باشید: جمع کردن مستقیم سه کانال uint8 از ۲۵۵ رد می‌شود و دور می‌زند. مثلاً ‎250 + 10‎ در uint8 می‌شود ۴.

راهنمایی

دو راه دارید: هر کانال را جدا بر ۳ تقسیم کنید و بعد جمع کنید، یا اول نوع داده را با img.astype(np.int32) بزرگ کنید، بعد جمع و تقسیم کنید.

Ctrl + Enter برای اجرا

تکلیف نوت‌بوک از ۱۰ نمره

انتخاب k و پیدا کردن رقم‌ها در عکس

این تکلیف دو بخش دارد:

  1. انتخاب k (۴ نمره): مدل KNN را روی دیتاست هدی با k از ۱ تا ۱۵ آموزش دهید، دقت هر k را روی داده‌ی آزمون حساب کنید، نمودار «دقت بر حسب k» را رسم کنید و kای را که بیشترین دقت را دارد گزارش کنید.
  2. پیدا کردن رقم‌ها در عکس (۴ نمره): عکسی از یک برگه داریم که چهار رقم دست‌نویس رویش نوشته شده. عکس را دودویی و معکوس کنید، با مؤلفه‌های همبند رقم‌ها را جدا کنید و با همان مدل KNN تشخیص دهید.

دو نمره‌ی دیگر برای این است که همه‌ی سلول‌ها به ترتیب و بدون خطا اجرا شده باشند. نوت‌بوک آماده است و فقط باید جاهای خالی را پر کنید؛ دیتاست و عکس هنگام اجرا خودکار دانلود می‌شوند.

  1. دانلود نوت‌بوک تمرین
  2. نوت‌بوک را در Jupyter، VS Code یا Colab باز کنید و جاهای خالی را کامل کنید. در آخر همه‌ی سلول‌ها را از اول اجرا کنید (Restart & Run All) و فایل را با خروجی‌ها ذخیره کنید؛ نوت‌بوک روی سرور اجرا نمی‌شود و همین خروجی‌ها بررسی می‌شوند.کتابخانه‌های لازم: numpy, scipy, opencv-python, scikit-learn, matplotlib

مقدمه‌ای بر یادگیری عمیق، آموزش رایگان و فارسی یادگیری عمیق.