کانولوشن معکوس (Transposed Convolution) چیست؟ شبکه عصبی کانولوشن یا پیچشی (Convolutional Neural Network / CNN) در پروژه‌های بینایی ماشین (Computer Vision) به‌منظور استخراج ویژگی‌های موجود در داده‌ی ورودی، مانند ویدئو یا تصویر، به کار برده می‌شود. در این شبکه لایه‌های متعدد کانولوشن روی داده ورودی اعمال می‌شود تا ویژگی‌های آن استخراج شود و وزن‌های شبکه در حین آموزش، با توجه به این ویژگی‌های استخراج‌شده، به‌روزرسانی شوند و شبکه شروع به یادگیری کند؛ اما در برخی مواقع، مانند استفاده از اتوانکودرها (Autoencoders) ، به عکس این روند نیاز داریم، یعنی خروجی یک لایه‌ی کانولوشن را معکوس کنیم و عکس ورودی را در خروجی داشته باشیم. انکودر ویژگی‌هایی را از تصویر استخراج می‌کند و دیکودر تصویر اصلی (ورودی) را از این ویژگی‌ها بازسازی می‌کند. اینجاست که می‌توانیم از لایه‌های کانولوشنی معکوس (Transposed Convolutional Layers) استفاده کنیم. در این مطلب به جزئیات لایه‌های کانولوشنی معکوس (Transposed Convolutional Layers) نگاهی دقیق می‌اندازیم.

فرایند یک لایه‌ی کانولوشن نرمال

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

حرکت فیلتر روی عکس ورودی

برای مثال، شکل ۲ یک عکس ورودی با ابعاد ۵ در ۵ را نشان می‌دهد که با یک فیلتر ۳ در ۳ یک ماتریس خروجی با ابعاد ۳ در ۳ دارد.

فرایند کانولوشن (Convolution)

برای آشنایی با شبکه‌ی عصبی کانولوشنی (CNN) این مطلب را مطالعه کنید:

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

کانولوشن معکوس (Transposed Convolution)

همان‌طور که قبلاً توضیح دادیم، هدف از استفاده از کانولوشن معکوس این است که دقیقاً عکس عمل کانولوشن را انجام دهیم؛ یعنی با داشتن نقشه‌ی ویژگی بتوانیم عکس ورودی را بازسازی کنیم. به این کار Up-sampling گفته می‌شود.

برای مثال، در شکل ۳ یک عکس ورود با ابعاد ۳ در ۳ و فیلتر ۲ در ۲ داریم که خروجی ۲ در ۲ دارد.

فرایند کانولوشن نرمال

حال می‌خواهیم عکس این فرایند انجام شود:

فرایند کانولوشن معکوس (Transposed Convolution)

اما چطور این کار ممکن است؟

ماتریس کانولوشن (Convolution Matrix)

برای اینکه نشان دهیم کانولوشن معکوس (Transposed Convolution) چطور کار می‌کند لازم است کانولوشن نرمال را به‌شکل ماتریس کانولوشن (Convolution Matrix) نشان دهیم. ماتریس کانولوشن (Convolution Matrix)، ماتریسی است که تمامی موقعیت‌های فیلتر روی ماتریس ورودی را نشان می‌دهد.

فرض کنیم می‌خواهیم فرایند کانولوشن را روی یک عکس ۳ در ۳ با فیلتر ۲ در ۲ انجام دهیم.

فرایند کانولوشن

قطعاً تا الان متوجه شده‌ایم که خروجی این فرایند یک ماتریس ۲ در ۲ مانند شکل ۶ که در زیر می‌بینید، خواهد بود.

خروجی فرایند کانولوشن

حال ماتریس کانولوشن (Convolution Matrix)  آن به‌ این شکل که در تصویر ۷ مشاهده می‌کنید، خواهد بود:

ماتریس کانولوشن (Convolution Matrix)

اگر با دقت به عکس ۷ نگاه کنیم، می‌بینیم که هر ردیف نشان‌دهنده‌ی موقعیت فیلتر روی ماتریس عکس ورودی است؛ برای مثال، ردیف اول در شکل ۷ را با هم بررسی می‌کنیم. ردیف اول نشان می‌دهد که فیلتر روی چهار پیکسل بالا سمت چپ عکس قرار دارد، یعنی فیلتر روی دو پیکسل ردیف اول عکس ورودی قرار گرفته، اما روی سومین پیکسل ردیف اول قرار نگرفته و به‌همین سبب، مقدار آن صفر است؛ هم‌چنین روی دو پیکسل ردیف دوم عکس هم قرار گرفته، اما روی سومین پیکسل از ردیف دوم قرار نگرفته است؛ پس مقدار آن هم صفر است؛ علاوه‌براین روی سومین ردیف قرار نگرفته و مقدار آن سه پیکسل هم صفر است. ردیف‌های دیگر هم در شکل ۷ به‌همین شکل باقی موقعیت‌های فیلتر روی عکس ورودی را نشان می‌دهند. شکل ۸ این موضوع را بهتر نشان می‌دهد.

ماتریس کانولوشن (Convolution Matrix)

برای آشنایی با با فیلتر / کرنل (Filter / Kernel) در شبکه‌ی عصبی کانولوشنی این مطلب را مطالعه کنید:

