شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۳

سلام !

قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۲ ) بزن و بعد بیا برای ادامه کار .


https://vrgl.ir/FsNCF


خب همونطور که در قسمت قبلی آموزش گفتیم حالا قرار هست در ادامه ی راه حل های حل یک مسئله ماشین لرنینگ با داده کم ، به را حل ۷ ام و ۸ ام بپردازیم:

راه حل ۷ ام و ۸ ام تقریبا به یک موضوع میپردازند و اون هم تولید داده های اضافی هست . این که روی مسائل با داده های کم کار کرده و اون ها رو بهینه کنیم ، قطعا کار چالش برانگیز و قابل ستایشی هست اما گاهی میشه با چند تکنیک ، همون داده های اندک را گسترش بدیم .

۷) راه augmentation :

به انواع و اقسام تکنیک هایی که برای تولید " training sample " جدید از روی نمونه ی اصلی انجام میشه میشه augmentation گفته میشه.

انواع اقسام کار هایی که میشه روی یک تصویر انجام داد و تصاویر جدید از روی اون تولید کرد مثل :

اعمال crop,flip,rotate,change brightness و ....

منبع
منبع

با انجام این اعمال روی تصاویر ، میتوان تصاویر جدید زیادی تولید کرده و به training set خود اضافه کنیم .

برای این کار میشه از کتاب خانه هایی در پایتون استفاده کرد که بصورت ذخیره کردن تصاویر روی حافظه ، یا به صورت آن تایم این کار رو صورت داده و همزمان کار یادگیری انجام بده .


۸) راه data generation :

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


  • روش اول : SMOTE

یکی از روش های برطرف کردن بیش برازش یا همون overfitting در مسائل ،‌استفاده از این الگوریتم جهت برای دیتا ست های هست که بالانس داده در آنها رعایت نشده. مثلا برای تشخیص موز از سیب ۱۰۰۰ عکس موز و ۲۰۰ عکس سیب داریم یا باید downsample کرده و به صورت رندوم ( یا روش دیگر ) عکس سیب ها را کم کنیم ( که خب بخشی از داده ها از دست میره ، خصوصا اگه با مسئله few data مواجه باشیم ، داده ها برای ما اهمیت بالایی داره و نباید از دست داد ) یا با روش upsample تعداد سیب ها را به ۱۰۰۰ برسانیم تا تعادل ایجاد شود.

تمرکز SMOTE روی کلاسی است که اقلیت تعداد را داشته و با درون یابی نقاط همسایه ها ، داده های جدید رو تولید میکنه . SMOTE از الگوریتم K-Nearest Neighbors برای پیدا کردن همسایه ها استفاده میکنه .

منبع
منبع


  • روش دوم : Borderline SMOTE

در این روش ، کار همانند همان SMOTE ساده است ، منتهی نقاطی که تولید میشوند در ناحیه ی مرزی بین دو کلاس هست ، جایی که امکان اشتباه دسته بندی شدن یک نقطه زیاده . در اون نقاط داده هایی رو تولید میکنه تا این اشتباه بتونه با افزایش حجم داده جبران بشه.

منبع
منبع


مثلا در تصویر بالا اگر X13 و X12 از کلاس A و نقط های X14 و X11 از کلاس B باشند ، چون X1 در مرز این دوکلاس هست ، ماشین برای انتخاب دسته درست دچار مشکل خواهد شد، بنابراین از الگوریتم Borderline SMOTE برای تولید دیتا در اطراف X1 استفاده میکنیم .

  • روش سوم : ADASYN

این روش نیز همانند روش SMOTE بوده با این تفاوت که ،‌برای تولید داده های جدید ، چگالی داده ها در یک نقطه را در نظر گرفته و داده های جدید را در نقاطی که دارای چگالی کمتری باشند تولید میکند .

منبع
منبع

مثلا در تصویر بالا نقطه های x1 و x4 در منقطه ی کم تراکم هستند و داده های مصنوعی s1 تا s4 در این ناحیه ها تولید و کلاس آنها از جنس کلاس اقلیت ( در اینجا دایره های آبی است )

  • روش چهارم : GANs

الگوریتم GANs مخفف Generative Adversarial Networks به معنای "شبکه های مولد متخاصم!" هست. حالا کار این الگویتم چیه ؟

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

الگوریتم gan تلاش میکند داده هایی را تولید کند که از داده های اصلی قابل تشخیص نباشد.

افرادی که در تصویر بالایی میبینید ، وجود خارجی ندارند !‌چهره این افراد با همین الگوریتم توسط nvidia در سال ۲۰۱۷ ساخته شد. اپلیکیشن های face app و سرگرمی دیگر از همین الگوریتم استفاده میکنند.

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

  • روش پنجم : Variational Autoencoder

این الگوریتم که مخفف AVE می باشد، الگوریتمی است که در تصاویر ، ویژگی های پنهان شده ( latent attributes ) را بر اساس یک توزیع احتمال بررسی میکند.

منبع
منبع

مثلا برای تصاویر بالا ،اگر ویژگی لبخند زدن را بررسی کنیم، مقادیر discrete (گسسته ) توصیف جامعی از لبخند نیست اما توزیع احتمالی یک بازه را برای آن در نظر میگیرد. و لبخند ژکوند مونالیزا را با احتمال ۱۰۰ درصد رد نمیکند!

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

در ساده ­ترین حالت یک خودرمزگذار شامل یک encoder (رمزگذار) و decoder (رمزگشا) به همراه تنها یک لایه پنهان می­باشد. ورودی به encoder داده شده و خروجی از decoder استخراج می­شود. در این نوع شبکه به جای آموزش شبکه و پیش­بینی مقدار تابع هدف در ازای ورودی X ، خودرمزگذار آموزش می­بیند که ورودی خود را بازسازی کند.

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

روش ششم : روش های غیر تکنیکال

علاوه بر روش های گفته شده در بالا ،میتوان از یکسری روش های غیر تکنیکالی برای افزایش داده ها استفاده کرد : مثل:

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

نظر سنجی و ...

خلاصه قسمت سوم :

در این قسمت از موضوع augmentation شروع کردیم و توضیح دادیم که چی هستبعد از اون به مبحث data generation و انوع روش های اون SMOTE , BSMOTE , ADASYN , GANs و VAE پرداختیم .

تا اینجا در این سه قسمت ، دید کامل و کلی نسبت به دسته بندی موضوعاتی که در این زمینه هست پیدا کردیم و در مورد ۸ روش و دسته بندی برخورد با مسائل با دیتای اندک در این سه قسمت اطلاعات کسب کردیم :

۱- پیچیدگی کم ۲- حذف داده پرت ۳-مهندسی بهینه کردن فیچر ها ۴-روش ترکیبی که خود روش ترکیبی به چهار روش تقسیم شد : voting-staking-bagging-boosting (در قسمت ۱ ) ۵-cross validation و ۶- transfer learning ( قسمت ۲ ) و نهایتا ۷- augmentation و ۸- data generation

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

نکته : برای جمع آوری این مطلب ، از نتایج تجربی نویسنده و همچنین سایت https://neptune.ai و منابع زیر تصاویر استفاده شده است.

از اینکه تا این ۳ قسمت اصلی همراه ما بودید ، سپاسگذارم و منتظر نظرات و پیشنهادات شما هستم.

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