گوگل نت (GoogleNet) یک شبکه‌ی عصبی کانولوشن عمیق ۲۲ لایه است. این شبکه عصبی نسخه‌ی تغییریافته‌ی شبکه‌ی Inception است که یک شبکه‌ی عصبی عمیق کانولوشن است و محققان Google آن را ساخته‌اند.
معماری گوگل‌نت در رقابت ILSVRC سال ۲۰۱۴ شرکت کرد و برنده‌ی رقابت شد. امروزه از گوگل‌نت برای انجام‌دادن وظایف مختلف بینایی ماشین (Computer Vision) استفاده می‌کنند. در این مطلب به‌صورت کامل شبکه‌ی عصبی گوگل‌نت (GoogleNet) را معرفی کرده‌ایم.

با پیشینه‌ی گوگل نت (GoogleNet) آشنا شوید!

پیش از معرفی کامل گوگل نت (GoogleNet) بد نیست با پیشینه‌ی شبکه‌های عصبی آشنا شویم. در اینجا به‌صورت مختصر تاریخچه‌ای از شبکه‌های عصبی آورده‌ایم.

شبکه‌های عصبی لی‌نت (LeNet-5) و الکس‌نت (AlexNet)

به‌عنوان یک متخصص یادگیری عمیق، احتمالاً قبلاً با شبکه‌های عصبی لی‌نت (LeNet-5) و الکس‌نت (AlexNet) روبه‌رو شده‌اید. شبکه‌ی عصبی کانولشنی لی‌نت (LeNet-5) را در سال ۱۹۹۸ Yann LeCun معرفی کرد. لی‌نت (LeNet-5) استفاده از شبکه‌های عصبی کانولوشنی (CNN) را برای وظیفه‌ی طبقه‌بندی تصاویر (Image Classification) معرفی کرد.

الکس‌نت (AlexNet)

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

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

معماری الکس نت (AlexNet) را به‌صورت کامل بشناسید!

شبکه‌ی کانولوشنی (CNN)

معرفی شبکه‌ی کانولوشنی (CNN) مجموعه‌ی داده‌های بزرگتر و منابع محاسباتی مناسب به توسعه‌ی سریع راه‌حل‌های کارآمد برای وظایف حوزه‌ی بینایی ماشین (Computer Vision) انجامید.

معماری GoogleNet

اینجا بود که محققان دریافتند که افزایش لایه‌های شبکه به افزایش عملکرد چشمگیر آن می‌انجامد، اما افزایش لایه‌ها برای ایجاد شبکه‌های بزرگتر هزینه داشت. شبکه‌های بزرگ اغلب مستعد مشکل بیش برازش (Overfitting) هستند و با مشکل محوشدگی گرادیان(Vanishing Gradient)  یا انفجار گرادیان (Exploding Gradient) مواجه هستند.

به‌همین دلیل معماری GoogleNet معرفی شد که عمدتاً ازطریق استفاده از ماژول Inception بیشتر مشکلات شبکه‌های بزرگ را برطرف کرد.

ماژول Inception

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

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

معماری گوگل‌نت (GoogleNet) چگونه است؟

معماری گوگل‌نت (GoogleNet)  از ۲۲ لایه‌ی تشکیل شده است (با درنظرگرفتن لایه‌های ادغام (Pooling Layers)، ۲۷ لایه). از این تعداد ۹ لایه‌ی آن ماژول Inception است.

معماری گوگل نت (GoogleNet)

معماری گوگل‌نت (GoogleNet) در این جدول آمده است:

جدول معماری گوگل نت (GoogleNet)
  • Type: به اسم لایه مدنظر اشاره می‌کند؛
  • Patch Size: منظور همان سایز فیلتر است؛
  • Stride: به مقدار گام هر فیلتر اشاره می‌کند؛
  • Output Size: اندازه‌ی خروجی هر لایه را مشخص می‌کند؛
  • Depth: تعداد لایه‌های هر عنصر این معماری را نشان می‌دهد؛
  • #1×1 #3×3 #5×5: اندازه‌ی فیلترهایی را نشان می‌دهد که در ماژول inception استفاده شده است؛
  • #3X3 reduce #5×5: تعداد فیلترهای یک در یک را نشان می‌دهد که قبل از هر لایه کانولوشن به کار رفته است؛
  • Pool Proj: تعداد فیلترهای یک در یک را نشان می‌دهد که بعد از هر لایه‌ی ادغام در ماژول Inception استفاده شده است؛
  • Params: تعداد پارامترهای یادگیری موجود در هر لایه را مشخص می‌کند؛
  • Ops: تعداد عملیات ریاضی را نشان می‌دهد که در هر لایه انجام می‌شود.

