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

سلام !

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

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%B5-lbdo3dbuun1h

خب، در ادامه ی قسمت ۵ ، به بررسی الگوریتم از موارد طبقه بندی مسائل میپردازیم :

۵) مبحث Algorithm :

الگوریتم یک استراتژي برای سرچ در فضای فرضیه کلی H برای یافتن پارامتر تتا θ از بهترین فضای فرضیه h* در مسائلی که داده ی اندک دارند می باشد.

یادآوری :‌

  • فضای فرضیه H و فرضیه ی h : تعریف این دو اصطلاح رو با یک مثال شرح میدم . فرض کنید یک مسئله ی linear classification داریم . برای جدا سازی داده ها به دو دسته ی + و - ، چندین حالت میتونیم خط جداسازی رسم کنیم. به مجموعه ی همه ی این حالت هایی که میتونیم فرض کنیم و خط جداسازی رسم کنیم ، فضای فرضیه ی H گفته میشه و به هر کدوم از این خط ها یعنی فرض ها h میگیم. حالا اون خطی که بهترین جداسازی رو انجام بده h* مینامیم و دوست داریم که در مسائل خودمون همواره فرض ها یعنی همون h هایی رو پیدا کنیم ( h^ :فرضی که مسئله ی ماشین لرنینگ ما پیدا میکنه ) که تا حد امکان به h* نزدیک باشه.
به همه ی خط های قرمز جدا کننده ، H و به هر خط h گفته میشود.علامت سوال داده های تست ما هستند.
به همه ی خط های قرمز جدا کننده ، H و به هر خط h گفته میشود.علامت سوال داده های تست ما هستند.


  • پارامترθ : به مجموعه ی همه ی پارامتر هایی که h از آن استفاده میکند گفته میشود. به عبارت ساده تر، مثلا در مسئله ی linear classification برای بیان یک فرضیه ( یکی از خط های جدا کننده که گفتیم اسمش h) هست یک معادله داریم که دارای عرض از مبدا و شیب هست :
  • h= θ0 + θ1*x

به این عرض از مبدا و شیب پارامتر های θ گفته میشود.

  • تفاوت بین algorithm و model چیست ؟
  • یک الگوریتم در ماشین لرنینگ پروسه ای را روی دیتا اجرا کرده و مدل را میسازد یعنی در اصل خروجی الگوریتم مدل است.در بخش مدل ها ما مدل های مختلفی را بررسی کردیم که برخی ، داده ها را از فضای چند بعدی به دو بعد embedded میکرد،برخی پارامتر های قابل share کردن را به اشتراک میگذاشتند و ... اما تفاوت آن متد ها با متد های این بخش این است که در این دسته ی الگوریتم اولا ما روی initialization اولیه ی θ0 و نحوه ی بهبود سریع آن برای رسیدن به θ مناسب و همچنین روی optimize کردن خودکار آن بحث میکنیم.


خب بریم ادامه ی بحث . در هر iteration ، پارامتر های تتای ما به این صورت تغییر میکنن θt = θt−1 + Δθt−1 که عبارت Δθt−1 آپدیت کننده ی تتا هست.مثلا برای مسئله stochastic gradient descent (SGD) پارامتر های تتا به این صورت آپدیت میشن :

زمانی که supervised information ما به اندازه کافی بزرگ باشه، سمپل کافی برای آپدیت پارامتر θ وجود داره، اما زمانی که با یک مسئله ی FSL طرف هستیم، تعداد شات ها کم و خطای ERM هم به اندازه ی کافی قابل اعتماد نیست.

متد های این بخش ، از دانش قبلی برای تعیین θ استفاده میکنند به این صورت که :

  • یک پارامتر θ0 اولیه ی خوب برای مسئله فراهم میکند یا
  • به طور مستقیم یک optimizer را برای خروجی دادن مراحل جستجو یادمیگیرد.

بر اساس اینکه دانش قبلی چطور روی استراتژی جستجو تاثیر گذار باشه، متد ها را به این صورت تقسیم بندی میکنیم :

