یکی از داغ ترین و مهم ترین بحث های حال حاضر در هوش مصنوعی و یادگیری ماشین، “شبکه عصبی کانولوشن” هست. واژه شبکه عصبی در سال ۲۰۱۲ به شهرت رسید. همانطور که در مقاله “یادگیری عمیق از گذشته تا امروز” اشاره کردیم، اغلب مدل های یادگیری عمیق از شبکه های عصبی مصنوعی استفاده می کنند به همین دلیل به این مدل ها، شبکه های عصبی عمیق هم گفته می شود.
اصطلاح “عمیق” به تعداد لایه های مخفی در شبکه ی عصبی اشاره دارد. شبکه های عصبی می توانستند 2 یا 3 لایه داشته باشند اما امروزه شبکه های عصبی عمیق می توانند به اندازه ی 150 لایه هم داشته باشند.
آنچه در این نوشته خواهیم داشت
شبکه عصبی کانولوشن چیست؟
یکی از مدل های رایج شبکه های عصبی عمیق، شبکه ی عصبی کانوولوشن یا پیچشی (convolutional neural networks) که به اختصار CNN یا ConvNet خوانده می شود. واژه شبکه عصبی در سال ۲۰۱۲، معروفیت فراوانی کسب کرد؛ در این سال الکس چریشفسکی (Alex Krichevsky)، با استفاده از شبکه عصبی توانست برنده جایزه ImageNet (المپیک سالیانه بینایی کامپیوتر) شود.
چریشفسکی توانست خطای دستهبندی (classification) را از ۲۶ درصد به ۱۵ درصد کاهش دهد. این کاهش در آن زمان بسیار چشمگیر بود و موفقیت بزرگی به حساب آمد. از آن زمان، شرکتهای متعددی از یادگیری عمیق به عنوان هسته اصلی محصولات خود استفاده کردهاند. فیسبوک از شبکه عصبی استفاده میکند تا تصاویر را به صورت خودکار تگگذاری نماید؛ گوگل نیز از این فناوری برای جستوجوی تصویری خود بهره میبرد. شرکتهایی مانند آمازون، اینستاگرام و پینترست نیز برای ارائهی پیشنهادهایی مناسب به کاربران خود، از شبکه عصبی کانولوشن (شبکه عصبی CNN) استفاده میکنند؛ با این حال بیشترین استفادهی شبکه عصبی در پردازش تصویر است.
چه لزومی به استفاده از شبکه عصبی کانولوشن داریم؟
دسته بندی تصاویر (image classification) در حقیقت فرایندی است که در آن تعدادی تصویر از ورودی میگیریم و در خروجی، کلاس آنها (سگ، ماشین، خانه و …) یا درصد احتمال تعلق به هر کلاس را اندازه گیری میکنیم. برای ما انسانها، کل این فرایند به صورت بدیهی و بدون اراده صورت می گیرد؛ در حقیقت از زمانی که متولد میشویم تا وقتی که به یک انسان بالغ تبدیل شویم، به مرور و به شکل طبیعی و غریزی این کار را به خوبی فرا میگیریم. ما میتوانیم تقریبا بدون هیچ اشتباهی تمام اشیای پیرامون خود را تشخیص دهیم. به طور دقیقتر، ما هر گاه به محیط پیرامون خود نگاه میکنیم، تمام اشیا را تشخیص داده و به هر یک از آنها یک نام (label) اختصاص میدهیم. انجام چنین عملی، یعنی تشخیص و نام گذاری اشیای موجود در یک محیط، برای کامپیوتر، آنقدر ها هم کار راحتی نیست!
ورودی و خروجی در یک شبکه عصبی کانولوشن یا CNN به چه صورتی است؟
وقتی یک کامپیوتر تصویری را به عنوان ورودی دریافت میکند، آن را به صورت آرایهای از اعداد میبیند. تعداد آرایهها به سایز تصویر (بر اساس پیکسل) بستگی دارد. برای مثال فرض کنید که اگر یک تصویر رنگی با فرمت JPG و اندازه ۴۸۰*۴۸۰ پیکسل را به کامپیوتر دهیم، آرایه جانشین آن دارای ۴۸۰*۴۸۰*۳ خانه خواهد بود (عدد ۳ به RGB برمیگردد). هر کدام از خانههای نیز عددی بین ۰ تا ۲۵۵ را میگیرند. این عدد شدت پیکسلی را نشان میدهد. این اعداد هر چند برای ما بیمعنی به نظر میرسند، اما در دسته بندی تصاویر با استفاده از شبکه عصبی کانولوشن، تنها ابزار در دست ما، چنین اعدادی هستند. ایده اصلی آن است که به رایانه آرایهای از اعداد شبیه آن چه توضیح دادیم، میدهیم و کامپیوتر نیز در خروجی چنین چیزی را مشخص میکند: این تصویر با احتمال ۸۰ درصد گربه، با احتمال ۱۵ درصد سگ و با احتمال ۵ درصد، پرنده است.
شیوه عملکرد شبکه عصبی کانولوشن چیست؟
تا این جای کار به مسئلهی و ورودی و خروجی در شبکه عصبی آشنا شدیم. بیایید به این فکر کنیم که به چه متدی مسئله را حل کنیم. چیزی که ما از کامپیوتر میخواهیم آن است که به تصاویر نگاه کند و ویژگیهای منحصر به فرد یک شیء خاص مثل کتاب را بداند و تشخیص دهد در تصویر، کتاب موجود است یا نه. ما انسانها نیز هنگام تشخیص اشیا، این فرایند را به صورت ناخودآگاه و بدیهی انجام میدهیم. ما مثلا وقتی یک سگ را میبینیم، برای آن که تشخیصش دهیم، ابتدا به اندام جزئیتر آن مانند گوشها، پنجهها، پاها و … توجه میکنیم و ضمن تطبیق با الگوهای موجود در ذهنمان، میفهمیم که در حال دیدن یک سگ هستیم. یک کامپیوتر نیز برای درک و تشخیص تصویرهای پیچیدهای مثل تصویر یک سگ، ابتدا ویژگیهای (feature) سادهتر آن تصویر مانند لبهها و خمها را تشخیص میدهد. در یک شبکه عصبی، لایههای متعددی وجود دارند؛ در هر یک از این لایهها، ویژگیهای خاصی تشخیص داده میشوند و در نهایت، در لایهی آخر، تصویر به طور کامل شناسایی میشود. روندی که توضیح دادیم، فرایند کلی نحوه کار یک شبکه عصبی کانولوشن بود؛ حال به جزئیات بیشتری میپردازیم.
ساختار شبکه عصبی پیچشی چیست؟
همانطور که اشاره کردیم، در یک شبکه عصبی پیچشی، کامپیوتر یک تصویر را به عنوان ورودی میگیرد؛ سپس این تصویر وارد یک شبکهی پیچیده با چندین لایهی پیچشی و غیر خطی میشود. در هر یک از این لایهها، عملیاتهایی انجام میشود و در انتها بر روی خروجی، یک کلاس یا درصد وقوع چند کلاس مختلف نشان داده میشود. قسمت سخت ماجرا، لایههای میانی و نحوه عملکرد آنهاست! در ادامه به بررسی مهمترین لایهها میپردازیم.
مفاهیم کاربردی در لایه اول در شبکه عصبی کانولوشن
بیایید نگاهی از بالا بیندازیم و ببینیم شبکه عصبی پیچشی (CNN) واقعا چه کار میکند. هر یک از فیلترهایی را که در قسمت قبلی به آنها اشاره کردیم، میتوان به عنوان یک شناساگر ویژگی (feature identifier) در نظر گرفت. منظور از ویژگی (feature) در این جا، چیزهایی مانند خط صاف، یک رنگ ساده یا یک انحناست. فرض کنیم فیلتر اول، یک فیلتر با ابعاد ۷*۷*۳ و یک شناساگر انحناست. این فیلتر در حقیقت یک ماتریس عددی مانند تصویر زیر است که درایههای این ماتریس در محلهایی که انحنا وجود دارد، مقادیر عددی بالاتری دارند. حال این فیلتر را بر روی قسمتی از تصویر مد نظرمان قرار میدهیم. پس از آن مانند تصویر زیر، درایه به درایه اعداد موجود در خانهها را با هم ضرب و حاصل ضربها را با یکدیگر جمع میکنیم.
همانطور که مشاهده میکنید، حاصل بهدستآمده، یک عدد بزرگ است. بزرگ بودن این عدد نشانگر آن است که در این ناحیه یک انحنا مانند انحنای فیلتر وجود دارد.
در تصویر زیر، حاصل ضرب عدد کوچکی میشود؛ علت آن است که فیلتر با تصویر ورودی تطابق ندارد. همانطور که اشاره کردیم، ما در پی آن هستیم که یک نقشه فعالسازی به دست بیاوریم؛ یعنی یک آرایه از اعداد با ابعاد ۲۶*۲۶*۱ (فرض کنیم فقط از یک فیلتر شناساگر منحنی استفاده کنیم). قسمت بالا و سمت چپ این نقشه فعالسازی، مقدار ۶۶۰ را خواهد داشت. این عدد بزرگ نشاندهندهی آن است که در ناحیهی خاصی از تصویر، با احتمال زیاد یک منحنی وجود دارد. توجه کنید که ما در این جا تنها از یک فیلتر استفاده کردیم. برای آن که اطلاعات بیشتری از تصویر استخراج کنیم، نیاز داریم تا از فیلترهای بیشتری استفاده کنیم؛ استفاده از فیلترهای بیشتر یعنی ابعاد بالاتر.
لایههای عمیقتر شبکه عصبی کانولوشن
در یک شبکه عصبی، علاوه بر لایهی توضیح داده شده، لایههای دیگری نیز وجود دارند. این لایهها وظایف و عملکردهای گوناگونی دارند. به طور کلی، لایههای داخلی، مسئول نگهداری و حفظ ابعاد و امور غیرخطی هستند. آخرین لایه در شبکه عصبی کانولوشن نیز از اهمیت خاصی برخوردار است.
لایه آخر در شبکه عصبی پیچشی
در لایه آخر یک شبکه عصبی کانولوشن، خروجی سایر لایهها، به عنوان ورودی دریافت میشود. خروجی لایه آخر هم یک بردار N بعدی است. N تعداد کلاسهای موجود است. به عنوان مثال اگر شبکهی شما، یک شبکه برای شناسایی اعداد باشد، تعداد کلاسها ده تاست؛ چون ده رقم داریم. در بردار N بعدی، هر مولفه، احتمال وقوع یک کلاس را نشان میدهد. کاری که لایه آخر یک شبکه عصبی کانولوشن می کند آن است که به ویژگیهای لایههای سطح بالا نگاه میکند و میزان مطابقت این ویژگیها را با هر کلاس مقایسه میکند؛ هر چه این مطابقت بیشتر باشد، احتمال وقوع آن کلاس، بالاتر معرفی میشود.
نحوه عملکرد شبکه عصبی کانولوشن چیست؟
تا به این جای کار اطلاعات زیادی درباره شبکه عصبی پیچشی به دست آوردید؛ اما احتمالا هنوز هم سوالات فراوانی دارید و سوالات جدید نیز در ذهنتان شکل گرفته است. سوالاتی از این قبیل که فیلترها چگونه ساخته میشوند یا …. کامپیوتر طی یک فرایند آموزش (training) میتواند مقادیر مناسب را به فیلترها تخصیص دهد. این فرایند backpropagation نام دارد. ما انسانها زمانی که متولد شدیم، هیچ درکی از اشیای پیرامونمان نداشتیم. به مرور زمان، اشیای مختلف را دیدیم و اطرافیان، نام آن اشیا را به ما گفتند و یاد گرفتیم. کامپیوترها نیز عملکردی مشابه دارند؛ به این معنا که در ابتدای کار، اعداد موجود در ماتریس فیلتر، رندم و تصادفی هستند. به مرور زمان و با نشان دادن تصاویر مختلف به کامپیوتر، اعداد موجود در فیلتر تصحیح میشوند تا به یک عملکرد قابل قبول برسند.
جمع بندی
در دنیای امروز شرکت هایی که فقط دیتای بیشتری را جمع آوری کنند پیروز میدان نیستند؛ بلکه باید بتوانند این دیتاها را تبدیل به اطلاعات کنند و نهایتا آنچه که مشتری می خواهد را ارائه دهد. شرکت های پیشرو چون فیسبوک و پینترست با استفاده از همین شبکه های عصبی، می توانند اطلاعات مورد نیاز کاربران را فراهم کنند. سایر شرکت ها نیز برای به دور نبودن از رقابت تلاش بر توسعه هرچه بیشتر این حوزه دارند. در آکادمی آمانج علاوه بر تعداد زیادی از مقالات مربوط به این حوزه، کلاس حضوری و غیرحضوری آموزش دیپ لرنینگ وجود دارد که می توانید با شرکت در این دوره، پا به این حوزه جذاب بگذارید.