سلام من امید عرب هستم ، لیسانس مهندسی کامپیوتر از دانشگاه صنعتی اصفهان در گرایش هوش مصنوعی ، علاقه مند به ماشین لرنینگ و بلاکچین.
شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۵
سلام !
قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۴ ) بزن و بعد بیا برای ادامه کار .
خب در ادامه ی قسمت ۴ ، به بررسی Model از طبقه بندی معرفی شده در قسمت قبل میپردازیم.
۴) مبحث Model :
برای تخمین یک hypothesis به اسم h^ مدل باید یک فضای hypothesis به نام H که شامل مجموعه ای از h ها است را تعیین کرده به طوری که فاصله ی بین h بهینه ( h*) و h^ کم باشد.
در FSL با سمپل های کم ، H کوچک است و فقط چند مدل ساده مثل linear classifier بکار می آید.در حالی که در مسائل واقعی و پیچیده نمیتوان با این مدل های ساده مسئله را پرزنت کرد .
متد های این بخش برای محدود کردن یک فضای H بزرگ تر به یک فضای H~ کوچکتر با استفاده از دانش قبلی ، مورد استفاده قرار میگیرند.در نتیجه ERM قابل اعتماد تر شده و ریسک overfitting کاهش میابد.
بر اساس دانش قبلی ، دسته بندی های بحث مدل ، به صورت زیر است :
۱-۴) استراتژي Multitask learning :
زمانی که چندین task برای یادگیری باشد،مالتی تسک لرنینگ میتواند به طور همزمان با استفاده از اطلاعات عمومی تسک ها و اطلاعات مختص هر تسک کار یادگیری را انجام دهد. از این رو برای FSL میتواند استفاده شود. چند نمونه را در اینجا میبینیم.
اگر C تسک داشته باشیم که تعدادی از آنها few-shot و تعداد دیگری large-shot باشند که هر کدام از تسک ها شامل دو دسته از اطلاعات D train و D test هستند، ما آن دسته از تسک ها که few-shot هستند را به عنوان target در نظر میگیریم و آن دسته که large-shot هستند را به عنوان source در نظر میگیریم. لرنینگ یادمیگیرد تا پارامتر تتا را تعیین کند . از آنجایی که این تسک ها به طور همزمان انجام میگیرند ، پارامتر تتا برای هر تسک ، به وسیله ی تسک دیگری محدود میشود . بنا براین ما متد ها را به دو دسته تقسیم میکنیم : sharing parameters و tying parameters .
۱-۱-۴) متد parameter sharing :
این استراتژي به طور مستقیم برخی پارامتر ها را بین تسک ها اشتراک گذاری میکند. همانطور که در رفرنس ۱۶۰ گفته شده ، دو شبکه ، لایه های اولیه خود را به عنوان generic information به اشتراک میگذارند و لایه های مختلف پایانی را برای خروجی های مختلف یادمیگیرند.
سه رفرنس مختلف برای نحوه ی شیر کردن این اطلاعات معرفی شده است . ۶۵،۹۱ و ۱۲ ( برای اطلاعات بیشتر به این مراجع مراجعه نمایی)
۲-۱-۴) متد parameter tying :
این متد کاری میکند که پارامتر های تتا ی تسک های مختلف ، شبیه به هم باشند.یکی از این رویکرد ها regularization کردن پارامتر های تتا میباشد. در رفرنس ۱۵۱ تفاوت های بین تتا ها جریمه میشوند و در رفرنس ۸۵ یک cnn برای تسک source و یکی برای target وجود دارد و این لایه های این دو cnn در یک جهت قرار میگیرند ( به وسیله ی برخی پارامتر های منظیم سازی )
۲-۴ ) استراتژی Embedding Learning :
در این استراتژی هر xi ای که در ابعاد بالاتر داریم را به ابعاد پایین تر تعبیه میکنیم به طوری که سمپل های مشابه در کنار هم و غیر مشابه ها دور از هم دیگر باشند. سپس می توان یک فضای hypothesis کوچکتر را ساخت که متعاقبا نیاز به نمونههای آموزشی کمتری دارد.تابع embedding که این کار را انجام میدهد،از دانش قبلی به علاوه برخی از اطلاعات مخصوص به تسک استفاده میکند.
سه جزء اصلی داریم :
- فانکشن f که داده های X test را به فضای کم بُعد z میبرد.
- فانکشن g که داده های Xi را به را به فضای کم بُعد z میبرد.
- فانکشن مشابهت S(0,0) که مشابهت f(X test ) و G(X i) را اندازه گیری میکند.
بنابراین سمپل هایی از X test به کلاس مربوط به X i ، مرتبط ( assign ) میشود که f(X test ) و G(X i) مشابه بوده اند .
اگرچه میتوان از یک فانکشن مثلا همان f هم برای Xtest و X i استفاده بجای دو تا f و g استفاده کرد اما طبق رفرنس ۱۴و ۱۵ ، این کار دقت را بالاتر میبرد.
بر اساس اینکه آيا پارامتر های f و g در سراسر تسک ها متفاوت هستند یا نه، میتوان متد های FSL را به دسته های زیر تقسیم کرد :
1- دسته ی task-specific embedding model
2- دسته ی task-invariant
3- دسته ی hybrid
۱-۲-۴) بررسی دسته task-specific embedding model :
این متد یک embedding function را بر اساس هر task با استفاده از اطلاعات همان Task یادمیگیرد. هر جفت سمپل در D train به عنوان جفت سمپل در رفرنس ۱۳۰ به حساب می آید.در نتیجه تعداد داده های سمپل افزایش یافته و embedding function میتواند فقط با اطلاعات task-specific آموزش ببیند.
۲-۲-۴) بررسی دسته Task-invariant Embedding Model :
این متد ها ،یک تابع embedding function از یک دیتاست بزرگی که شامل سمپل های کافی هستند را با خروجی های مختلف ، لرن میکند و سپس در یک مسئله ی Few-shot روی D train ها بدون ترین کردن جدید استفاده میکند.یعنی اینکه در یک مسئله با دیتا ست بزرگ دو فانکشن f و g لرن شده و برای مسئله FSL صرفا داده های تست را به F می دهیم و داده های train را به g .
اولین نمونه ی مدل embedded در رفرنس ۳۶ ، سمپل ها را با استفاده از یک کرنل embed میکرد . اخیرا embedding های جدیدتری به وسیله ی یک convolutional siamese net لرن میشود.
کرنل یک ماتریس است که انجام اعمالی مثل blurring, sharpening, outlining و... بکار میرود و در ماشین لرنینگ نیز برای feature extraction جهت یافتن مهم ترین نقاط تصویر بکار میرود .
اگرچه مدل های Task invariant پارامتر های مدل را با استفاده از D train مختص به fsl آپدیت نمیکند اما بسیاری از روش های این دسته سناریوی FSL را در طی ترین کردن embedding model شبیه سازی میکند.
فرض کنید که ترین ست های D c را داریم که در N کلاس هستند.که ما U تا از آنها را
برای ترین استفاده میکنیم . embedding model ما بر اساس بهینه کردن بالاترین پرفورمنس در N_U کلاس باقی مانده عمل میکند.بنابراین generalization خوبی برای few shot لرنینگ ، مدل ما دارد .
اولین نمونه یک linear embedding را از روی D c می آموخت اما اخیرا با استفاده از متالرنینگ task-invariant embedding های پیچیده تری انجام میشود. مانند :
- متد Matching Nets
یکی از متد های مهم و بروز FSL ، متد Matching Net هست، که در یک آزمایش توانست روی پایگاه داده ی image net دقت را از 87.6% به 93.2% و omniglot را از ۸۸ به ۹۳.۸ برساند. در رفرنس اصلی بیان میکند که ما از ایده هایی از متریک لرنینگ روی ویژگی های عمیق عصبی و پیشرفت هایی که در افزایش شبکه عصبی با حافظه جانبی استفاده میکنیم.
متد Matching Nets امبد فانکشن های f و g را برای ترین کردن Xi و تست کردن X test یادمیگیرد.مثلا resLSTM طراحی های بهتری را برای f,g ارائه میکند.( رفرنس ۳)
در مقاله ی اصلی رفرنس ۱۳۸ ، بیان میکند که علیرغم پیشرفت های بسیار زیاد در حوزه ی vision و language
روش supervised deep learning راه حل رضایت بخشی برای مسائل d با داده اندک ارائه نمیکند. در این مقاله ایده هایی برای metric learning برا اساس فیچر های شبکه عصبی و نیز بر اساس پیشرفت های augment کردن شبکه های عصبی با حافظه ی خارجی ارائه میکند.
- متد Prototypical Networks (ProtoNet)
ایده اصلی این است که بجای مقایسه ی f و g متد protonet فقط f را با کلاس prototype دیتای train مقایسه میکند. برای هر کلاس n ، پروتوتایپ برابر است با :
به طور تجربی نشان داده شده است که این روش به استیبل تر شدن نتایج و کاهش هزینه محاسباتی کمک میکند. در رفرنس های ۱۴۱ و ۱۰۸ نمونه هایی آورده شده است.
- متد های دیگر
متد هایی مثل ARC که از LSTM استفاده میکند تا X test ها را با C n مقایسه کند و سپس نتیجه این مقایسه را به عنوان یک intermediate embedding ، تعبیه کند.همچنین از یک biLSTM برای امبد کردن همه ی مقایسه ها به عنوان final embedding استفاده میکند در رفرنس اصلی ذکر شده که توانایی بهبود ۱.۵ درصدی روی Omniglot داشته است. در رفرنس ۱۱۹ در مورد این متد توضیح داده شده است .
متد Relation Net یکی دیگر از متد ها است که از CNN برای امبد کردن X test و X i به فضای Z استفاده کرده ، سپس آنهارا کانکت کرده و به عنوان fed به یک CNN دیگر میدهد تا Score مشابهی را نتیجه دهد.
متد Graph neural network ، یکی دیگ از متد ها است که در رفرنس ۸۴ و ۱۱۵ مقاله آمده و برای بهره برداری از اطلاعات همسایه های محلی استفاده میشود.در FSL به صورت Reinforcement کاربرد برای کاربرد هایی نظیر continuous control and visual navigation که اطلاعات موقتی مهم است کاربرد دارد .
متد Simple Neural Attentive Learner (SNAL) ، یک شبکه ی Embedding با لایه های temporal convolution و attention layers است . temporal convolution layer اطلاعات را step های زمانی گذشته aggregate کرده در حالی که attention layer ، به طور انتخابی به time step های مربوط به ورودی توجه میکند .
۳-۲-۴) بررسی دسته Hybrid Embedding Model :
گرچه مدل های task invariant میتوانند روی tsak های جدید با هزینه محاسباتی کم پیاده سازی شوند اما نمیتوانند دانشی از task فعلی ارائه نمایند. زمانی که D train ما فقط چند مثال دارد، مثل بیماری های خاص و ... مدل های task invariant embedding مناسب نیستند.
مدل های هایبرید مدل های task-invariant را با استفاده از اطلاعات task-specific که از دانش قبلی آموخته شده ، سازگارمیکند. این کار به یه این صورت است که ، مدل یک فانکشن از " اطلاعات استخراج شده از D train به عنوان ورودی " و " یک embedding به عنوان خروجی " را لرن کرده و به عنوان پارامتر f استفاده میشود.
در رفرنس ۱۴ مدل learnet یک task-invariant convolutional siamese net را با ترکیب اطلاعات specific مربوط به D train بهبود می دهد.این مدل یک متالرنر را با چندین meta-training set آموزش میدهد و سپس هر X i مربوط به D train را به پارامترهای لرنر مپ میکند.( همان convolutional siamese net) . در این روش پارامتر f همانطور که در تصویر بالا مشخص است با X i ها ( که همان D train ) هستند تغییر میکند که منجر به hybrid شدن آن میشود.
در رفرنس ۱۳ لایه ی classification مربوط به لرنر با ridge regression جابجا میشود به این صورت که پارامتر ها میتوانند به طور موثری در فرم بسته ( closed-form) بدست آورده شوند.
۳-۴) استراتژي learning with external memory :
این استراتژي اطلاعات را با استفاده از اکسترنال مموری از D train استخراج کرده و در حافظه ذخیره میکند.هر سمپل جدید X test با یک میانگین وزن دار از محتوای استخراج شده ی مموری پیش بینی میشود.الگوریتم Key-Value Memory Networks یکی از الگوریتم های متداول است که در FSL استفاده میشود.حافظه به عنوان جفت های (M key,M value)در نظر گرفته میشود.ابتدا X test با استفاده از f مانند استراتژي قبلی embed میشود اما برخلاف استراژي قبلی مستقیما استفاده نمیشود ،بلکه در حافظه نوشته شده و صرفا برای پاسخ به کوئری های با بیشترین تشابه بین اسلات ها استفاده میشود. اساس این کار تابع
s(f(X test),M key(i))
است، که تشابه بین داده تست و داده درون اسلاید حافظه را خروجی میدهد.به این صورت که M value های استخراج شده ترکیب میشوند و به عنوان ورودی یک کلاسیفایر ساده مثل سافت مکس داده میشود.اگر اسلات ها پر نباشد ، سمپل جدید نوشته میشود و اگر پرباشد ، تصمیم گرفته میشود کدام اسلات جایگزین شود.
در جدول زیر متد های این استراتژي آورده شده است.
از آنجایی که هر X test به وسیله ی میانگین وزن دار value های استخراج شده از مموری پرزنت میشود ، کیفیت key-value های درون حافظه مهم است ، بر این اساس به دو دسته تقسیم میشوند:
دسته ی refining representation و refining parameters
۱-۳-۴) دسته ی refining representation :
متدMemory-augmented Neural Networks یا همان MANN ، به این صورت است که یک embedding function لرن میشود سپس سمپل های کلاس های یکسان را با Value یکسان مپ میکند.سمپل های یک کلاس مشابه سپس class representation خود را با یکدیگر refine میکنند. (رفرنس 114) در رفرنس ۱۲۱ این class representation را میتوان به عنوان یک refined class prototype در متد ProtoNet دید.
رفرنس ۱۰۴ ، ماژول surprise-based memory به این صورت است که M را آپدیت میکند زمانی که نتواند یک X i را به خوبی نشان دهد. بدین طریق که اپدیت M با استفاده از X i را انجام میدهد به صورتی که M بهتر شود و هزینه ی محاسبات پایین تر بیاید.در رفرنس های ۱۴۹،۱۶۴،65 ,۱۲۵ میتوان متد های دیگر را هم دید.
۲-۳-۴) دسته ی refining parameters :
متد Learnet را به یاد بیاورید که اطلاعات D train به یک embedding function g داده میشد تا برای X test های جدید پارامترایز شود. حالا این parameter میتواند با یک مموری جایگزین شود. در رفرنس 96 متد MetaNet یک classification model را با استفاده از وزن های "slow" پارامترایز میکند به طوری که از یک multiple data set متالرن میشود و با وزن های "fast" پارامترایز میکند به طوری که از task-specific embedding برای D train استفاده میشود.
در رفرنس ۲۲، MN-Net از یک مموری برای refine کردن embedding learned در Matching Net استفاده میکند به طوریکه خروجی برای پارامترایز کردن CNN برای learnet استفاده شود.
۴-۴) استراتژي Generative Modeling :
در این استراتژی احتمال توزیع p(x) از روی X i های مشاهده شده به کمک دانش قبلی ، پیش بینی میشود.
معمولا پیش بینی p(x) به همراه p(x |y) , p(y) انجام میشه که X داده ها و Y لیبل ها هستند. متد های این کلاس با تسک های زیادی سر و کار دارند. مثل:
تسک های generation , recognition reconstruction , image flipping .
در این استراتژی فرض میشود که x از توزیع P (x, θ) که با θ پارامترایز شده بدست می آید. معمولا یک متغییر پنهان به اسم z وجود دارد به صورتی که :
z ∼ p(z;γ )
بنابراین :
x ∼ sigma ( p(x |z; θ )p(z;γ )dz )
توزیع p(z;Y) که از دیتاست های دیگر به دست می آید ، به وحود آورنده ی prior knowldge است که برای fsl نیاز و واجب است. با ترکیب D train با p(z;Y) توزیع احتمالی پیشین محدود میشود ! به عبارت دیگر فضای فرضیه ی H به یک فضای کوچکتر H~ تبدیل میشود.
با توجه به متغییر پنهان z ما این استراتژي را به سه دسته تقسیم میکنیم :
۱-۴-۴) دسته ی Decomposable Components :
اگرچه داده های سمپل در FSL کمیاب هستد اما ممکن است با شیرکردن آنها با یکدیگر نتایج خوبی بدست بیاید. مثلا برای مدل تشخیص چهره میتوان از ترکیب کردن مدل های تشخیص چشم ،فرم صورت و فرم بینی استفاده و آنها را ترکیب کرد.برای نمونه Bayesian One-shot یکی از متد هایی است که برای کپچر کردن تعاملات بین اجزای تجزیه پذیر و کلاس تارگت استفاده میشود.متده های دیگری مثل Bayesian Program Learning و... نیز استفاده میشود.
۲-۴-۴) دسته ی Groupwise Shared Prior :
در این روش بحث میشود که تسک های مشابه احتمالات مشابهی دارند. مثلا برای کلاسیفیکیشن بین گربه،ببربنگال و پلنگ، گربه و پلنگ سمپل های فراوانی دارند اما ببر بنگال به دلیل خطر انقراض سمپل کمی دارد. بنابراین فرد میتواند از احتمالات رخ دادن گربه و پلنگ در این مسئله استفاده کند. در رفرنس ۱۱۳ ، یک مجمو.عه از دیتا ست ها به صورت سلسله مراتبی دسته بندی میشوند. این دیتاست ها با هم دیگر احتمالات کلاس های قبلی را یادمیگیرند. برای یک دسته بندی جدید فرد ابتدا باید گروهی که کلاس جدید به آن تعلق دارد را پیدا کرده و سپس آنرا با class prior که از groupwise shared prior probability بدست آمده مدل کند.
در رفرتس ۱۲۹ هم مرحله ی یادگیری فیچر ها با استفاده از ماشین بولتزمن انجام میگیرد.
۳-۴-۴) دسته ی Parameters of Inference Networks :
برای پیدا کردن بهترین θ باید معادله زیر ماکسیمم شود :
به دلیل وجود عبارت مخرج، این مسئله یک مسئله ی رام نشدنی است. به همین خاطر از یک توزیع q(z; δ ) استفاده میکنند تا p(z|x; θ,γ ) راتخمین بزنند. اخیرا این q(z; δ ) با amortized variational inference with the inference network تخمین زده شده است.
پس از لرن شدن ، inference network میتواند برای یک تسک جدید به طور مستقیم با کارامدی بیشتر و دانش انسانی کمتر استفاده شود.شبکه های inference network به دلیل تعداد زیاد پارامتر هایی که دارند معمولا با دیتاست های کمکی آموزش داده میشوند.مثال های زیادی از این شبکه ها برای مسائل fsl هست مثل :
variational auto-encoder,autoregressive model,generative adversarial networks,....
خلاصه قسمت پنجم :
این قسمت از آموزش، دارای متن کمی سنگین تر و گاها نامفهوم بود. از آنجایی که مقالات survey خلاصه شده ای از چندین مقاله هستند و شرح کاملی ندارند ، برای فهم کامل و درک عمیق باید به رفرنس هایی که مابین متن معرفی میکند مراجعه و دقیق تر مطالعه نمود.
در قسمت قبلی گفتیم که Taxonami (طبقه بندی) بحث به سه دسته ی ،دیتا ، مدل و الگوریتم تقسیم میشود. همچنین مبححث دیتا را بررسی کردیم.در این قسمت به مبحث مدل پرداختیم و گفتیم به ۴ دسته اصلی تقسیم میشود :
- Multi task learning : parameter sharing-parameter tying
- embedding learning :task-specific(mAP)- task invariant(matching net-ProtoNet-GNN-SNAIL ...) - hybrid (Learnet ...)
- learning with external memory : refining representation(MANN ...)- refining parameters(MetaNet , MN-Net ,..)
- general modeling
- در قسمت بعدی : به ادامه ی این مقاله و مبحث الگوریتم خواهیم پرداخت .
نکته : برای جمع آوری این مطلب ، از مقاله ی "Generalizing from a Few Examples: A Survey on Few-shot Learning " استفاده کرده ایم.
از اینکه تا این ۵ قسمت اصلی همراه ما بودید ، سپاسگذارم و منتظر نظرات و پیشنهادات شما هستم.
مسلما این آموزش دارای اشکالاتی نیز هست که بسیار خوشحال میشم با من مطرح کنید.
مطلبی دیگر از این انتشارات
زبان برنامه نویسی پایتون چیست؟
مطلبی دیگر از این انتشارات
ریاضیات برای ماشین 1 | مهدی مشایخی
مطلبی دیگر از این انتشارات
رگرسیون خطی - Linear Regression - مهدی مشایخی