در استراتژي Refining existing parameters ، یک θ0 اولیه از task های دیگه یادگرفته میشه و سپس به وسیله ی D train مجدد اصلاح میشود.

در استراتژي Refining meta-learned parameters ، یک θ0 اولیه از مجموهه task هایی متا لرن میشه که از همان توزیع تسک های مشابه تسک فیوشات بدست آمده اند و سپس به وسیله ی D train بیشتر اصلاح میشود.

در استراتژي Learning the optimizer ، این استراتژي یک متالرنر را به عنوان optimizer را یادمیگیرد تا مراحل جستجو را به طور مستقیم برای هر لرنر مثل تغییر جهت یا step size خروجی دهد.

5-1 ) استراتژي Refining Existing Parameters :
این استراتژي ، θ0 را از یک مسئله ی از پیش آموزش دیده ی مرتبط به عنوان یک initialization اولیه خوب بدست می آورد و آنرا به وسیله ی داده های ترین برای θ بهبود میدهد. یعنی ایده کلی این هست که θ0 برخی ساختار های کلی یک large scale data را منتقل میکند و میتوانیم با چند iteration با استفاده از داده ی D train بهبود دهیم.

سه متد در این استراتژي قابل بررسی است :

5-1-1 ) متد Fine-tuning Existing Parameter by Regularization

این استراتژي ، پارامتر از قبل ترین شده ی یک مسئله ی FSL با استفاده از regularization ، تیون میکند.




منظم سازی یا regularization چیست ؟ زمانیکه شبکه های پیچیده برای مسائل ساده در نظر می گیرید شبکه بعد از چندین epoch دچار overfitting مبشه که در این شرایط یکی از راههای جلوگیری از overfitting کاهش حجم شبکه هستش که یکی میشه جراحی شبکه که یه بخش هایی از شبکه کنار گذاشته بشه و راهی دیگر برای حجم صفر کردن برخی از وزن ها از طریق regularization هستش که در این روش وزن های کوچک تشویق به بزرگ شدن و وزن ها بزرگ جریمه شده و بف صفر میل می کنند روش های مرسوم برای اینکار روش ها l1,l2 هستند تحت lasso و ridge هستند که از مجموع وزن ها هر لایه جهت تعدیل وزن ها مورد استفاده میشه در روش l1 ازجمع  قدرمطلق  وزنها و در روش l2 از جمع مجذور وزن ها استفاده میشه البته روش سومی هم وجود داره که از ترکیب دو روش l1 و l2 هستش.




در رفرنس ۲۱ :

گفته شده که ، یک CNN از پیش آموزش داده شده روی image net ، برای classification با استفاده از large data set برای جدا کردن پس زمینه تیون میشود . برای fine tune کردن θ0 با استفاه از D trian ، میشه از gradient descent استفاده کرد ولی باعث overfitting میشه. بنابراین برای جلوگیری از این اتفاق راه حل های زیر هست :‌

  • متد early-stopping (بیش از ۹۰۰ star و ۲۵۰ fork در گیت هاب ) :

این متد نیاز به یک validation set از D train دارد تا با استفاده از آن پروسه ی ترین شدن را مانیتور کرد ، بدین ترتیب زمانی این پروسه متوقف میشود که بهبود دیگری در پرفورمنس روی validation set حاصل نشود .

این متد validation loss را مورد بررسی قرار میدهد و اگر برای چند epoch کاهش پیدا نکند ، آموزش دیدن متوقف میشود.

همانطور که در تصویر مشخص است ، برای جلوگیری از overfit و underfit شدن در نقطه ای که دقت داده های test و train هر دو در بیشترین نقطه ( همان کمترین Loss ) هستند، با استفاده از الگوریتم early stopping همان epoch را متوقف میکنیم.
همانطور که در تصویر مشخص است ، برای جلوگیری از overfit و underfit شدن در نقطه ای که دقت داده های test و train هر دو در بیشترین نقطه ( همان کمترین Loss ) هستند، با استفاده از الگوریتم early stopping همان epoch را متوقف میکنیم.



  • سه متد دیگر Updating related parts of θ0 together و Using a model regression network و Selectively updating θ0 نیز معرفی شده اند.



