هوشمندسازی فرآیندهای زندگی https://partdp.ai/
معرفی کپسول نت (قسمت دوم)
درپست قبلی اشاره کردیم که شبکه های کانولوشنی ضعف هایی اساسی دارند. و اشاره کردیم که برای حل این مشکل از ایده معکوس گرافیک کامپیوتری استفاده شده است. در ادامه مطالب گذشته به بررسی این راهکار که تحت عنوان کپسول نت شناخته میشود، خواهیم پرداخت.
شاید از خودتان بپرسید کپسول چیست ؟ و چرا اصلا کپسول؟ همانطور که میدانید خروجی هر نورون در شبکه های عصبی یک اسکالر (یک عدد اعشاری) است. در شبکه های کانولوشنی نیز هر عدد بدست آمده در واقع کانولوشن بین یک کرنل(kernel)(هر کدام از فیلتر های کانولوشنی استفاده شده برای استخراج ویژگی را کرنل میگویند) قسمتی از حجم ورودی است. از ترکیب شدن این ماتریس ها روی هم (در اصطلاح stack شدن آنها) خروجی لایه کانولوشنی ایجاد میشود. سپس max pooling بر روی این ماتریس های اعمال میشود ( اگر پست قبلی را دنبال کرده باشید ضعف ها و قوت های آن را برشمردیم. مهم ترین قوت آن مقاومت در برابر تغییرات اندک از یک زاویه دید خاص بود که در ازای آن اطلاعات زیادی از تصویر که میتوانست به کار بیاید از دست میرفت.) گفته شد که به دلیل از بین رفتن اطلاعات زیاد این مکانیسم، مکانیسم خوبی نبود. پس تصمیم گرفتیم به جای آن از کپسول بهره بگیریم. کپسول در زبان انگلیسی به معنای پوشش و محافظ است و به این دلیل به کار برده شده است که توسط این روش تمام ویژگی های مهم در شکل یک بردار (vector) حفظ میشود.(یکی از مهم ترین تفاوت ها در همین جمله مشخص شد و آن شکل دادگان است که به صورت یک بردار ذخیره میشود،در حالی که در حالت قبل مقادیر به صورت عددی(اسکالر) بود و ویژگی بردار بودن با خود خاصیت اندازه و جهت را همراه خواهد داشت. )
ویژگی بردار بودن (همانطور که ذکر شد) با خود خاصیت ها مهمی دارد. یکی از ویژگی های با اهمیت آن داشتن جهت است. زمانی که ویژگی ها در جای جای تصویر تغییر میکنند،اندازه بردار حفظ میشود اما جهت آن تغییر میکند. تصویر کج و کوله صورت زیر را ببینید همانطور که واضح است خاصیت اسکالری شبکه کانولوشنی نتوانسته بود ویژگی ها مربوط به جایگاه را تشخیص دهد. (چون جهت برای آن بی معنی بود.)
کپسول ها چگونه کار میکنند ؟
برای آنکه به نحوه عملکرد کپسول ها پی ببریم بیایید تا نگاهی به جدول زیر بیندازیم.
اگر از شبکه های سنتی استفاده میکردید، خروجی نهایی یک عدد بود. این عدد از مجموع وزن دار نورون های لایه قبل ساخته میشود و سپس با عبور از یک تابع غیر خطی فعالساز(non linear activation function) به خروجی منتقل پیدا میکند. (سمت راست ترین ستون نشان دهنده همین موضوع می باشد.)
اما در کپسول با چهار قسمت مواجهیم که عبارت هستند از :
1- ضرب ماتریسی بردار های ورودی با ضرایب وزنی
2- وزن دهی عددی به بردار های ایجاد شده در مرحله قبل
3- جمع وزن دار بردار های مرحله اول
4- غیرخطی سازی برداری
اما وظیفه هر کدام از این مراحل چیست ؟
به تصویر زیر نگاه کنید. فرض کنید سه بردار ورودی (u1,u2,u3)عبارت هستند از چشم، دهان، دماغ و بردار خروجی(uj) در نهایت محل صورت را تشخیص خواهد داد. با ضرب ماتریس وزنی W در این بردار های ورودی در عمل ویژگی ها مربوط به صورت ساخته خواهد شد. با ضرب این ماتریس u_hat هایی ساخته شده است منظور از این مقادیر چه هستند؟ سوال بسیار خوبی است!هر کدام از مقادیر u_hat در واقع یک احتمال شرطی را بیان میکنند. برای مثال اگر u1 چشم باشد u_hat_1 یعنی احتمال صورت به شرط آن که ورودی u1 چشم باشد.
به این ترتیب به اندازه بردار های ورودی،احتمال شرطی برای صورت خواهیم داشت. اگر به تصویر زیر نگاه کنید این موضوع به خوبی نشان داده شده است.
وزن دهی به بردار های ایجاد شده :
شاید خلاقانه ترین قسمت این مقاله مربوط به همین قسمت باشد. برای یافتن این مقادیر یعنی مقادیر مربوط به c از الگوریتم dynamic routing استفاده شده است. این مقادیردر حین یادگیری به روش backpropagation آپدیت میشوند، اما روش آپدیت آن ها به واسطه روش dynamic routing می باشد. در واقع در این مرحله هدف آن است که تصمیم گرفته شود که کپسول های لایه قبلتر به کدام کپسول لایه بالاتر متعلق باشد؟ روش dynamic routing این تصمیم گیری را به عهده میگیرد . در ادامه توضیحات مفصلی در مورد این الگوریتم ارائه خواهیم داد. تا به این لحظه از ما بپذیرید که مقادیر c به این منظور وجود دارند که مشخص کنند هر کپسول لایه پایین چه میزان مرتبط با کپسول های لایه بعد هستند.
جمع برداری :
این قسمت دقیقا همانند روش های عادی شبکه های عصبی است که در آن خروجی از ترکیب خطی ورودی های بوجود می آید.
غیرخطی سازی برداری :
در نهایت مانند شبکه های عصبی این ترکیب خطی ورودی ها باید از یک تابع فعالساز غیر خطی عبور کند.
همانطور که در تصویر بالا مشاهده میکنید تابع مورد نظر آورده شده است. این تابع دو قسمت اساسی دارد قسمت سمت راست آن برای نرمالسازی است و قسمت سمت چپ وظیفه غیرخطی سازی را برعهده دارد.به این صورت که اگر اندازه بردارS به صفر نزدیک باشد اندازه کپسول خروجی کوچک و هرچه اندازه بزرگ باشد اندازه کپسول خروجی به یک نزدیکتر خواهد بود.
تصویر زیر به وضوح موارد گفته شده را به صورت خلاصه نمایش میدهد.
اگر فراموش نکرده باشید قول دادیم که الگوریتم dynamic routing را توضیح خواهیم داد حال به این مرحله رسیده ایم :
نکته مهمی که حائز اهمیت است آن است که در واقع ضرایب cij نشان دهنده آن است که کپسول i ام از لایه l با چه احتمالی به کپسول j ام از لایه l+1 متعلق است.
تعداد تکرار های بوسیله r نمایش داده میشود. منظور از l لایه قبل کپسول است و اگر فراموش نکرده باشید منظور از u_hat مقدار بدست آمده پس از ضرب ماتریسی در کپسول ورودی می باشد. در نگاه اول متوجه میشوید که مقدار به نام b وجود دارد. این مقدار مقدار متغیر محلی در معادلات است که برای آپدیت کردن وزن های c به کار برده میشود. و در ابتدا نیز مقدار صفر به آن اختصاص داده شده است.
اگر به خط 4 توجه کنید متوجه میشوید که از تابع softmax استفاده شده است. علت آن است که اولا تمام مقادیر بزرگتر از یک باشند ثانیا مجموع وزن های متعلق به کپسول i یک باشد و ثالثا خاصیت احتمالی که در ابتدا ذکر شود وجود داشته باشد. در زیر معادله مربوط به softmax آورده شده است.
حال در خط 5 از جمع وزن دار کپسول های لایه قبل کپسول لایه بعد به دست می آید. و سپس در خط 6 مقدار آن وارد تابع فعال ساز غیرخطی میشود.
حال وقت آن رسیده است که وزن های مربوط به bو به تبع آن وزن مربوط به c آپدیت شود. برای این کار ازمیزان شباهت استفاده میشود یعنی اگر بردار تولید شده از مرحله قبل (پس از ضرب وزن دار) در راستای کپسول لایه بعد باشد باید وزن بیشتر به cij مربوط اختصاص داده شود. چه چیزی بهتر از ضرب داخلی که میزان شباهت دو بردار را با هم می سنجد ؟ تصویر زیر به خوبی این مسئله را نشان میدهد.
حال شاید سوال پرسیده شود این عمل چند بار بایستی تکرار شود؟ نتایج نشان داده اند که r برابر 3 میتواند مناسب باشد.
تبریک میگویم حالا شما یکی از کسانی هستید که توانسته اند کپسول نت را یادبگیرند. اگر به دنیال آن هستید که شبکه آن را به طور کامل ببینید حتما به مقاله اصلی مراجعه کنید.
مطلبی دیگر از این انتشارات
بسته psych در R Language
مطلبی دیگر از این انتشارات
صفر تا صد پردازش تصویر در پایتون | اپیزود 01
مطلبی دیگر از این انتشارات
جدول تناوبی علمداده!