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

سلام !

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

https://virgool.io/@omidesf485/%D8%B4%D8%B1%D9%88%D8%B9-%DB%8C%DA%A9-%D9%85%D8%B3%D8%A6%D9%84%D9%87-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D9%84%D8%B1%D9%86%DB%8C%D9%86%DA%AF-%D8%A8%D8%A7-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%DB%B6-qexp54lpefrz

خب، در ادامه ی قسمت ۷ ، به جمع بندی قسمت های ۴ تا ۶ که مربوط به بررسی survey ای که در مورد few shot learning بود میپردازیم. در حقیقت هدف ما مطرح کردن موضوعاتی چون کاربرد ها می باشد.

1) بررسی applications :

مبحث few shot learning در حوزه هایی همچون پردازش زبان طبیعی ، پردازش سیگنال و... کاربرد دارد .

  • در Computer Vision :‌ بیشترین هدف FSL در کاربرد های بینایی ماشین است. از جمله character recognition ، image classification در این دو زمینه دقت های بسیاری بالایی روی پایگاه داده های Omniglotو mini ImageNet بدست آمده و جای پیشرفت خیلی زیادی ندارد .

اخیرا یک دیتاست بزرگ و متنوع ساخته شده از چندین پایگاه داده تصویری مختص few shot learning ساخته شده است . در این رفرنس میتوانید آنرا دانلود کنید .

زمینه های دیگری نیز در computer vision نیز وجود دارد نظیر : motion prediction وaction localization و...

  • در Robotics : فیوشات در رباتیک نقش بسیار مهمی دارد برای مثال یادگیری حرکت بازو ها با استفاده از تقلید از نشان دادن این حرکت برای یک بار به ربات از این نمونه ها است. نمونه های دیگر visual navigation , continuous control و... است .
  • در Natural Language Processing : کاربرد های زیادی نظیر parsing , translation , sentence completion ، پیش بینی قصد کاربران ، FewRel که کمبود داده های benchmark را برای تسک های fsl در پردازش زبان طبیعی برطرف میکند.
  • در Acoustic Signal Processing : جدا از اولین تلاش های Fsl در تشخیص کلمات از روی صدا کاربرد هایی نظیر سنتز صدا مطرح هستند. یک کار بسیار محبوب شبیه سازی صدای کاربر از روی چند نمونه صدای کاربر میباشد.
  • دیگر کاربرد ها :‌

از کاربرد های اخیر میتوان به :‌ کشف دارو های جدودید با few-shot - در سرچ برخلاف رندوم یا حریصانه one-shot architecture search که با OAS شناخته میشود میتواند نتایج خوبی فقط با یک بار سرچ بدست آورد اشاره کرد.


2) مقایسه:

مقایسه ی تعدادی از متد های معرفی شده در سه مقاله ی اخیر رو روی دو پایگاه داده ی معروف omniglot و mini ImageNet را در تصویر زیر میتونید مشاهده کنید.

جدول یک - مقایسه ی accuracy مدل های مختلف ( سبز ها از طبقه ی model  و قرمز های algorithm )
جدول یک - مقایسه ی accuracy مدل های مختلف ( سبز ها از طبقه ی model و قرمز های algorithm )

بر اساس میزان دانش قبلی موجود ، سرعت learn شدن مسئله ، تعداد task های مشابه با Task فعلی و دقت مورد نیاز در مقابل زمان اجرا و میزان محاسبات ، مدل انتخابی متفاوت است .

3) نحوه انتخاب یک متد و مدل مناسب برای مسئله ی ماشین لرنینگ :
در برخورد با یک مسئله ماشین لرنینگ هیچ گاه تمامی متدهای ممکن را اجرا نمیکنیم تا با مقایسه ی دقت های حاصل از آن بهترین متد را انتخاب کنیم. این کار هم زمان بر بوده و هم هزینه ی زیادی تحمیل میکند.بنابراین برای اینکه دامنه ی تعداد متد هایی که مناسب مسئله ی ما هستند را محدود تر کنیم و انتخاب بهتری داشته باشیم ابتدا باید مسئله را درست تعریف کنیم .

به طور کلی جدای از اینکه مسئله ی ما few shot هست یا نه ، ابتدا بایستی کار های زیر را انجام دهیم.

۱- روی دیتاست عمل Visualization of Data را انجام دهیم

یعنی اینکه با استفاده از دستورات مناسب plot داده ها را رسم کرده چنانچه :

هم پوشانی (overlap) داده ها زیاد بود اولین انتخاب KNN و بعد از آن Random Forest algorithm که از نوع non-linear classification است انتخاب میشود.

اگر بخواهیم داده ها را با یک خط مستقیم از هم جدا کنیم Logistic regression یا Support Vector Machine انتخاب های مناسبی هستند.

۲- بررسی حجم داده های مسئله

چنانچه با استفاده از دستورات مناسب حجم دیتاست را بدست آوردیم ، دو حالت وجود دارد :