5-1-2 ) متد Aggregating a Set of Parameters

گاهی اوقات پارامتر θ0 مناسبی برای شروع کار نداریم، ولی مسائل مشابه دیگری هستند که میتونیم با استفاده از aggregate کردن پارامتر های اونها ، θ0 مناسبی رو پیدا کنیم . مثلا برای تشخیص چهره ما قبلا مدل هایی برای تشخیص گوش و بینی و ... داریم و حالا پارامتر های θ آنها را با هم تجمیع میکنیم.

همانطوری که در بخش دیتا گفته شد ما میتوانیم دیتاهای بدون لیبل یا با لیبل های مشابه را ، augment کنیم. اما در این استراتژی بجای استفاده مستقیم از سمپل ها، متدهای زیر را معرفی میکنیم که مدل های از پیش آموخته شده ( از پارامترهای θ0’s آنها) استفاده میکند. فقط مسئله ی اصلی ما نحوه ی adapt کردن آنها با D train است.prior knowledge ما یا از دسته ی Unlabeled data set است یا Similar data sets که در بخش ۳ برای augment کردن گفتیم . برا این اساس میتوان رویکرد های متفاوتی برای adapt کردن با داده D train در نظر گرفت.


5-1-3 ) متد Fine-Tuning Existing Parameter with New Parameters

گاهی پارامتر θ0 که از دانش قبلی منتقل شود به تنهایی برای task FSL ما کافی نیست . از این رو از یک پارامتر دلتا δ نیز برای دخالت دادن داده ی ترین استفاده میکنیم. بنابراین در اصل : θ = {θ0, δ } که ما θ0 را در طی لرن کردن δ،آنرا fine tune میکنیم .

به طور مثال در رفرنس ۶۰ ، لایه های پایینی یک CNN از پیش آموخته شده را برای embedding ( همان θ0 ) استفاده و با استفاده از D train یک linear classifier را روی فیچر های embedded شده learn میکند.( همانδ)

5-2 ) استراتژي Refining meta-learned parameters :

متد های این بخش از متالرنینگ برای اصلاح و refine کردن پارامتر θ0 اولیه استفاده میکنند.θ0 به طور پیوسته به وسیله ی متالرنر optimize میشود.این تفاوت با استراتژي ۵-۱ یعنی Refining Existing Parameters است که θ0 ثابت بود. یکی از مهم ترین متد های این استراتژي ، MAML ( Model agnostic Meta-learning) است.

این مدل برای هر تسک لرنینگ که با gradient descent آموزش داده شده باشد قابل استفاده است.مثل classification, regression, and reinforcement learning

کلمه ی agnostic به معنای این است که این متد میتواند در بسیاری از زمینه استفاده شود که FSL یک نمونه خاص آن است.

در بررسی این استراتژی ابتدا باید به مفهموم meta learning مجددا بپردازیم. میدانیم که deep learning بر اساس عملکرد یادگیری شبیه به مغز انسان به وجود آمده اند. فرض کنید که ۱۰۰۰ عکس گربه و سگ به یک کودک ۱ ساله و همزان به یک الگوریتم deep learning نشان دهید.

پس از این کار هم الگورتیم deep learning و هم کودک ، توانایی تشخیص گربه و سگ را خواهند داشت. اما حالا اگر یک تصویر سگ نشان دهیم چه اتفاقی می افتد ؟ کودک به راحتی میتواند تشخیص دهد که تصویر متفاوتی را مشاهده کرده و اگر تصویر اسب دیگری به اون نشان دهیم آنرا در دسته بندی اسب قرار میدهد. اما الگورتیم deep learning ما نه ! چون deep learning اصولا بر اساس تعداد زیادی از مثال ها و استخراج فیچر از آنها بنا شده و روی یک تصویر اسب تنها دچار overfitting میشود اینجاست که meta learning وارد میشود.