با فیلتر / کرنل (Filter / Kernel) در شبکه‌ی عصبی کانولوشنی آشنا شوید!

محاسبه‌ی کانولوشن نرمال (Normal Convolution) با استفاده از ماتریس کانولوشن (Convolution Matrix)

برای محاسبه‌ی کانولوشن با استفاده از ماتریس کانولوشن (Convolution Matrix) کافی است ماتریس ورودی را مسطح‌سازی (Flatten) کنیم. در مثالی که قبلاً آوردیم، ماتریس ورودی به‌ شکلی که در تصویر ۹ مشخص شده، مسطح‌سازی می‌شود:

مسطح‌سازی ماتریس ورودی

درواقع ماتریس ۳ در ۳ را به‌شکل ۹ در ۱ نمایش می‌دهیم. حال می‌توانیم این بردار را در ماتریس کانولوشن (Convolution Matrix) ضرب کنیم:

ضرب بردار ورودی در ماتریس کانولوشن

خروجی این ضرب همان خروجی لایه‌ی کانولوشن نرمال است که البته در اینجا به‌شکل بردار است و کافی است آن را به‌شکل ماتریس درآوریم. این ماتریس در شکل ۱۱ نشان داده شده است:

خروجی کانولوشن نرمال

حال که با مفهوم ماتریس کانولوشن و نحوه‌ی محاسبه‌ی کانولوشن نرمال با ماتریس کانولوشن (Convolution Matrix) آشنا شدیم، زمان آن است که نحوه‌ی کار کانولوشن معکوس (Transposed Convolution) را بررسی کنیم.

فرض کنیم ورودی کانولوشن معکوس ما به‌این شکل که در تصویر ۱۲ می‌بینید، است:

ورودی کانولوشن معکوس

و خروجی مدنظر ما ماتریس تصویر شماره ۱۳ ( شکل زیر) است:

خروجی مدنظر در کانولوشن معکوس

درواقع در اینجا ما دقیقاً عکس کاری که در کانولوشن نرمال انجام دادیم مدنظر داریم؛ یعنی می‌خواهیم با استفاده از یک ماتریس که خلاصه‌ای (کوچک‌شده) ماتریس ورودی اصلی است به ماتریس ورودی اصلی برسیم.

برای این کار به ماتریس کانولوشن (Convolution Matrix) احتیاج داریم، البته نه خود آن، نسخه‌ی معکوس‌شده‌ی آن؛ یعنی جای ستون‌ها و ردیف‌ها در این ماتریس عوض شده است. در شکل ۱۴ می‌توانیم معکوس ماتریس کانولوشن (Transposed Convolution Matrix) مثالی را ببینیم که تابه‌حال دنبال کردیم.

معکوس ماتریس کانولوشن

ماتریس ورودی کانولوشن معکوس را که همان نقشه‌ی ویژگی خروجی کانولوشن نرمال است مسطح‌سازی (Flatten) و سپس در ماتریس کانولوشن معکوس‌شده (Transposed Convolution Matrix) ضرب می‌کنیم:

معکوس ماتریس کانولوشن
ضرب معکوس ماتریس کانولوشن در بردار ورودی

همان‌طور که در شکل ۱۶ (شکل بالا) مشاهده می‌کنیم، خروجی این ضرب یک بردار است که اگر آن را به ماتریس تبدیل کنیم، همان ماتریس ورودی در کانولوشن نرمال خواهد بود و این همان خروجی موردانتظار ماست.

خلاصه‌ای از مطالب گفته‌شده از کانولوشن معکوس (Transposed Convolution)

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

با کافه‌تدریس علم داده را آسان بیاموزید!

علم داده ازجمله برترین حوزه‌های فناوری در قرن ۲۱ است. این حوزه از فناوری جزو آینده‌دارترین شاخه‌ها محسوب می‌شود که در فناوری‌های مختلف کاربرد دارد؛ همین‌طور جزو شاخه‌هایی است که بیشترین درآمد را در کشورهای مختلف جهان به خود اختصاص می‌دهد.

نکته‌ی مهم درباره‌ی دامنه‌ی نفوذ این شاخه‌ی علمی در دیگر دانش‌هاست؛ این تأثیر به‌حدی زیاد است که بسیاری پیش‌بینی می‌کنند در آینده بی‌بهره‌بودن از این دانش کار را برای افراد مختلف دشوار خواهد کرد، درست مانند اتفاقی که بیش از بیست سال پیش درمورد علم رایانه افتاد.

کافه‌تدریس با استفاده از پلتفرم جامع آموزشی ۳۶۰ درجه‌ی خود و بهره‌گرفتن از بهترین استادان کلاس‌های آنلاین علم داده را برگزار می‌کند. همین‌طور در کنار کلاس‌های آنلاین شما به ویدئوهای آموزشی متنوع و وبینارهای منظم آموزشی دسترسی دارید.

برای آشنایی با دوره‌های علم داده کافه‌تدریس و همین‌طور مشاوره رایگان درباره‌ی مسیر یادگیری علم داده روی این لینک کلیک کنید:

دوره جامع یادگیری علم داده (Data Science)