لایه‌های تشکیل‌دهنده‌ی معماری گوگل‌نت (GoogleNet)

عکس ورودی شبکه اندازه‌ای برابر با ۲۲۴ در ۲۲۴ دارد. در این شکل می‌توانیم لایه‌های تشکیل‌دهنده‌ی معماری گوگل‌نت (GoogleNet) را مشاهده کنیم:

معماری گوگل‌نت (GoogleNet)

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

همان‌طور که در این شکل مشخص است اولین لایه‌ی معماری گوگل‌نت(GoogleNet)  یک کانولوشن است. این لایه از فیلتر با سایز ۷ در ۷ استفاده می‌کند که در مقایسه با فیلترهای دیگر شبکه، نسبتاً بزرگ است. هدف اصلی این لایه کاهش اندازه‌ی تصویر ورودی بدون ازدست‌دادن اطلاعات فضایی (Spatial Information) است. در این لایه اندازه‌ی تصویر ورودی نصف و برابر با ۱۱۲ در ۱۱۲ می‌شود.

لایه‌ی ادغام حداکثر (Max pooling)

بعد از اولین لایه‌ی کانولوشن یک لایه‌ی ادغام حداکثر (Max pooling) داریم که اندازه‌ی عکس را بار دیگر کوچک می‌کند و آن را به ۵۶ در ۵۶ می‌رساند.

بار دیگر یک لایه کانولوشن و ادغام حداکثر (Max pooling) داریم که اندازه‌ی عکس را قبل از رسیدن به اولین لایه‌ی Inception به ۸/۱ تبدیل می‌کند؛ البته نکته‌ی مهم این است که تعداد نقشه‌ی ویژگی‌ها با کوچک‌ترشدن اندازه‌ی تصویر بیشتر می‌شود؛ همان‌طور هم که در جدول اول آمده است، از ۶۴ در اولین لایه‌ی کانولوشن به ۱۹۲ در دومین لایه‌ی کانولوشن می‌رسد.

ماژول‌های Inception در معماری گوگل نت (GoogleNet)

بعد از دو لایه‌ی کانولوشن به ماژول‌های Inception نوبت می‌رسد. معماری گوگل‌نت (GoogleNet) ۹ ماژول Inception را در برمی‌گیرد که در شکل اول نشان داده شده است.

باید این نکته را نیز اضافه کنیم که میان ماژول‌های Inception دو لایه‌ی ادغام حداکثر (Max pooling) داریم. هدف استفاده از این لایه‌های ادغام حداکثر (Max pooling) این است که اندازه‌ی ورودی را در طول حرکت آن در شبکه کاهش دهیم. این کار با کاهش عرض و ارتفاع تصویر اتفاق می‌افتد.

علاوه‌براین در داخل ماژول‌های Inception نیز تصویر ورودی کاهش اندازه خواهد داشت. همه‌ی این‌ها درنهایت به کاهش بار محاسباتی شبکه کمک بزرگی می‌کند.

لایه‌ی ادغام میانگین (Average pooling)

همان‌طور که در شکل اول پیداست، بعد از ماژول‌های Inception لایه‌ی ادغام میانگین (Average pooling) را داریم. این لایه از تمامی نقشه‌ی ویژگی‌های ایجادشده به‌دست ماژول‌های inception میانگین می‌گیرد و عرض و ارتفاع ورودی را به ۱ در ۱ تبدیل می‌کند.

لایه‌ی دراپ‌اوت (Dropout)

درنهایت یک لایه‌ی دارپ‌اوت(Dropout)  با نرخ چهل درصد قبل از لایه‌ی خطی(Linear Layer)  استفاده شده است. لایه‌ی دراپ‌اوتDropout) )، درواقع، یک تکنیک تنظیم‌سازی (Regularization technique) است که در حین آموزش شبکه استفاده می‌شود تا از مشکل بیش برازش (overfitting) در شبکه جلوگیری شود.

لایه‌ی خطی

لایه‌ی خطی ۱۰۰۰ نود را دربرمی‌گیرد که مطابق با ۱۰۰۰ کلاس موجود در مجموعه‌ی داده ImageNet در نظر گرفته شده است.

لایه‌ی سافت‌مکس (Softmax)