خب فرق بین few shot learning و meta learning چیست؟ باید توجه کنیم که fsl یک task است یعنی یک مسئله است که تعداد داده های اندکی دارد. اما meta learning یک متد و روش است. در حقیقت میتوان گفت مابین متد های موجود که یکی از آنها meta learning ، دیگری standard learning و ... است کدام یک برای fsl بهتر است ؟

متد MAML چنین optimization ای را پیشنهاد میدهد:

تتا ، پارامتر های مدل است. L لاس فانکشن بوده و Ti~p(t) به معنای کلیه تسک هایی که روی یک مسئله میتواند رخ دهد. مثلا برای کلاسیفکیشن ، تسک جداسازی گربه از سگ و تسک جداسازی اسب و میمون. آلفا لرنینگ ریت و علامت دل هم گرادیان است.
تتا ، پارامتر های مدل است. L لاس فانکشن بوده و Ti~p(t) به معنای کلیه تسک هایی که روی یک مسئله میتواند رخ دهد. مثلا برای کلاسیفکیشن ، تسک جداسازی گربه از سگ و تسک جداسازی اسب و میمون. آلفا لرنینگ ریت و علامت دل هم گرادیان است.


با اصلاح مداوم θ0 با استفاده از چند شات اندک در D train ، متالرنر θ0 را به سرعت بهبود میدهد تا با few shot ما سازگار شود. الگوریتم MAML با اعمال تعداد کمی تکرار از gradient descent روی تعداد اندکی داده آموزشی از یک task جدید، تعمیم عملکردی خوبی از آن وظیفه را ایجاد کنند.


علامت فای همان عبارت gradient descent در تصویر قبلی است.
علامت فای همان عبارت gradient descent در تصویر قبلی است.


یک متا مدل داریم که میتواند روی هر تسکی که داریم اجرا شود. آنرا کپی میکنیم و برای چندین تسک عملیات train شدن با چند شات اندک را انجام میدهیم و آنرا با گرادیان کاهشی آپدیت میکنیم.سپس در مرحله بعدی خطای هر کدام را محاسبه کرده و نهایتا مجموع آنرا به عنوان فانکشن لاس بدست میآوریم.در آخر در مرحله backpropagation خطاها لاس را به عقب برگردانده و اعمال میکنیم.
یک متا مدل داریم که میتواند روی هر تسکی که داریم اجرا شود. آنرا کپی میکنیم و برای چندین تسک عملیات train شدن با چند شات اندک را انجام میدهیم و آنرا با گرادیان کاهشی آپدیت میکنیم.سپس در مرحله بعدی خطای هر کدام را محاسبه کرده و نهایتا مجموع آنرا به عنوان فانکشن لاس بدست میآوریم.در آخر در مرحله backpropagation خطاها لاس را به عقب برگردانده و اعمال میکنیم.


پیشرفت های جدید MAML عمدتا به سه بخش تقسیم میشوند :

  • دسته ی Incorporating task-specific information : میدانیم که MAML برای همه تسک ها initialization یکسانی دارد .این برای تسک هایی که مشابه هم دیگر نباشند خوب نیست.رفرنس ۷۹ پارامتر θ0 را از زیر مجموعه ای از پارامتر های اولیه مناسب برای هر تسک جدید انتخاب میکند.
  • دسته ی Modeling the uncertainty of using a meta-learned θ0 : میدانیم که یادگیری با چندشات اندک ،خطر عدم قطعیت را افزایش میدهد. متد هایی برای در نظر گرفتن عدم قطعیت برای θ0 و ϕs و ϕs,n هست.
  • دسته ی Improving the refining procedure : اصلاح θ0 با استفاده از گرادیان کاهشی با چند step اندک ممکن است قابل اعتماد نباشد. به همین دلیل در برخی منابع از regularization استفاده میشود.


5-3 ) استراتژيLearning the Optimizer :