۲-۱ ) مسئله large shot است . در این صورت تعداد کافی داده وجود داشته و میتوانیم از انواع و اقسام روش های ممکن ( البته با در نظر گرفتن معیار های دیگر نظیر سرعت اجرا ، سختی پردازش و .... ) استفاده کرد.

۲-۲) مسئله few shot/one shot/zero shot است.

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

اگر قسمت های قبلی را دنبال کرده باشید متوجه این موضوع شده اید که در مورد چنین مسائلی ابتدا باید تعیین کنیم که طبقه بندی انتخابی ما برای برخورد با مسئله چیست ؟

سه دسته کلی داریم :‌ ۱- یا باید روی دیتا کار کنیم ۲- یا روی مدل ۳- یا نهایتا روی الگوریتم

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

حالا فرض کنیم یک دیتاست در اختیار شما قرارداده اند و شما میخواهید یکی از این دسته بندی ها را انتخاب کنید . معیار شما برای انتخاب چیست ؟

شاید اولین موضوعی که باید در اینگونه مسائل بررسی کنیم این است که آیا ، یک task مشابه از قبل ترین شده در اختیار داریم که بتوانیم از آن به عنوان prior knowledge استفاده کرد یا خیر.

اگر چنین task ای از قبل نباشد، میبایست اولین انتخاب ما augmentation باشد.

حالا چنانچه بتوانیم یک دیتاست مشابه با تعداد داده ی زیاد پیدا کنیم، میتوانیم از روش سوم مطرح شده در قسمت ۴ آمورزش روی دیتا یعنی Transforming Samples from Similar Data Sets استفاده کنیم اما اگر دیتاستی که در اختیار داریم با لیبل ضعیف یا بدون لیبل باشد از روش دوم مذکور و نهایتا چنانچه هیچ دیتاستی هم در اختیار نداشته باشیم از روش اول transforming samples from D_train و روش های معمول flip,crop و ... که در قسمت ۴ مطرح شد استفاده میکنیم .


نکته : این موضوع که اگر task مشابه از قبل ترین شده نداشته باشیم از روش augmentation استفاده میکنیم به این معنا نیست که اگر موجود باشد دیگر از این روش ها استفاده نمیکنیم. از آنجایی که عموما افزایش داده های مسئله به روش های مذکور منجر به افزایش accuracy میشود ، چنانچه از نظر قدرت پردازشی و زمانی مشکلی نداشته باشیم میتوانیم در متد های دیگر قبل از اجرای آنها ، ابتدا augmentation انجام دهیم.


خب تا اینجا تکلیف دسته ی دیتا و زمان استفاده از متد های اون مشخص شد. حالا در قدم بعدی چنانچه دانش قبلی از مسائل مشابه داشته باشیم باید بین متد های الگوریتم یا مدل انتخاب کنیم.

  • چنانه دانش قبلی دارای task های مشابه باشند multi-task learning برای محدود کردن فضای H بسیار کار آمد هست.اما از این نظر که ‌ task جدیدی را بخواهیم اضافه کنیم مناسب نیست چون باید کل مدل از نو آموزش داده شود.
  • زمانی که یک دیتاست داده ی بزرگ و دارای کلاس ها و نمونه های کافی از قبل داشته باشیم میتوانیم از embedding model استفاده کنیم.این کار به خوبی داده ها را از هم دیگر برای کلاس بندی جدا میکند.


  • اگر بخواهیم در کنار FSL تسک هایی برای generation و reconstruction هم داشته باشیم generative model ها گزینه های مناسبی هستند که در augmentation هم بکار می آیند. هرچند cost بسیار بالایی دارند.


علاوه بر نکاتی که در بالا ذکر شد، میتوان با مراجعه به جدول یک میتوانید دقت ها را مقایسه کرده و همچنین برای دیتاست مخصوصی که دارید به سایت های نظیر paperwithcode مراجعه و روی دقت ها و جزئیاتی از پیاده سازی ها ( همچنین بررسی paper ها و github هر مدل ) تحقیق و مناسب ترین مدل ها را پیدا نمایید.


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

در این قسمت از آموزش ، بحث few shot learning که در جلسات ۴و۵و۶ بود را به نوعی سازمان دهی کرده، برخی کاربرد ها ی بحث را بیان کردیم و یک نقشه ی راه برای انتخاب مناسب ترین مدل جهت کار روی یک مسئله ی fsl ارائه دادیم.

در اینجا قسمت آخر " شروع یک مسئله ماشین لرنینگ با داده های کم " را ارائه کردیم و این ۷ قسمت به پایان رسید. امیدوارم نقص ها ، کمبود ها و کاستی ها را از من پذیرا باشید و با نظرات خودتون به آپدیت کردن و منتشر کردن آموزش های جدیدتر کمک کنید.

سری بعدی آموزش پرداختن به تعدادی از مهم ترین مدل های مطرح شده مثل Relation net , Proto net و ... خواهد بود.

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