آخرین لایه یک لایه‌ی سافت‌مکس (Softmax) است. این لایه از تابع سافت‌مکس (softmax) استفاده می‌کند، یک تابع فعال‌سازی برای استخراج توزیع احتمال مجموعه‌ای از اعداد در یک بردار ورودی. خروجی یک تابع فعال‌سازی سافت‌مکس برداری است که در آن مجموعه مقادیر آن احتمال یک کلاس یا یک رخداد را نشان می‌دهد. مجموع تمامی مقادیر با هم برابر با ۱ است.

تا اینجا لایه‌های معماری گوگل‌نت (GoogleNet) را بررسی کردیم، اما هنوز کار تمام نشده است؛ لازم است درباره‌ی عنصر دیگری نیز صحبت کنیم که در این معماری استفاده شده است. عنصری که از آن صحبت می‌کنیم طبقه‌بندی‌کننده‌ی کمکی (Auxilary Classifier) نام دارد.

طبقه‌بندی‌کننده‌ی کمکی (Auxilary Classifier)

همان‌طور که پیش‌تر هم اشاره کردیم، یکی از مشکلات شبکه‌های بزرگ مشکل محوشدگی گرادیان (Vanishing Gradient) است. این مشکل هنگامی اتفاق می‌افتد که به‌روزرسانی وزن‌هایی که ازطریق انتشار روبه‌عقب (Backpropagation) انجام می‌شود در لایه‌های اولیه بسیار ناچیز باشد و درنتیجه، مقدار گرادیان نسبتاً کوچک شود؛ اگر بخواهیم ساده‌تر بگوییم آموزش شبکه متوقف می‌شود.

به‌همین جهت طبقه‌بندی‌های‌کمکی (Auxilary Classifier) به لایه‌های میانی معماری، یعنی لایه‌ی هشتم (Inception 4 (a)) و لایه‌ی یازدهم (Inception4 (d))، اضافه می‌شوند.

عملکرد طبقه‌بندی‌کننده‌ی کمکی (Auxilary Classifier)

طبقه‌بندی‌های کمکی فقط در حین آموزش به شبکه اضافه می‌شوند. کاری که این طبقه‌بندی‌کننده‌ها انجام می‌دهند طبقه‌بندی ورودی در لایه‌های میانی شبکه است که خطای (loss) محاسبه‌شده را نیز به خطای کلی(Total loss)  شبکه اضافه می‌کنند. خطای به‌دست‌آمده در طبقه‌بندی‌کننده‌های کمکی (Auxilary Classifier) وزن‌دار است و وزنی برابر با ۰/۳ دارد.

در شکل زیر نمایی از یک طبقه‌بندی‌کننده‌ی کمکی را می‌بینیم:

شکل طبقه‌بندی‌کننده‌ی کمکی

در این شکل مشخص است که یک طبقه‌بندی‌کننده کمکی لایه‌ی ادغام میانگین (Average pooling layer)، دو لایه‌ی کاملاً متصل (Fully Connected layer)، یک لایه‌ی دراپ‌اوت (dropout) با نرخ ۷۰ درصد و درنهایت یک لایه‌ی خطی (Linear layer) و لایه‌ی سافت‌مکس (softmax) دارد.

معماری کامل گوگل‌نت

حال که با تمامی جزئیات معماری گوگل‌نت (GoogLeNet) آشنا شدیم، بهتر است به شکل کلی این معماری نگاهی بیندازیم:

معماری کامل گوگل‌نت (GoogleNet)

جمع‌بندی مطالب درباره‌ی معماری گوگل‌نت (GoogLeNet)

معماری گوگل‌نت (GoogLeNet) در چالش طبقه‌بندی ILSVRC 2014 در مقام اول قرار گرفت و عملکرد خوبی را از خود نشان داد. درک معماری GoogLeNet برای هر متخصص یادگیری عمیق که به دنبال درک شبکه‌های عمیق در حوزه‌ی بینایی ماشین (Computer Vision) است بسیار اهمیت دارد.

گوگل‌نت (GoogLeNet) اکنون یک معماری اصلی در رایج‌ترین کتابخانه‌های یادگیری ماشین (ML)، مانند TensorFlow، Keras، PyTorch و غیره، است.

در این مطلب جزئیات این معماری را بررسی کردیم و دیدیم که این معماری با ارائه‌ی چندین عنصر جدید به حل مشکل اصلی شبکه‌های بزرگ، یعنی همان محوشدگی گرادیان (Vanishing Gradient)، پرداخته است.

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

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

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

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

کلاس‌های آنلاین علم داده کافه‌تدریس