در استراتژی 5-2 متالرنر از گرادیان کاهشی استفاده میشد. اما در این استراتژي متد یک optimizer را یاد میگیرد که به طور مستقیم میتواند آپدیت را خروجی دهد ( منظور از آپدیت مقداری است که به θ0 در معادله ی شماره ۴ در بالا اضافه میشد ) .بنابراین نیازی به tune کردن step size یا جهت سرچ نیست ، به طور اتوماتیک این الگوریتم آن را انجام میدهد.

به تصویر سگ سفید وسط نگاه کنید. هر تصویری که از داده های ترین فیوشات وارد شود ، ابتدا وارد learner شده و پس از   یادگیری مقدار fi(t-1) را خروجی میدهد. همچنین یک سیگنال ارور نیز به بخش متالرنر داده شده delta fi(t-1) خروجی داده میشود و نهایتا جمع این دو مقدار fi (t) را شکل میدهد. بنابراین میتوان گفت یک optimizer داریم که توسط learner روی task ما اثر میگذارد. نهایتا در fi(t) مقدار loss بین داده ترین و لیبل آن محاسبه شده و به عنوان error signal به متالرنر بعدی داده میشود. پس از لرنینگ یک Task متالرنر ما پیشرفته شده و روی داده تست به خوبی عمل میکند.
به تصویر سگ سفید وسط نگاه کنید. هر تصویری که از داده های ترین فیوشات وارد شود ، ابتدا وارد learner شده و پس از یادگیری مقدار fi(t-1) را خروجی میدهد. همچنین یک سیگنال ارور نیز به بخش متالرنر داده شده delta fi(t-1) خروجی داده میشود و نهایتا جمع این دو مقدار fi (t) را شکل میدهد. بنابراین میتوان گفت یک optimizer داریم که توسط learner روی task ما اثر میگذارد. نهایتا در fi(t) مقدار loss بین داده ترین و لیبل آن محاسبه شده و به عنوان error signal به متالرنر بعدی داده میشود. پس از لرنینگ یک Task متالرنر ما پیشرفته شده و روی داده تست به خوبی عمل میکند.



5-3 ) خلاصه و جمع بندی استراتژي‌:

اصلاح پارامتر ها موجب کاهش تلاش برای سرچ کردن در فضای فرضیه H میشه. با تنظیم کردن یک θ0 اولیه ی مناسب متد ها معمولا نیاز به cost‌محاسباتی کمتری برای یافتن یک فرضیه h مناسب در فضای فرضیه دارند .

از آنجایی که θ0 از task هایی غیر از تسک فعلی تعیین میشود ممکن از دقت فدای سرعت شود .

از این رو دو استراتژی دیگر برا اساس متالرنینگ وجود دارد.با یادگیری از مجموعه ای از task های مرتبط θ0 میتواند به پارامتر task-specific ϕt نزدیک شود.

استپ های یادگیری با meta learner میتواند به طور مستفیم الگوریتم learning را هدایت کند یعنی meta learner به عنوان یک optimizer عمل میکند.

هم اکنون موضوعاتی مثل تصویر در برابر متن و تشخیص دانه های ریز غذای حیوانات و ... هنوز open هستند و نیاز به جای کار بیشتری دارند.

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

در این قسمت از آموزش به ادامه ی دسته بندی اصلی ای که در مورد FSL داشتیم پرداختیم و از سه مبحث اصلی DATA,MODEL و ‌Algorithm به مبحث آخر یعنی Algorithm پرداختیم. اگر آموزش های قبل رو مشاهده کرده باشید ، در قسمت ۴ و ۵ به مباحث مدل و دیتا هم پرداختیم. از در مبحث Algorithm به سه استراتژی اصلی پرداختیم و نهایتا ریز جزئیات آنها را بیان کردیم.

  • در قسمت بعدی : به جمع بندی این سه قسمت،مقایسه مدل ها و ادامه مباحث میپردازیم.

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

منتظر نظرات پیشنهادات و انتقادات شما هستم. تشکر