جستجو برای:
  • دوره‌های آموزشی
  • وبلاگ
  • آموزش‌های رایگان
    • آموزش پایتون رایگان
    • آموزش یادگیری ماشین رایگان
    • آموزش یادگیری عمیق رایگان
    • آموزش pytorch رایگان
    • آموزش رایگان matplotlib
    • آموزش گوگل کولب
  • نقشه راه AI
  • کلاس خصوصی
  • همکاری با ما💚
  • حساب کاربری
  • اساتید
  • درباره ما
     
    • 0902-546-9248
    • howsam.mail@gmail.com
    آکادمی هوش مصنوعی هوسم
    • دوره‌های آموزشی
    • آموزش‌های رایگان
      • آموزش پایتون
      • آموزش یادگیری ماشین رایگان
      • آموزش یادگیری عمیق رایگان
      • آموزش pytorch رایگان
      • آموزش گوگل کولب
    • نقشه راه AI
    • وبلاگ
    • درباره ما
      • اساتید
      • پشتیبانی
    0
    ورود / عضویت

    بلاگ

    آکادمی هوش مصنوعی هوسم وبلاگ یادگیری عمیق شبکه عصبی کانولوشن

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

    2024/08/02
    ارسال شده توسط سید سجاد اشرفی
    یادگیری عمیق
    46.69k بازدید

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

    فهرست مطالب نمایش
    1. شبکه عصبی کانولوشن (CNN) چیست؟
    2. تاریخچه شبکه عصبی کانولوشن (CNN)
    2.1. گرد و خاک به‌پا کردن شبکه عصبی کانولوشن
    2.2. طوفان شبکه کانولوشن
    3. آشنایی با شبکه عصبی کانولوشن
    3.1. تفاوت شبکه عصبی MLP و کانولوشن
    3.2. حالا نقطه قوت شبکه CNN چیست؟
    3.3. یک معماری ساده از معماری شبکه عصبی کانولوشن
    4. تصویر در پردازش تصویر
    4.1. تصویر سطح خاکستری در پردازش تصویر
    4.2. تصویر رنگی در پردازش تصویر
    4.3. تنسور چیست؟
    5. کانولوشن چیست؟
    5.1. مثال عددی از کانولوشن
    5.2. چرا سایز خروجی کانولوشن کوچک شد؟!
    5.3. کانولوشن زیر ذره‌بین
    5.3.1. نکته اول
    5.3.2. نکته دوم
    5.3.3. نکته سوم
    5.4. کانولوشن با ورودی سه‌بعدی
    6. لایه کانولوشن در شبکه عصبی کانولوشن (Convolutional Layer)
    6.1. چرا یک لایه کانولوشنی نیاز است؟
    6.2. نمایش لایه کانولوشن
    6.3. تعداد فیلتر در لایه کانولوشن
    6.4. اندازه فیلتر در لایه کانولوشن
    6.5. اندازه پدینگ (padding) در لایه کانولوشن
    6.6. اندازه stride در لایه کانولوشن
    7. لایه غیرخطی در شبکه عصبی کانولوشن (Activation Function)
    8. لایه پولینگ در شبکه عصبی کانولوشن (Pooling Layer)
    9. طراحی شبکه عصبی کانولوشن ساده
    10. لایه فولی کانکتد در شبکه عصبی کانولوشن (Fully Connected Layer)
    11. سوالات رایج درباره شبکه عصبی کانولوشن
    12. دریافت PDF آموزش شبکه عصبی کانولوشن
    13. آموزش یادگیری عمیق رایگان
    14. واقعا به پایان رسیدم؟!

    شبکه عصبی کانولوشن (CNN) چیست؟

    شبکه عصبی کانولوشن (CNN) یک شبکه عصبی قدرتمند و پرکاربرد در یادگیری عمیق است که برای پردازش داده‌های شبکه‌ای (Grid-Structured Data) مانند تصاویر به کار می‌رود. این شبکه شامل اجزای مختلفی از جمله فیلترهای کانولوشنی برای استخراج ویژگی، لایه‌های pooling برای کاهش بُعد و لایه‌های fully connected برای طبقه‌بندی نهایی است. به دلیل توانایی بالای CNN در تشخیص الگوهای پیچیده، این شبکه‌ها نه تنها در پردازش تصویر، بلکه در حوزه‌های دیگری مانند پردازش زبان طبیعی و تشخیص گفتار نیز کاربرد دارند.

    تاریخچه شبکه عصبی کانولوشن (CNN)

    از زمان پیدایش یادگیری عمیق (Deep Learning)، شبکه عصبی کانولوشن (Convolutional Neural Network) گل سرسبد ایده‌ها در یادگیری عمیق بوده است. به شبکه کانولوشن به اختصار CNN یا ConvNet گفته می‌شود. شبکه CNN در سال 1990 با الهام‌گیری از آزمایش‌های انجام‌شده توسط Hubel و Wiesel روی قشر بینایی (Visual Cortex) معرفی شد. یکی از اولین پروژه‌های انجام‌شده با این شبکه CNN، پروژه معروف شناسایی ارقام دست‌نویس MNIST در سال 1998 توسط Yann Lecun بود که نتایج امیدوارکننده‌ای به همراه داشت.

    شبکه عصبی کانولوشن
    شکل 1: Hubel و Wiesel که در سال 1962 آزمایش‌هایی روی قشر بینایی (Visual Cortex) گربه انجام دادند و در دهه 90 شبکه کانولوشن را ارائه کردند.

    گرد و خاک به‌پا کردن شبکه عصبی کانولوشن

    اما درخشش اصلی شبکه کانولوشن در سال 2012 در جریان رویداد “ImageNet Large Scale Recognition Challenge” (همان مسابقه ImageNet) اتفاق افتاد. اتفاقی که توجه جامعه محققین را به خود جلب کرد. در مسابقه ImageNet سال 2012، Alex Krizhevsky از دانشگاه تورنتو با شبکه AlexNet وارد مسابقه پیچیده ImageNet شد. مسابقه ImageNet یک چالش دسته‌بندی (Classification) با 1.2 میلیون تصویر در 1000 کلاس بود. شبکه AlexNet با خطای 16.4٪ به رتبه اول مسابقه رسید. به نظر شما نفر دوم به چه خطایی دست یافته بود؟ 26.2%! اختلاف خطای حداقل 10 درصدی بین شبکه CNN با سایر روش‌ها…

    با این نتیجه، AlexNet مشت محکمی بر میز کوبید و نقشه راه جدیدی در بینایی کامپیوتر ترسیم کرد. از آن زمان تا امروز (2020)، تحقیقات CNN رشد چشم‌گیری داشته است. تنها در 3 سال، محققان از 8 لایه AlexNet به 152 لایه ResNet رسیدند و میزان خطای چالش ImageNet را به کمتر از 4٪ کاهش دادند. 12% کاهش خطا طی 3 سال با شبکه CNN، البته با افزایش پیچیدگی ساختار شبکه CNN!

    شبکه کانولوشن
    شکل 2: گروهی که روی شبکه AlexNet کار کردند. راست: Geoffrey Hinton، وسط: Alex Krizhevsky، چپ: Ilya Sutskever. آقای Alex Krizhevsky حواسش به دوربین نیست و دل در گروی نورون یار (AlexNet) بسته!

    طوفان شبکه کانولوشن

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

    شبکه cnn
    شکل 3: مسابقه GO بین Lee Sedol (سمت راست) و AlphaGo؛ اون آقای سمت چپی AlphaGo نیست و صرفا حرکات رو براساس اونچه که در مانیتور نشون داده میشه، اجرا میکنه. 😃

    بعد از جواب به سوال “شبکه عصبی کانولوشن چیست؟”، می‌خواهم کمی شما را با شبکه کانولوشن آشنا کنم. در بخش بعدی، خیلی وارد جزئیات نمی‌شوم، اما رفته رفته تا آخر این پست به جزئیات شبکه CNN هم خواهیم رسید.

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

    شبکه عصبی کانولوشن همانند سایر شبکه های عصبی (مثلا شبکه عصبی MLP) از لایه‌های نورونی با وزن و بایاس با قابلیت یادگیری تشکیل شده است. قطعا می‌دانید که در هر نورون اتفاقات زیر رخ می‌دهد:

    1. نورون مجموعه‌ای ورودی دریافت می‌کند.
    2. ضرب داخلی بین وزن‌های نورون و ورودی‌ها انجام می‌شود.
    3. حاصل با بایاس جمع می‌شود.
    4. درنهایت، از یک تابع غیرخطی (همان activation function) عبور داده می‌شود.
    شماتیک نورون مصنوعی artificial neuron
    شکل 4: شماتیک نورون مصنوعی (artificial neuron)

    فرآیند بالا لایه به لایه انجام می‌شود و درنهایت به لایه خروجی می‌رسیم. لایه خروجی، پیش‌بینی شبکه را تولید می‌کند. اما با این حد از تشابه بین شبکه MLP و شبکه CNN، پس تفاوت در چیست؟ در ادامه به این سوال مهم جواب می‌دهم…

    تفاوت شبکه عصبی MLP و کانولوشن

    تفاوت در ورودی است، مثلا تصویر… تصاویر معمولا به شکل یک ماتریس دوبعدی از اعداد نمایش داده می‌شوند. هر درایه در این ماتریس دوبعدی معادل با یک پیکسل هست. در بخش بعدی درمورد تصویر بیشتر توضیح خواهم داد. اگر یک تصویر 100×100 داشته باشیم، یعنی 10000 پیکسل داریم که به صورت دوبعدی به‌صورت مسالمت‌آمیز کنار هم‌دیگر نشسته‌اند. حال تصور کنید بخواهیم یک لایه ورودی برای این 10000 پیکسل بسازیم؛ باید 10000 نورون برای لایه ورودی شبکه MLP درنظر بگیریم. اضافه کردن نورون و لایه بیشتر به این شبکه MLP باعث می‌شود شبکه ما شامل حجم بزرگی از پارامترها شود، محاسباتش هزینه‌بر باشد و البته Overfitting اتفاق بیفتد.

    شبکه عصبی MLP
    شکل 5: اعمال تصویر ورودی به شبکه MLP؛ ابتدا تصویر باید به یک بردار تبدیل شود و بعد به شبکه MLP داده شود.

    حالا نقطه قوت شبکه CNN چیست؟

    این شبکه‌ها به‌گونه‌ای طراحی شده‌اند که برای ورودی‌های با ساختار ماتریسی (دوبعدی و سه‌بعدی) به‌خوبی کار می‌کنند. شبکه MLP، ساختار داده‌های ورودی را عوض می‌کند و یک ماتریس دوبعدی 100×100 را تبدیل به یک بردار به ابعاد 10000 می‌کند. اما شبکه CNN ساختار ورودی را عوض نمی‌کند و به ارتباط بین پیکسل‌های همسایه اهمیت می‌دهد.

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

    شبکه cnn
    شکل 6: یک شی در تصویر از مجموعه‌ای پیکسل درکنار هم تشکیل می‌شود. بنابراین، حفظ این آرایش پیکسلی مهم است.

    آیا شبکه CNN تنها برای تصویر دوبعدی مناسب است؟ خیر، داده‌های زیر غذای خوشمزه‌ای برای شبکه CNN هستند:

    • داده‌های یک بعدی: سیگنال و sequence (مثلا یک sequence از کلمات)
    • داده‌های دوبعدی: تصویر و طیف (spectogram) صوت
    • داده‌های سه بعدی: ویدئو و تصاویر حجمی (مثلا تصاویر MRI)
    • داده‌های چهاربعدی: تصاویر حجمی همراه با زمان (مانند fMRI)

    بعد از آشنایی با مزایای شبکه کانولوشن و بررسی تفاوتش با شبکه MLP، وقتش رسیده که معماری این شبکه را زیر تیغ جراحی ببریم. اما بیایید اول یک آشنایی کلی با معماری شبکه CNN بدست آوریم.

    یک معماری ساده از معماری شبکه عصبی کانولوشن

    در شکل 7 یک مثال ساده از معماری شبکه عصبی کانولوشن نشان داده شده است. شبکه کانولوشن معمولا از بلوک‌های مختلفی تشکیل شده است. لایه‌ها یا بلوک‌های مختلف در شبکه CNN عبارتنداز:

    • لایه ورودی (Input layer) [بلوک زرد در شکل 7]
    • لایه کانولوشن (Convolutional layer) [بلوک‌های آبی در شکل 7]
    • لایه غیرخطی (Non-linear activation function) [بلوک‌های آبی در شکل 7] (معمولا تابع غیرخطی را همراه با لایه کانولوشنی یک‌جا نشان می‌دهند)
    • لایه پولینگ (Pooling layer) [بلوک‌های قرمز در شکل 7]
    • لایه فولی کانکتد (Fully connected layer) [بلوک‌های سبز در شکل 7]
    آشنایی با شبکه عصبی کانولوشن
    شکل 7: یک مثال ساده از معماری شبکه عصبی کانولوشن

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

    تصویر در پردازش تصویر

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

    مقادیر موجود در تصویر یا ماتریس بین 0 تا 255 هستند. مقدار صفر معادل با رنگ سیاه مطلق و مقدار 255 معادل با رنگ سفید است. هرچقدر این مقادیر به صفر نزدیک‌تر باشد، آن پیکسل تیره‌تر می‌شود. هرچقدر مقدار پیکسل به 255 نزدیک‌تر باشد، رنگ آن پیکسل روشن‌تر می‌شود. همان‌طور که در شکل 8 مشاهده می‌کنید، نواحی تیره در ناحیه بزرگنمایی شده (سمت چپ و پایین) مقادیر کمتری دارند (مثلا اعداد 59 61 65). همچنین نواحی روشن (سمت راست و بالا)، مقادیر بزرگتری دارند (مثلا اعداد 206 207 204).

    تعریف تصویر و پیکسل در پردازش تصویر
    شکل 8: یک نمونه تصویر همراه نمایی زوم‌شده از تصویر؛ در ناحیه زوم‌شده، هم پیکسل‌ها را به‌راحتی می‌توانید مشاهده کنید و هم اعداد متناظر با هر پیکسل نشان داده شده است.

    دو نوع تصویر سطح خاکستری (Gray scale image) و تصویر رنگی (RGB image) معمولا به‌عنوان ورودی به شبکه عصبی کانولوشن داده می‌شود.

    تصویر سطح خاکستری در پردازش تصویر

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

    تصویر رنگی در پردازش تصویر

    تصاویر رنگی ساختار کمی متفاوت دارند. تصویر رنگی از سه صفحه تشکیل شده است. این صفحات عبارتنداز صفحه قرمز (R)، صفحه سبز (G) و صفحه آبی (B). مشخصات هر صفحه مشابه همان تصویر سطح خاکستری است و مقادیر اعداد بین 0 تا 255 است. از ترکیب سه عدد، یک رنگ نهایی حاصل می‌شود. به‌همین خاطر به تصاویر رنگی، تصویر RGB گفته می‌شود. از ترکیب این سه صفحه، یک تصویر رنگی حاصل می‌شود. یک نمونه تصویر RGB در شکل 9 نشان داده شده است.

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

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

    تنسور چیست؟

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

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

    کانولوشن چیست؟

    در عملگر کانولوشن، مطابق شکل 10 چهار مولفه مهم وجود دارد که عبارتنداز:

    • ماتریس یا تصویر ورودی (Input)
    • فیلتر یا کرنل کانولوشنی (Convolution Filter)
    • عملگر کانولوشن (*)
    • ویژگی خروجی کانولوشن (Output)
    عمل کانولوشن به صورت تصویری
    شکل 10: چهار مولفه اصلی در کانولوشن

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

    کانولوشن دو بعدی
    شکل 11: اسکن شدن ماتریس ورودی با فیلتر کانولوشنی

    مثال عددی از کانولوشن

    اما ماتریس ورودی و فیلتر بالا شامل هیچ‌گونه عددی نیستند. حالا به تصویر زیر نگاه کنید؛ هر فیلتر کانولوشنی، شامل مجموعه‌ای عدد است. با قرار گرفتن فیلتر روی هربخش از تصویر، اعدادِ در فیلتر درایه به درایه در پیکسل‌های متناظر تصویر ضرب می‌شوند. درنهایت همه اعداد باهم جمع می‌شوند. مثلا در تصویر زیر، 9 ضرب نظیر به نظیر بین یک بخش 3×3 از ماتریس آبی با ماتریس قرمز انجام شده است. درنهایت، این 9 ضرب باید باهم به شکل زیر جمع شوند:

    1×1 + 2×-1 + 3×4 + 5×-2 + 8×1 + 9×0 + 5×0 + 0×2 + 1×3 = 12

    نحوه انجام کانولوشن در تصویر
    شکل 12: یک مرحله از ضرب بین فیلتر و یک پنجره از ورودی در کانولوشن

    حالا این عدد 25 را کجا باید ذخیره کرد؟ فعلا مطابق شکل زیر، خروجی را در یک آرایه تنها قرار می‌دهیم.

    کانولوشن دوبعدی و شبکه کانولوشن
    شکل 13: محاسبه خروجی یک مرحله از کانولوشن

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

    آموزش کانولوشن مرحله به مرحله
    شکل 14: فرآیند کامل کانولوشن

    چرا سایز خروجی کانولوشن کوچک شد؟!

    چرا ماتریس خروجی در شکل 14، دو سطر و ستون کمتر از ماتریس ورودی دارد؟ چرا ماتریس خروجی در شکل 14، 3×3 است اما ماتریس ورودی 5×5 است؟ چرا هم‌اندازه نیستند؟ جواب این سوال‌ها این است که بسته به اندازه فیلتر، اندازه ماتریس خروجی تغییر می‌کند. مثلا وقتی فیلتر 3×3 باشد، خروجی 2 سطر و ستون کمتر از ورودی خواهد داشت. حالا بیایید این مساله را فرموله کنیم. فرض کنید ماتریس ورودی و فیلتر مربعی باشند و سایز آنها به‌ترتیب برابر با n و k باشد. دراینصورت، سایز خروجی m با رابطه زیر بدست می‌آید:

    m = n – (k-1)

    به همین سادگی… حالا اگر سایز ورودی و فیلتر به‌ترتیب 5×5 و 3×3 باشد، اندازه خروجی برابر با 3×3 خواهد بود. آیا راهی وجود دارد که اندازه ماتریس خروجی کاهش پیدا نکند و همان 5×5 بماند؟ بله وجود دارد، تکنیکی به نام padding یا لایه گذاری ماتریس وجود دارد که به دور ماتریس ورودی سطر و ستون‌هایی اضافه می‌شود که باعث می‌شود جلوی کاهش بعد خروجی گرفته شود. مثلا، در شکل 14، اگر ورودی را به‌نوعی جعلی به یک ماتریس 7×7 تبدیل کنیم، آنوقت خروجی 5×5 خواهد بود. یعنی اندازه خروجی برابر با همان ورودی است. دقت کنید؛ ما به‌صورت جعلی ورودی را افزایش بعد می‌دهیم. در بخش لایه کانولوشنی راه‌حلش را توضیح می‌دهم.

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

    کانولوشن زیر ذره‌بین

    بیایید چند نکته از کانولوشن را باهم مرور کنیم.

    نکته اول

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

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

    کانولوشن یک بعدی
    شکل 15: نمونه‌ای از یافتن الگوی مشابه در کانولوشن

    نکته دوم

    ارتباط دادن عمل کانولوشن به عملکرد یک نورون است. یک نورون یک جمع وزن‌دار (ضرب بین پارامترها و ورودی و نهایتا جمع) بود. اینجا هم همین است! فیلتر که شامل یک سری اعداد است به ورودی‌ها وزن می‌دهد (ضرب درایه به درایه بین فیلتر و پنجره‌های ماتریس ورودی) و نهایتا اعداد وزن‌دهی‌شده ورودی را باهم جمع می‌کند.

    نکته سوم

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

    لبه یابی تصویر با استفاده از کانولوشن
    شکل 16: پیدا کردن لبه‌های تصویر ورودی با استفاده از کانولوشن

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

    کانولوشن با ورودی سه‌بعدی

    همان‌طور که در بخش قبلی گفتم، تصویر رنگی سه کانال یا صفحه دارد. بنابراین، فیلتر شما هم باید سه کانال داشته باشد. یعنی اگر قبلا یک فیلتر 3×3 برای کانولوشن در تصویر دوبعدی داشتیم، حالا یک فیلتر 3×3×3 خواهیم داشت. چرا؟ چون هرصفحه از تصویر رنگی به‌صورت مجزا برای خودش یک فیلتر دارد. به شکل 17 نگاه کنید؛ سه صفحه از فیلتر به‌صورت موازی باهم روی سه صفحه از تصویر حرکت می‌کنند. با فرض اینکه فیلتر 5×5 باشد، در هرلحظه 25 ضرب در هرصفحه انجام می‌شود و درمجموع برای سه صفحه می‌شود 75 ضرب… درنهایت خروجی برابراست با جمع این 75 ضرب. پس درنهایت نتیجه ضرب سه صفحه باهم جمع می‌شود و خروجی نهایی یک تصویر 100×100×3 نیست، بلکه یک تصویر 100×100 است.

    کانولوشن در تصویر رنگی
    شکل 17: کانولوشن در تصویر رنگی

    حالا مثلا مثلا مثلا، اگر ورودی بجای 3 صفحه، 10 صفحه داشته باشد، برای خروجی چه اتفاقی می‌افتد؟ فیلتر چه شکلی خواهد بود؟ فیلتر باید 10 صفحه داشته باشد و اگر فرضا فیلتر را 5×5 درنظر بگیریم، اندازه فیلتر به شکل 5×5×10 باشد. هریک از این 10 صفحه، در صفحه متناظر با صفحه تصویر کانوالو می‌شود. بعد از توضیح درباره کانولوشن، وقت آن رسیده که درباره لایه کانولوشنی در شبکه عصبی CNN توضیح بدهم. برویم سراغ بخش بعدی…

     

     

    لایه کانولوشن در شبکه عصبی کانولوشن (Convolutional Layer)

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

    چرا یک لایه کانولوشنی نیاز است؟

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

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

    خروجی لایه کانولوشنی در شبکه عصبی کانولوشن CNN
    شکل 18: اعمال 64 فیلتر مختلف به یک تصویر با لایه کانولوشنی

    اما، یک لایه کانولوشنی در شبکه عصبی کانولوشن را چگونه نمایش می‌دهند؟ بریم ببینیم…

    نمایش لایه کانولوشن

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

    • بعد اول، معادل با تعداد سطر (5)
    • بعد دوم، معادل با تعداد ستون (5)
    • بعد سوم، معادل با تعداد کانال (3)
    • بعد چهارم، معادل با تعداد فیلتر (N)

    یعنی یک تنسور چهاربعدی به ابعاد 5×5×3×N معادل با N فیلتر به ابعاد 3×5×5 است. پس قراراست روی تصویر ورودی، N فیلتر اعمال شود. شما به عنوان یک متخصص مجاز هستید که اندازه سطر و ستون و تعداد فیلترها را خودتان تعیین کنید. اما بعد سوم (تعداد کانال‌ها)، از روی تعداد کانال ورودی تعیین می‌شود. چرا؟ خودتان دلیلش را بگویید، در آخر بخش قبلی توضیح دادم.

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

    بلوک دیاگرام لایه کانولوشنی
    شکل 19: بلوک دیاگرام لایه کانولوشنی با N فیلتر

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

    تعداد فیلتر در لایه کانولوشن

    تعداد فیلترها، تعداد ویژگی‌های تشخیص داده شده را نشان می‌دهد. این هایپرپارامتر معمولا نمایی از 2 (معمولا بین 32 تا 4096) انتخاب می‌شود. معمولا استفاده از فیلترهای بیشتر باعث ایجاد یک شبکه عصبی قدرتمندتر می‌شود. اما این افزایش پارامترها ممکن است باعث overfitting شود.

    اندازه فیلتر در لایه کانولوشن

    اندازه فیلتر معمولا به صورت مربعی (برای تصاویر) و 3×3 تعریف می‌شود. اما 5×5 و 7×7 نیز گاهی استفاده می‌شود. با فیلترهای کوچک، تعداد پارامترهای قابل یادگیری بسیار کمتر می‌شود.

    اندازه پدینگ (padding) در لایه کانولوشن

    در بخش قبل دیدید که بعد از فیلتر کردن یک ماتریس 5×5 با فیلتر 3×3، سایز خروجی دو سطر و ستون کمتر از ماتریس ورودی داشت. گفتیم که با لایه گذاری یا padding می‌توانیم به صورت جعلی اندازه ورودی را افزایش دهیم تا ماتریس خروجی هم‌اندازه ماتریس ورودی بشود. درمورد لایه گذاری صحبت بسیار است و معمولا در پردازش تصویر بررسی می‌شود. اما یک راه ساده و رایج آن اضافه کردن سطر و ستون صفر به‌صورت متقارن به دور ماتریس ورودی است. به لایه گذاری صفر zero padding گفته می‌شود. به شکل 20 نگاه کنید که چگونه یک لایه صفر دور ماتریس قرار گرفته است. حالا فیلتر کانولوشنی ما فضای بیشتر برای گام برداشتن و اسکن کردن دارد و طبیعتا خروجی هم بزرگتر می‌شود.

    کانولوشن با padding
    شکل 20: کانولوشن با padding

    تمرین: علامت‌های سوال شکل بالا را پر کنید!

    از کجا بفهمیم چه تعداد لایه باید دور ماتریس اضافه کرد؟ بستگی به اندازه فیلتر دارد؛ قبلا هم گفته بودم که به اندازه n – (k-1)/2 از ماتریس خروجی کاسته می‌شود. بسیارخب، واضح است که به همین اندازه باید سطر و ستون به ماتریس ورودی اضافه کنیم. مثلا فرمول n – (k-1)/2 برای فیلتر 3×3 می‌گوید که باید به ماتریس ورودی 2 سطر و ستون اضافه شود. یک سطر را بالای ماتریس ورودی قرار می‌دهیم و یکی را هم پایین ماتریس… یک ستون را سمت چپ ماتریس و دیگری را سمت راست… به‌عنوان مثالی دیگر، اگر اندازه فیلتر 5×5 باشد، چهار سطر و ستون باید به ماتریس ورودی اضافه شود.

    اندازه stride در لایه کانولوشن

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

    تعریف stride 2 در شبکه کانولوشنی
    شکل 21: تعریف stride 2 در شبکه عصبی کانولوشن

    معمولا stride در لایه های کانولوشنی عدد 1 درنظر گرفته می‌شود.

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

    لایه غیرخطی در شبکه عصبی کانولوشن (Activation Function)

    مشابه با سایر شبکه های عصبی، شبکه عصبی کانولوشن هم از تابع تحریک یا activation function غیرخطی بعد از لایه کانولوشنی استفاده می‌کند. استفاده از تابع غیرخطی باعث ایجاد خاصیت غیرخطی در شبکه عصبی می‌شود که خیلی مهم است. بعضی از فریمورک‌ها در همان تعریف لایه کانولوشنی، به شما این امکان را می‌دهند که نوع تابع غیرخطی را هم مشخص کنید. در بعضی از فریمورک‌ها هم باید یک لایه جداگانه بسازید. تعریف تابع غیرخطی به صورت جدا از لایه کانولوشنی انعطاف پذیری بیشتری ایجاد می‌کند.

    در بین تمام توابع غیرخطی، تابع ReLU بیشترین محبوبیت را دارد. البته، از خانواده ReLU اعضای دیگری مانند PReLU Leaky-ReLU و غیره وجود دارند. در شکل زیر، تعدادی از توابع غیرخطی را مشاهده می‌کنید. به‌عنوان نمونه، تابع ReLU مقادیر کوچکتر از صفر (منفی) را صفر و مقادیر بزرگتر از صفر را بدون هیچ‌گونه تغییری به خروجی می‌برد.

    activation function در شبکه عصبی
    شکل 22: توابع غیرخطی در شبکه عصبی کانولوشن

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

    تابع تحریک ReLU در شبکه عصبی
    شکل 23: تابع تحریک ReLU و نحوه اعمال به یک ورودی نمونه

    لایه پولینگ در شبکه عصبی کانولوشن (Pooling Layer)

    لایه پولینگ یکی دیگر از لایه های مهم در شبکه عصبی کانولوشن است. هدف لایه پولینگ کاهش اندازه مکانی فیچرمپ بدست آمده با استفاده از لایه کانولوشنی است. لایه پولینگ پارامتر قابل آموزش ندارد. صرفا یک نمونه برداری ساده و موثر انجام می‌دهد. پولینگ عملکردی شبیه کانولوشن دارد و یک پنجره روی تصویر حرکت می‌کند. رایج‌ترین نمونه پولینگ max pooling و average pooling است. مطابق شکل 24 ماکس پولینگ شامل یک پنجره از پیش تعریف شده است (مثلا 3×3) که روی تصویر حرکت می‌کند (تصویر را اسکن می‌کند) و در هر پنجره مقدار ماکزیمم را انتخاب می‌کند و بقیه را دور می‌ریزد. مشابه با لایه کانولوشنی، اندازه فیلتر، پدینگ و استراید در اینجا هم صدق می‌کند. در پولینگ، معمولا استراید 2 و اندازه فیلتر 3 درنظر گرفته می‌شود. برای اینکه سایز ویژگی به 1/2 کاهش پیدا کند.

    ماکس پولینگ max pooling در شبکه عصبی کانولوشنی
    شکل 24: نمایی از نحوه عملکرد max pooling در شبکه عصبی کانولوشن

    در شکل زیر یک نمونه کامل از max pooling نشان داده شده است.

    عملکرد max pooling در شبکه کانولوشنی
    شکل 25: عملکرد max pooling در شبکه عصبی کانولوشن

    همچنین، در شکل زیر یک نمونه کامل از average pooling نشان داده شده است.

    عملکرد average pooling در شبکه کانولوشنی
    شکل 26: عملکرد average pooling در شبکه کانولوشنی

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

    طراحی شبکه عصبی کانولوشن ساده

    من در شکل 27 یک شبکه کانولوشن نصف و نیمه ساختم. به شکل نگاه کنید و نکته‌های زیر را بخوانید:

    1. معمولا در شبکه عصبی کانولوشن، ابتدا لایه کانولوشنی قرار می‌گیرد. یعنی، قبل از پولینگ، تایع غیرخطی و غیره. ابتدا، یک لایه کانولوشنی روی تصویر با تعداد فیلتر کم اعمال می‌شود. لایه 1، با 32 فیلتر را در شکل زیر مشاهده می‌کنید. پدینگ و استراید طوری تنظیم شده که سایز فیچرمپ خروجی کم نشود. اندازه فیچرمپ خروجی برابر با 32×32×32 است.
    2. معمولا بعد از لایه کانولوشنی، یک تابع تحریک قرار داده می‌شود. طبیعی است، چون اگر یادتان باشد در نورون هم بعد از جمع وزن‌دهی و جمع با بایاس، تابع تحریک اعمال می‌شد. طبق شکل زیر، یک تابع ReLU روی فیچرمپ اعمال می‌شود. کارش هم اینست که منفی‌ها را صفر می‌کند، تمام!
    3. حالا می‌خواهم یک لایه پولینگ بعد از تابع تحریک قرار دهم. این پولینگ از نوع ماکس پولینگ است. اما استراید را 2 درنظرگرفتم که اندازه فیچرمپ خروجی نصف شود. پس اندازه فیچرمپ خروجی برابر با 16×16×32 خواهد شد.
    4. تا اینجا یک دور کانولوشنی، غیرخطی و پولینگ را به تصویر ورودی اعمال کردم. دوباره هرسه اینها را اعمال می‌کنم. تعداد فیلترهای لایه کانولوشنی دوم را 64 درنظر گرفتم. فیچرمپ خروجی ماکس پولینگ: 8×8×64
    5. در سومین مرحله، یک لایه کانولوشنی با 128 فیلتر درنظر گرفته شده و استراید هم 2 است. بعد از لایه کانولوشنی یک تابع تحریک گذاشتم. فیچرمپ خروجی تابع تحریک برابر با 4×4×128 است.
    6. در آخر یک لایه میانگین پولینگ با سایز 4×4 گذاشته‌ام. فیچرمپ خروجی این لایه برابر با 1×1×128 خواهد شد. یعنی، تصویر ورودی بعد از چندمرحله تبدیل به یک بردار به طول 128 شد. این بردار، بردار ویژگی تصویر ورودی است. این بردار شناسنامه یا اثر انگشت تصویر است. به چه دردی می‌خورد؟ دربخش بعدی خواهید دید…
    شبکه عصبی کانولوشنی با سه لایه کانولوشنی، دو ماکس پولینگ و میانگین
    شکل 27: طراحی شبکه عصبی کانولوشن ساده

     

     

    لایه فولی کانکتد در شبکه عصبی کانولوشن (Fully Connected Layer)

    معمولا آخرین لایه های یک شبکه عصبی کانولوشن برای طبقه بندی را لایه های فولی کانکتد تشکیل می‌دهند. این لایه ها همان لایه هایی هستند که در شبکه عصبی MLP دیده‌اید. برای آشنایی بیشتر این مقاله را بخوانید. یکی از کاربردهای اصلی لایه فولی کانکتد در شبکه کانولوشن، استفاده به عنوان طبقه بند یا کلاسیفایر (Classifier) است. یعنی مجموعه ویژگی‌های استخراج شده با استفاده از لایه های کانولوشنی درنهایت تبدیل به یک بردار می‌شوند. درنهایت این بردار ویژگی به یک کلاسیفایر فولی کانکتد داده می‌شود تا کلاس درست را شناسایی کند. شکل 28 را با فولی کانکتد کامل کردم و می‌توانید در شکل زیر مشاهده کنید. شکل زیر بلوک دیاگرام کامل یک شبکه عصبی کانولوشن ساده برای طبقه بندی است.

    شبکه کانولوشنی برای طبقه بندی
    شکل 28: شبکه عصبی کانولوشن برای طبقه بندی

    سوالات رایج درباره شبکه عصبی کانولوشن

    انتظار دارم بعد از خواندن این پست بلندوبالا، یک عالمه سوال برایتان ایجاد شده باشد. من به تعدادی از سوالات رایج دانشجویان در ادامه جواب داده‌ام. سعی می‌کنم این بخش را بازهم با سوالات جدید تکمیل کنم. سوالاتی مثل:

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

    دریافت PDF آموزش شبکه عصبی کانولوشن

    برای شما هدیه‌ای داریم. 😊 خیلی علاقه‌مند بودیم که PDF پست شبکه عصبی CNN را آماده کنیم. اتفاقا خیلی از دوستان هم پیام می‌دادند و PDF این آموزش را می‌خواستند. بالاخره بعد از مدت‌ها، در تاریخ 17 آذر 1400 این PDF آماده شد. 😍 اگر بگوییم یک کتابچه شده، بیراه نگفته‌ایم! از طریق لینک زیر می‌توانید دریافت کنید.

    دریافت PDF

    آموزش یادگیری عمیق رایگان

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

    جلسه 01: نورون مصنوعی نورون مصنوعی
    جلسه 02: یادگیری نورون مصنوعی یادگیری نورون مصنوعی
    جلسه 03: شبکه عصبی MLP شبکه عصبی MLP
    جلسه 04: پروژه دسته‌بندی MLP با تنسورفلو دسته بندی با mlp و تنسورفلو
    جلسه 05: پروژه رگرسیون MLP با تنسورفلو رگرسیون با mlp و تنسورفلو
    جلسه 06: شبکه عصبی کانولوشن (CNN) شبکه عصبی کانولوشن
    جلسه 07: شبکه عصبی بازگشتی (RNN) شبکه عصبی بازگشتی
    جلسه 08: شبکه عصبی GAN شبکه عصبی GAN
    جلسه 09: شبکه عصبی LSTM شبکه عصبی LSTM

    واقعا به پایان رسیدم؟!

    جواب کوتاه اینکه، نه! 😅 اما، خداقوت، گام بزرگی برداشتید. از ابتدا تا انتهای یک شبکه CNN را خدمت شما توضیح دادم. امیدوارم، با این شبکه محبوب ارتباط برقرار کرده باشید. مفاهیم و لایه‌های دیگری نیز در شبکه عصبی کانولوشن وجود دارد. مثلا، باید درباره Batch Normalization, Dropout, Data Augmentation, Receptive Field هم توضیح بدهم. اما فعلا تا همین اندازه کافی است و بقیه بماند در پستی جداگانه… لطفا فیدبک بدهید، این آموزش چطور بود؟ در کامنت درباره این پست با ما صحبت کنید. هوسم را هم فراموش نکنید و لطفا به دوستانتان هم معرفی کنید… 

    اشتراک گذاری:

    مطالب زیر را حتما مطالعه کنید

    LLM Research یا LLM Engineering؟ راهنمای یادگیری مدل‌های زبانی بزرگ
    در چند سال اخیر، اصطلاح LLM یا Large Language Model به یکی از پرتکرارترین واژه‌ها...
    یادگیری انتقالی
    یادگیری انتقالی یا Transfer Learning به معنای استفاده از یک مدل از پیش آموزش‌دیده در...
    شبکه VGG
    شبکه VGG یکی از معماری‌های موفق و معروف در حوزه یادگیری عمیق است که در...
    مهندسی پرامپت
    امروزه، با ظهور ChatGPT و سایر ابزارهای هوش مصنوعی، طیف گسترده‌ای از افراد، از کاربران...
    مدل nanoGPT
    در سال ۲۰۱۹، OpenAI مدل GPT-2 را معرفی کرد. OpenAI، برخلاف مدل‌های بعدی (GPT-3 و...
    شگفت‌انگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
    هوش مصنوعی به سرعت در حال پیشرفت هست. به‌گونه‌ای که باید زمان و انرژی زیادی...

    278 دیدگاه

    به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

    • ghezi گفت:
      2022/09/05 در 9:06 ب.ظ

      سلام ممنون توضیح تقریبا کامل و شفافی بود البته عالی

      پاسخ
    • الهه گفت:
      2022/08/14 در 11:14 ق.ظ

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

      پاسخ
      • سیدحسین گفت:
        2023/01/18 در 5:04 ب.ظ

        سلام من یک سری عدد در اکسل دارم میتونم با سیگنال یا ترند نشانش بدم برای تبدیل این اعداد به تصویر )کاری که در cnn ( انجام میشه راهنماییم کنید آیا این کار انجام بدم اصلا با نه لازم نیست چگونه اون سیگنالها را بفرستم به شبکه cnn برای کلاسبندی
        سوال : اصلا کلاس بندی مثلا ۶ کلاسه لازمه از cnn استفاده کرد؟

        پاسخ
    • علیرضا گفت:
      2022/08/08 در 11:08 ق.ظ

      سلام
      خیلی ساده و بدون حاشیه مطالب رو بیان کردید. خیلی از ابهاماتم برطرف شد.
      ممنون

      پاسخ
    • مائده کدخدایی گفت:
      2022/07/25 در 10:50 ق.ظ

      سلام خسته نباشید واقعا.
      توضیحات عالی، بدون نقص، جامع و قابل فهم بود.

      پاسخ
    • NAFISE گفت:
      2022/07/22 در 12:13 ق.ظ

      سلام، بسیار روان و شیوا و کامل بود.ممنون

      پاسخ
    • مصطفی گفت:
      2022/06/08 در 11:12 ب.ظ

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

      پاسخ
    • saeed گفت:
      2022/05/28 در 8:00 ب.ظ

      ممنونم از سایت مفیدتون. واقعا بیان قابل فهمی دارید

      پاسخ
    • دختر خوب گفت:
      2022/05/28 در 6:28 ب.ظ

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

      پاسخ
      • هوسم گفت:
        2022/05/29 در 11:22 ق.ظ

        😅

        پاسخ
    • nima گفت:
      2022/05/24 در 6:27 ب.ظ

      سلام وقت بخیر و خسته نباشید خدمت تیم هوسم عالیه مطالبتون اگر امکانش هست واسه هربخش یه مثال متلبی و پایتون بزنید خیلی ممنون میشیم

      پاسخ
    • حصین گفت:
      2022/05/24 در 6:24 ب.ظ

      با سلام و خسته نباشید
      واقعااا خیلییی عالیه وو ممنونم از سایت خوبتون که در اختیار عام قرار گذاشتین دمتون گرم 🧡🌹🌷

      پاسخ
    • رها گفت:
      2022/05/18 در 6:53 ب.ظ

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

      پاسخ
      • هوسم گفت:
        2022/05/19 در 10:50 ق.ظ

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

        پاسخ
    • انا گفت:
      2022/05/11 در 10:30 ب.ظ

      خدا قوت در یک کلام عالی هستید

      پاسخ
    « دیدگاه‌های کهنه
    دیدگاه‌های تازه‌تر »

    دیدگاهتان را بنویسید لغو پاسخ

    جستجو برای:
    فهرست مطالب دوره
    • معرفی دوره یادگیری عمیق رایگان
    • جلسه 00: یادگیری عمیق چیست
    • جلسه 01: ساختار نورون مصنوعی
    • جلسه 02: یادگیری نورون مصنوعی
    • جلسه 03: شبکه عصبی mlp
    • جلسه 04: دسته بندی با mlp و تنسورفلو
    • جلسه 05: رگرسیون با mlp و تنسورفلو
    • جلسه 06: شبکه عصبی کانولوشنی (CNN)
    • جلسه 07: شبکه عصبی بازگشتی (RNN)
    • جلسه 08: شبکه عصبی LSTM
    • جلسه 09: شبکه GRU
    • جلسه 10: شبکه ترنسفورمر
    • جلسه 11: شبکه ویژن ترنسفورمر
    • جلسه 12: شبکه عصبی GAN
    • جلسه 13: شبکه اتوانکدر
    دوره‌های جامع هوسم
    • مسابقه Kaggle: تحلیل و پیش‌بینی رفتار با داده‌های چندحسگری سری زمانی
    • پیاده‌سازی ChatGPT از صفر با پایتورچ
    • آموزش OpenCV: از پردازش تا بینایی
    • دیپ کاتالیست: دوره افزایش مهارت
    • پایتون برای هوش مصنوعی 🤖
    • یادگیری ماشین جامع: از مفاهیم تا پیاده‌سازی🔥
    • یادگیری عمیق جامع: از مفاهیم تا پیاده‌سازی
    درباره هوسم

    آکادمی هوش مصنوعی هوسم با آموزش‌های تخصصی در حوزه هوش مصنوعی در خدمت شماست. روی کمک هوسم حساب کنید…

    • گیلان- شهرستان رودسر- شهرک انصاری- کوچه لاله 9
    • 09025469248
    • howsam.mail@gmail.com
    دسترسی سریع
    • صفحه اصلی
    • وبلاگ
    • حساب کاربری
    • سبد خرید
    شبکه‌های اجتماعی

     

    logo-samandehi
    تمامی حقوق برای آکادمی هوسم محفوظ است.
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      ورود
      استفاده از موبایل
      استفاده از آدرس ایمیل
      آیا هنوز عضو نیستید؟ اکنون عضو شوید
      بازنشانی رمز عبور
      استفاده از موبایل
      استفاده از آدرس ایمیل
      عضویت
      استفاده از موبایل
      استفاده از ایمیل
      قبلا عضو شدید؟ اکنون وارد شوید

      ورود

      رمز عبور را فراموش کرده اید؟

      هنوز عضو نشده اید؟ عضویت در سایت