<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Omid Arab</title>
        <link>https://virgool.io/feed/@omidesf485</link>
        <description>سلام من امید عرب هستم ، لیسانس مهندسی کامپیوتر از دانشگاه صنعتی اصفهان در گرایش هوش مصنوعی ، علاقه مند به ماشین لرنینگ و بلاکچین.</description>
        <language>fa</language>
        <pubDate>2026-04-15 06:04:18</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1712160/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Omid Arab</title>
            <link>https://virgool.io/@omidesf485</link>
        </image>

                    <item>
                <title>متد Prototypical Net ( Proto Net ) چیست ؟</title>
                <link>https://virgool.io/@omidesf485/%D9%85%D8%AA%D8%AF-prototypical-net-proto-net-%DA%86%DB%8C%D8%B3%D8%AA-chxw8qrscceu</link>
                <description>سلام ! اگر سری آموزش قبلی تحت عنوان &quot; شروع یک مسئله ماشین لرنینگ با داده های کم &quot; رو دنبال کرده باشید به یاد دارید که این متد را به عنوان یک روش برای حل مسئله ی few shot learning یا همان fsl معرفی کردیم.در سری آموزش ذکر شده یک طبقه بندی اصلی برای این موضوع مطرح کردیم : دیتا ، مدل و الگوریتم.متد Proto Net در طبقه بندی Model و در دسته ی Embedding models و هم چنین از نوع Task-invariant Embedding Model بود که در این دسته بندی ، Matching Net ,Relation Net و ... هم قرار دارند که در آموزش های دیگر در مورد آنها هم بحث خواهد شد.- تعریف ساده و کلی : فرض کنید یک مسئله ی فیو شات به صورت 3way-5shot داریم، یعنی سه کلاس و ۵ شات در هر کلاس . فرض کنید که داده های ما ( دایره های سبز و آبی و نارنجی ) داده های با ابعاد بالا بوده اند که به وسیله ی یک embedding function در این فضای دکارتی دوبعدی نمایش داده شده اند. ما این داده ها را Support set می نامیم.برای هر دسته که با یک رنگ متفاوت نشان داده شده ، چنانچه میانگین داده ها را بگیریم به یک نقطه خواهیم رسید که نماینده ی کلاس مربوطه است و آنرا نقطه ی prototype گوییم. در تصویر بالا C1,C2,C3 هرکدام پروتوتایپ کلاس خود هستند . حالا یک داده ی بدون لیبل که میخواهیم لیبل آن را پیش بینی کنیم به نام X با همان embedding function ذکر شده در قبل ،‌ به مجموعه اضافه میکنیم. این داده را جزو دسته ی query set مینامیم. کاری که ما باید انجام دهیم محاسبه ی فاصله ی اقلیدسی این داده با هر یک از پروتوتایپ های بالا و انتخاب لیبلی است که داده ی X نزدیک ترین فاصله را با آنها داشته است . به این منظور فاصله ها را با فانکشن d پیدا میکنیم و سپس روی این فاصله ها یک softmax پیاده میکنیم تا احتمال تعلق این داده به هر یک از دسته ها را به ما بدهد.( در اینجا خروجی softmax برای دسته ی c2 بیشترین میزان است . توضیح دقیق تر :آنچه در بالا توضیح داده شد ،‌کلیت کاری بود که انجام میشود . حالا سوالاتی  که ممکن است در ذهن شما پیش بیاید این ها هستند : - نحوه ی پیدا کردن prototype چگونه است ؟ برای پیدا کردن پروتوتایپ از فرمول زیر استفاده میکنیم :فرمول ۱نترسید ! Ck همان پروتایپ ها هستند. k نشان دهنده ی شماره کلاس هست ( مثلا اگر سه کلاس داشته باشیم k=1,2,3 است ) . Sk به مجموعه ی همه ی سمپل ها ی support set گفته میشود که به صورت جفتی یعنی خود سمپل و لیبل آن درونش قرار گرفته اند . فرمول ۲تابع fφ هم اصلا چیز ترسناکی نیست !‌همون فانکشن embedding هست که میاد داده های با ابعاد بالاتر رو به ابعاد پایین تر تبدیل میکنه. خب پس Ck به این صورت به دست میاد که جمع همه ی شات های ما ( البته پس از embedded شدن ) که با (fφ(Xi نمایش میدیم را در یک کلاس Sk ( مثلا کلاس با ۵ تا شات ) به دست میاره و تقسیم بر اندازه ی Sk میکنه که اندازه ی Sk هم همون تعداد شات ها هست. به این صورت میانگین گیری میشه و پروتوتایپ Ck بدست میاد . - نحوه ی انجام embedding  چگونه است ؟ embedding function چگونه کار میکند ؟ برای انجام عمل embedding الگورتیم های مختلفی وجود دارد که توضیح آن خارج از بحث فعلی است.دو منبع زیر برای مطالعه ی بیشتر پیشنهاد میشود : کلیپ یوتیوب  https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526 - نحوه ی پیدا کردن فاصله ی بین داده X و هر کدام از پروتوتایپ ها چیست ؟گفتیم که وقتی فاصله ها را با تابع d محاسبه کردیم ، با استفاده از یک softmax یک توزیع بین ۰ تا ۱ به دست می آوریم . فرمول softmax به صورت زیر بود :فرمول ۳حالا برای فاصله هایی که ما داریم ، همین فرمول را به صورت زیر بازنویسی میکنیم : فرمول ۴این فرمول به این معنا است که احتمال برابر بودن لیبل داده ی X با k را به این صورت میابیم. تابع d محاسبه کننده فاصله و مقادیر درون آن یعنی فاصله ی بین (fφ(X و Ck همان فاصله ی بین نقطه ی X که embedded شده و پروتوتایپ ها است. علامت منفی هم به دلیل این قرار داده میشود که هرچه d بزرگتر باشد کسر هم بزرگتر میشه و یعنی فاصله بیشتر برابر با احتمال تعلق بیشتر ! اما ما میخواهیم هرچه فاصله بیشتر بود احتمال کوچکتر باشد. برای همین از علامت منفی استفاده میکنیم. - مقدار Loss برای بهبود دادن و یادگیری مدل چگونه بدست می آید ؟ تابع زیر را در نظر بگیرید : فرمول ۵مقدار Loss را با J نشان میدهیم و این تابع برابر است با مقدار فرمول بالا. این J میبایست minimize شود. عبارت جلوی Log همان pφ است که در فرمول 4 آمده . چنانچه جایگذاری کنیم داریم : فرمول ۶بررسی کلیه مباحث گفته شده در قالب کد : همینطوری که در تصویر بالا میبینید ،‌ J برای هر episode بدست می آید . یک episode شامل یک زیرمجموعه ای از training set ما است. اگر به توضیح هر خط در سمت راست نگاه کنید در چهار خط اول ، مقدمه کار یعنی انتخاب اندیس برای اپیزود ، انتخاب مجموعه ی support se و query set و نهایتا  ساخت پروتوتایپ ها انجام شده است. در ادامه  ابتدا مقدار J را برابر ۰ قرار میدهد (‌ مقدار Loss اولیه ) و در یک حلقه ی او در تو مقدار Loss آپدیت میشود. Nc تعداد کلاس های هر اپیزود و Ns تعداد سمپل های هر کلاس است.نتایج Accuracy : نتایج تست این متد روی دو دیتاست مشهور mini image net و omniglot را در زیر مشاهده میکنید.خلاصه : ابتدا یک توضیح خیلی ساده از جایگاه این متد در دسته بندی مسائل فیوشات و نحوه کارکرد این متد ارائه کردیم. سپس به بررسی عمیق تر در قالب پرسش و پاسخ هایی که به ذهن شما خطور میکرد پرداختیم و نهایتا آنچه گفته شد را در قالب کد بیان کردیم. در آخر نیز دو جدول از نتایج دقت روی دیتاست های مشهور را ارائه دادیم. برای این مطلب از paper اصلی این متد استفاده کردم.از مطالعه این مطلب تا انتها بی نهایت سپاسگذارم و منتظر انتقادات ، پیشنهادات و سوالات شما هستم.ارادت مند شما ، امید عرب خرزوقی .</description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Mon, 05 Sep 2022 18:57:17 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی دیتاست  های Omniglot ، mini-Image Net و Image Net</title>
                <link>https://virgool.io/@omidesf485/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%B3%D8%AA-%D9%87%D8%A7%DB%8C-omniglot-mini-image-net-%D9%88-image-net-fpsku2gwicz8</link>
                <description>سلام . عرض ادب و احترام. اگر  مقاله های مرتبط با ماشین لرنینگ و Accuracy متد ها و مدل های این مقاله ها رو بررسی کرده باشید ( مثلا Matching Net , Proto Net و ... ) دو دیتاست اکثرا برای تست از اونها استفاده شده و میتونین برای مقایسه ی مدل های مختلف استفاده کنین، Omniglot و mini-Image Net هستند . این دیتاست ها عموما برای few shot learning بکار گرفته میشود. دیتاست Image Net اما یک دیتاست بسیار بزرگ و جامع است که در ادامه بررسی خواهیم کرد.اول یک اصطلاح رو بررسی کنیم و سپس به سراغ معرفی بریم : دیتاست چیست و آیا تفاوتی با دیتابیس دارد ؟ در لغت database به معنای مجموعه ای داده های سازمان یافته هست و dataset به معنای دیتای ذخیره شده به صورت سطر و ستون و ساختار یافته هست. اما در مفهوم ، دیتاست به مجموعه داده ها مثلا ، مجموعه ای دسته بندی شده از تصاویر ۱۰۰ عکس اسب و ۱۰۰ عکس سگ ، گفته میشود اما دیتابیس برای ذخیره دیتاست ها به صورت سازماندهی شده هست که تحت یک DBMS یا همان سیستم مدیریت database کار میکنه که میتونه permission تعیین کنه ،trigger بذاره و ... بنابراین ، برای اینکه یک تصویری از دیتاست توی ذهن داشته باشید ،یک folder در نظر بگیرید که درون اون تعدادی مثلا تصویر ( یا درهم یا به صورت چندتا فولدر تحت عنوان تصویر اسب،سگ و...) هست، این یعنی شما میتونید دیتاست رو که دانلود کردید باز کنید روی ویندوز و تک تک تصاویر رو ببینید بدون اینکه نیاز به برنامه ی اضافه تری داشته باشید. اما دیتابیس یک فایل با پسوند sql یا mdb یا ... هست که باید حتما با یک نرم افزار مدیریت این دیتابیس ها مثلا Mysql باز کنید و اونجا داده ها تون رو مشاهده و عملیات های مختلف روش انجام بدید.خب بریم برای معرفی !‌۱) معرفی Omniglot : دیتاست Omniglot یک دیتاست مربوط به الفبای زبان های مختلف برای تشخیص متن هست که به صورت دست نویس توسط افراد مختلف نوشته شده. این دیتاست حاوی ۱۶۲۳ کاراکتر ( یا همون کلاس ، مثلا A خودش یک کلاس هست ) از ۵۰ الفبای زبان های مختلف در جهان هست.هر کلاس یا همون هر کاراکتر حاوی ۲۰ نمونه هست که توسط افراد مختلف نوشته شده. حجم این دیتاست کمتر از ۳۰ مگابایت است.۲) دیتاست Image Net :یکی از بزرگترین و جامع ترین دیتاست های موجود ، Image Net هست که دارای 1000 کلاس مختلف حاوری ۱ میلیون و ۲۸۱ هزار و ۱۶۷ تصویر برای train ، حاوی ۵۰ هزار تصویر برای برای validation و نیز 100 هزار تصویر برای برای test هست یعنی چیزی در حدود ۱.۵ میلیون تصویر ! این دیتاست حجمی در حدود ۱۵۰ گیگابایت دارد. ۳) معرفی mini Image Net : این دیتاست حاوی ۶۰ هزار تصویر رنگی با ۱۰۰ کلاس است یعنی هر کلاس حاوی ۶۰۰ نمونه است. این دیتاست نسبت به دیتا ست اصلی Image Net دارای پیچیدگی بیشتر اما تعداد سمپل کمتر هست که از نظر محاسباتی به منابع کمتری برای اجرا نیاز دارد . سایز هر تصویر ۸۴*۸۴ است . این دیتابیس به سه دسته ی ترین با ۶۴ ، ولیدیشن با ۱۶ و تست با ۲۰ کلاس تقسیم شده است . حجم این دیتاست حدود ۷ گیگابایت است. منتظر نظرات ، پیشنهادات و انتقادات شما هستم. تشکر</description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Mon, 29 Aug 2022 12:27:56 +0430</pubDate>
            </item>
                    <item>
                <title>متد Relation Net چیست ؟</title>
                <link>https://virgool.io/@omidesf485/%D9%85%D8%AA%D8%AF-relation-net-%DA%86%DB%8C%D8%B3%D8%AA-sar5gpxy7pff</link>
                <description>سلام ! یادآوری : اگر سری آموزش قبلی تحت عنوان &quot; شروع یک مسئله ماشین لرنینگ با داده های کم &quot; رو دنبال کرده باشید به یاد دارید که این متد را به عنوان یک روش برای حل مسئله ی few shot learning  یا همان fsl معرفی کردیم. در سری آموزش ذکر شده یک طبقه بندی اصلی برای این موضوع مطرح کردیم : دیتا ، مدل و الگوریتم. متد Relation Net در طبقه بندی Model و در دسته ی Embedding models و هم چنین از نوعTask-invariant Embedding Model بود که در این دسته بندی ، Matching Net ,Proto Net و ... هم قرار دارند که در آموزش های بعدی در مورد آنها هم بحث خواهد شد. خب بریم سراغ اصل مطلب ! مقاله ی اصلی اطلاعات کاملی در مورد این متد به ما داده است .  توضیح کلی : این متد یک متد مفهومی ، ساده و انعطاف پذیر برای fsl است. ابتدا داده های خود را به دو دسته تقسیم میکنیم : ۱- داده train  که خود به دو دسته ی support set و query set تقسیم میشود ۲- داده ی test پنج تصویر اولی که سمت چپ میبینیم ، داده های support set هستند ، این تصاویر به یک ماژول embedding داده میشود که آنها را به یک سری feature map تبدیل میکند. این feature map ها در حقیقت یک سری ماتریس های  stack  هستند که برخی از ویژگی های تصویر ورودی را استخراج میکنند.کار بعدی ای که ما باید انجام دهیم، Concatenate ( چسباندن ) کردن feature map تصویر کوئری ست (‌اون تک تصویر گرگ پایین  ) با این feature map های support set است . همانطور که در تصویر میبینیم بلوک های زرد future map های تصویر query  بوده و مابقی برای تصاویر support set هستند. این عمل کانکت به صورت عمقی میتواند انجام شود ( یا هر طریق دیگری ) حالا ما یک سری feature map های به هم کانکت شده داریم که به تابع g داده میشود . کار این تابع optimize کردن است. یا یک سری weight ها از قبل دارد یا بر اساس میزان similarity ما بین feature map های support set و query set ما میتوانیم یک وکتور Relation Score به دست بیاوریم که میزان مشابهت هر یک از این تصاویر با تصویر کوئری ست را بدست آورده است . ( عددی بین ۰ تا ۱ که میزان مشابهت را نشان میدهد ) نهایتا ما نیاز داریم یک threshold در نظر بگیریم که مثلا اگر میزان مشابهت بیشتر از ۸۰ درصد بود ، ۱ برگرداند و در غیر این صورت صفر برای همین One-hot vector نهایی را به دست می آوریم. بررسی عمیق تر کار های مشابه :کار های مشابه را میتوان به دسته های زیر تقسیم کرد : مدل های Fine-tuning : این دسته از مدل ها روی تنظیم کردن پارامتر های تتای مسئله با استفاده از مسائل مشابه دیگر و آپدیت کردن دائمی آنها تمرکز دارند .  مدل ‌ MAML جزو این دسته بندی است.  اما مدل Relation Network ما نیاز به fine tune کردن روی target اصلی نداشته و به طور feed-forward بدون نیاز به آپدیت مداوم target را حل میکند . این کار برای مسائلی که تاخیر و power در آنها اهمیت دارد ، گزینه ی مناسبی است.مدل های RNN Memory based :  ایده اصلی در این دسته از مسايل این است که RNN روی نمونه هایی از مسئله ی داده شده iterative هایی را انجام داده و دانش مورد نیاز برای حل مسئله ی اصلی را در hidden activation های خود یا memory ذخیره میکند.بنابراین سمپل های جدید با این اطلاعات قبلی مقایسه شده و لرنینگ صورت میگیرد. این مسئله ی Relation Net ما بر خلاف این مسائل، از پیچیدگی در شبکه ی عصبی بازگشتی و تضمین وجود حافظه ی کافی  جلوگیری میکند.رویکرد ما CNN های ساده وسریع است. مدل های Embedding و  Metric Network : مشابه ترین متد ها به Relation Net‌همین متد های مربوط به این دسته مثل siamese net ها ، proto net و ... هستند. این دسته از مدل ها بر اساس میزان مشابهت بین تصمیم گیری انجام میدهند و Relation Net هم در حقیقت متعلق به همین دسته است . توضیح جامع تر نحوه عملکرد :۱- تصویری که در بالا آورده شد برای حالت one shot است . یعنی حالتی که ما C تا کلاس داریم و هر کلاس ۱ شات دارد. چنانچه بیشتر از ۱ شات داشته باشیم، روی خروجی embedding module عمل جمع به صورت element-wise انجام میدهیم تا feature map هر کلاس را تشکیل دهیم . سپس ادامه کار انجام میشود ، پس در حالت K شات ما در آخر هم فقط C تا relation score داریم .۲- برای train کردن مدل از MSE استفاده میشود .مقدار r i,j نمایش دهنده یکی از درایه های وکتور Relation Score میباشد که حاصل اعمال فانکشن g  روی کانکت شده ی خروجی های  embedding function مربوط به تصویر کوئری و ساپورت ست است.از مدل MSE با فانکشن بالا استفاده میکنیم تا مدل خود را آموزش دهیم. یعنی شبکه عصبی ما که پارامتر های φ و ϕ را دارد، این پارامتر ها آپدیت میشوند.۳- شبکه ی embedding همان شبکه ای است که از ۴ تا convolutional block تشکیل شده و در متد Matching Net و Proto Net هم استفاده شده که در مقالات دیگری به آنها خواهم پرداخت. م اما شبکه ای که برای Relation به کار گرفته میشود به صورت زیر است : ۴- نتایج تست این متد روی دو دیتا ست Mini image net و omniglot را مشاهده میکنیم : mini image netomniglotنکته نهایی و خلاصه : ابتدا یک تعریف کلی از نحوه کارکرد این مدل ارائه دادیم ، سپس شکل مربوط به عملکردآن را آورده  ، در بخش بررسی عمیق تر به مقایسه آن با دیگر مدل ها و طبقه بندی ها پرداختیم. نهایتا نیز توضیحی دقیق تر در مورد اجزای شبکه و نتایج تست آن ارائه کردیم. برای نوشتن این مقاله از ، از مقاله ی اصلی این مدل به اسم Learning to Compare: Relation Network for Few-Shot Learning استفاده کرده ام. منتظر نظرات ، پیشنهادات و انتقادات شما هستم .امید عرب خرزوقی </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Mon, 29 Aug 2022 01:40:35 +0430</pubDate>
            </item>
                    <item>
                <title>متد siamese net چیست ؟</title>
                <link>https://virgool.io/@omidesf485/%D9%85%D8%AA%D8%AF-siamese-net-%DA%86%DB%8C%D8%B3%D8%AA-zmhcxdfhq8vl</link>
                <description>سلام !متد Siamese Nnetwork رو احتمالا شنیدید . این متد به همراه متد Matching net جزو متد هایی هستند که بر اساس فاصله ، میزان شباهت را تعیین میکنند.اصطلاحا به این متد ها ، متد های Metric learning گفته میشود.ابتدا با یک تصویر شروع میکنیم : همینطوری که در تصویر میبینید ، دو عکس به دو شبکه ی کانولوشنی با وزن های مشترک داده شده ، خروجی را به نحوی embedded میکنند که از حالت چند بعدی به یک وکتور تبدیل شود. سپس به یک تابع محاسبه کننده ی فاصله ( مثلا فاصله ی اقلیدسی ) داده شده و نهایتا از یک Activation Function مانند sigmoid یا Relu یا ... استفاده میکنیم تا مقدار را به بازه 0 تا ۱ ببریم.در چنین مدلی ، هرچه دو تصویر مشابه باشند ، عدد نهایی خروجی به ۱ نزدیک تر و هرچه غیر مشابه باشند به ۰ نزدیک است.چند نکته : ۱- معماری ، پارامتر ها و وزن های دو شبکه ای که تصاویر به آنها داده میشود عینا یکسان است .۲- برای اینکه تشخیص دهیم دو تصویر مشابه هستند یا نه باید یکthreshold در نظر بگیریم.۳- برای train کردن این شبکه میبایست جفت عکس هایی یکسان ( مثلا با برچسب ۱ ) و غیر یکسان با برچسب ۰ به شبکه بدهیم و آنرا train کنیم.۴- به این متد ، متد مختص one shot learning هم گفته میشود ، زیرا با دیدن یک تصویر هم میتواند مقایسه انجام دهد. ( کاربرد هایی مثل تشخیص امضا ) </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Tue, 23 Aug 2022 19:21:00 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۷</title>
                <link>https://virgool.io/Artificialintelligence/%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%B7-hnpexzpqwtwz</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۶ ) بزن و بعد بیا برای ادامه کار . 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 ) بر اساس میزان دانش قبلی موجود ، سرعت 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 ارائه دادیم. در اینجا قسمت آخر &quot; شروع یک مسئله ماشین لرنینگ با داده های کم &quot; را ارائه کردیم و این ۷ قسمت به پایان رسید. امیدوارم نقص ها ، کمبود ها و کاستی ها را از من پذیرا باشید و با نظرات خودتون به آپدیت کردن و منتشر کردن آموزش های جدیدتر کمک کنید.سری بعدی آموزش پرداختن به تعدادی از مهم ترین مدل های مطرح شده مثل Relation net , Proto net  و ...   خواهد بود.نکته : برای جمع آوری این مطلب ، از نتایج تجربی نویسنده ، تحقیقات ، این مقاله و بررسی برخی paper های درون مقاله مذکور استفاده شده است.</description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Mon, 22 Aug 2022 14:28:36 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۶</title>
                <link>https://virgool.io/Artificialintelligence/%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</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۵ ) بزن و بعد بیا برای ادامه کار . 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 از آن استفاده میکند گفته میشود. به عبارت ساده تر، مثلا در مسئله ی 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 را متوقف میکنیم. سه متد دیگر 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) به معنای کلیه تسک هایی که روی یک مسئله میتواند رخ دهد. مثلا برای کلاسیفکیشن ، تسک جداسازی گربه از سگ و تسک جداسازی اسب و میمون. آلفا لرنینگ ریت و علامت دل هم گرادیان است.  با اصلاح مداوم θ0 با استفاده از چند شات اندک در D train ، متالرنر θ0 را به سرعت بهبود میدهد تا با few shot ما سازگار شود. الگوریتم MAML با اعمال تعداد کمی تکرار از gradient descent  روی تعداد اندکی داده آموزشی از یک task جدید، تعمیم عملکردی خوبی از آن وظیفه را ایجاد کنند.علامت فای همان عبارت gradient descent در تصویر قبلی است.یک متا مدل داریم که میتواند روی هر تسکی که داریم اجرا شود. آنرا کپی میکنیم و برای چندین تسک عملیات 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 متالرنر ما پیشرفته شده و روی داده تست به خوبی عمل میکند.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 به سه استراتژی اصلی پرداختیم و نهایتا ریز جزئیات آنها را بیان کردیم.در قسمت بعدی : به جمع بندی این سه قسمت،مقایسه مدل ها و ادامه مباحث میپردازیم. نکته : برای جمع آوری این مطلب ، از نتایج تجربی نویسنده ، تحقیقات و همچنین این مقاله  استفاده شده است.منتظر نظرات پیشنهادات و انتقادات شما هستم. تشکر</description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Sun, 14 Aug 2022 12:14:53 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۵</title>
                <link>https://virgool.io/Artificialintelligence/%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</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۴ ) بزن و بعد بیا برای ادامه کار . https://vrgl.ir/Ge0Su خب در ادامه ی قسمت ۴ ، به بررسی 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 ، پروتوتایپ برابر است با : ثابت k تعداد سمپل های داده های ترین از کلاس 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 که از دانش قبلی آموخته شده ، سازگارمیکند. این کار به یه این صورت است که ، مدل  یک فانکشن  از &quot; اطلاعات استخراج شده از D train به عنوان ورودی &quot; و &quot; یک  embedding  به عنوان خروجی &quot; را لرن کرده و به عنوان پارامتر ‌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 را با استفاده از وزن های &quot;slow&quot; پارامترایز میکند به طوری که از یک multiple data set متالرن میشود و با وزن های  &quot;fast&quot; پارامترایز میکند به طوری که از 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 tyingembedding 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 در قسمت بعدی : به ادامه ی این مقاله و مبحث  الگوریتم خواهیم پرداخت .نکته : برای جمع آوری این مطلب ، از مقاله ی &quot;Generalizing from a Few Examples: A Survey on Few-shot Learning &quot; استفاده کرده ایم.از اینکه تا این ۵ قسمت اصلی همراه ما بودید ، سپاسگذارم و منتظر نظرات و پیشنهادات شما هستم.مسلما این آموزش دارای اشکالاتی نیز هست که بسیار خوشحال میشم با من مطرح کنید.</description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Wed, 03 Aug 2022 10:37:30 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۴</title>
                <link>https://virgool.io/Artificialintelligence/%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%B4-aitlr88viam9</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۳ ) بزن و بعد بیا برای ادامه کار . https://vrgl.ir/eKiWp خب در ادامه قسمت سوم،‌در این قسمت قصد داریم به بررسی چند مقاله مرور ( survey ) در حوزه موضوع few shot learning بپردازیم .مقالات survey مقاله هایی هستند که فرض میکنن شما دانش اولیه در مورد موضوع را دارید و صرفا به طبقه بندی تحقیقات انجام شده ، دورنمای این موضوع تحقیقاتی در آینده ، ارزیابی و مقایسه راهکار ها و روشهای اون میپردازن. در حقیقت در این مقالات،نویسنده چند مقاله دیگر رو بررسی کرده ( ۵-۸ تا) و خلاصه ای از اون ها،مقایسه روش های اون ها و... ارائه میده . سایت های خوبی که میشه از این مقالات درش پیدا کرد ، google scholar , Springer , ACM  و... هستند. موضوع few shot learning یکی از موضوعاتی بود که جزو راه حل ها مطرح کردیم و حالا میخوایم دقیق تر بررسی کنیم. مقاله ی اول  تحت عنوان &quot;Generalizing from a Few Examples: A Survey on Few-shot Learning &quot; هست که بررسی میکنیم .این مقاله ۱۶۶ مقاله ی دیگر را که در منابع لیست آنها را آورده بررسی کرده و survey آنرا ارائه میدهد. ۱-۱ و ۱-۲ ) معرفی و مقدمه :در قسمت معرفی، به بررسی مفهوم ماشین لرنینگ و مثال هایی از اون میپردازه. سپس توضیح میده که چه زمانی ممکنه داده ها کم باشه ( مثلا به دلایل امنیتی،حریم خصوصی،مسائل اخلاقی و ...)و few shot learning به عنوان یکی از داغ ترین موضوعات ماشین لرنینگ ،‌چطور و به چه نوع مسائلی کمک میکنه. به طور مثال ،‌few shot learning میتونه در کاهش دادن بار جمع آوری اطلاعات لیبل بسیار کمک کننده باشه. موارد کاربرد اون در دسته بندی تصاویر،بازیابی تصاویر،تشخیص ژست،تشخیص واقعه در ویدیو و... هستند. همچنین approach های مختلف این مسئله شامل متا لرنینگ ، یادگیری تعبیه شده و مدل های مولد رو بیان میکنه.روند مقاله به این صورت هست کهابتدا یک تعریف کلی از FSL میده ( همون few shot learning ) بعد از اون لیستی از مسائل مرتبط با FSL رو بیان میکنه و ارتباط و تفاوت شون رو بررسی میکنه. سپس به مسئله اصلی FSL در مسائل supervised که همان حداقل کردن خطای تجربی ِ غیر قابل اطمینان هست میپردازه که بر اساس تجزیه خطا صورت میگیره. ارائه دادن یک دید کلی از data ،model  و algorithm  که سه دسته کلی برای بررسی موضوع هست ارائه خواهد شد و در مورد مزایا و معایب صحبت خواهد کرد . در نهایت پیشنهاد هایی برای آینده ی FSL در مورد setup ,techniques و application ها داده خواهد شد.۱-۲) تعریف FSL : مسئله ی  FSL یک زیر موضوع از ماشین لرنینگ است . ماشین لرنینگ یک مسئله ی یادگیری بر اساس تجربیات ( داده های ترین ) زیادی است که مسئله از قبل دارد و FSL یک مسئله ی ماشین لرنینگ با نظارت بوده که تجربیات  آن( داده ترین ) کم است . گاهی به آن N-way-K-shot هم میگن که شامل i تا داده ترین در N کلاس و هر کلاس K شات است ( i=NK) یک نمونه مثال FSL از مقاله ذکر شدهمثلا در مثال بالایی ، یک مسئله ی تولید کاراکتر به صورت دست خط با تعداد اندکی داده ی سمپل و دانش از قبل داشته ی روابط و اجزای مسئله ، کار یادگیری را انجام داده و معیار ارزیابی آن هم پاس شدن تست تورینگ ( عدم تشخیص دست خط انسان یا ماشین توسط یک discriminator ) است . نکته اینجاست که در مسائل یادگیری ماشین معمولی ، ما فقط &quot;supervised information&quot; را برای داده هایمان داریم ، اما در مسائل با داده اندک ( FSL )  به تنهایی این مورد کافی نیست ( چون حجم اندکی دارد ) و برای همین به دانش قبلی &quot; prior knowledge&quot; نیاز دارد . ( مثل متد Bayesian network ) دانش قبلی عبارت است از :هر گونه اطلاعاتی که یادگیرنده در مورد عملکرد ناشناخته ای قبل از دیدن سمپل ها از قبل دارد. نکته : چنانچه مجموعه ی &quot;supervised information&quot; برای هر کلاس فقط یک تصویر داشته باشد ، one shot learning  گفته و اگر خالی باشد zero shot learning گوییم ( ZSL ) ۲-۲) مسائل مرتبط با FSL و مقایسه آنها : مسئله ی Weakly supervised learning  یک مسئله ی یادگیری با داده های ضعیف اصطلاحا نامیده میشود که داده های آن ( ناقص ، نادقیق ، نادرست و پر از نویز هستند )‌.  مسئله ی FSL نیز  ، همین داده های ضعیف را داراست که فقط تعداد خیلی کمی از سمپل ها اطلاعات به درد بخور دارند . براساس اینکه یک معلم ( یا به اصطلاح  oracle ) دخالتی در یادگیری بکند یا نه میتوان این مسائل را تقسیم کرد ۱- مسائل Semi-supervised learning : ترکیبی از تعداد کمی داده برچسب دار و تعداد زیادی بدون برچسب۲- مسائل Positive-unlabeled learning : مورد خاصی از  Semi-supervised learning است که در آن فقط نمونه های مثبت و بدون برچسب را به مسئله داده میشود . ۳- مسائل Active learning : که داده های بدون برچسب را توسط یک معلم یا اوراکل به طور تعاملی  برچسب دار میکند. بر اساس این سه مواردی که گفته شد، weakly supervised learning فقط شامل مسائل با برچسب و بدون برچسب هست اما FSL  مسائل reinforcement learning ( یادگیری تقویتی بر اساس سیستم پاداش ) را هم شامل میشه. مسائل  weakly supervised learning از فقط از داده های بدون دیتا به عنوان داده اضافی استفاده میکنند در حالی که FSl از انواع مدل های از پیش یادگیری شده ، داده ها در دامنه ها و مدل های دیگه هم برای یادگیری استفاده میکند . مسئله ی بعدی  Imbalanced learning است. این مسئله با داده های نامتوازن ( مثلا داده هایی که به ندرت رخ میدهد مثل کشف موارد نادر مثبت یک بیماری ) سروکار دارد.در مقابل FSL که یادگیری را با تعداد سمپل اندک و از روی دانش قبلی بدست می آورد ، این مسئله آموزش میبیند که بین همه ی داده های مثبت یکی را انتخاب کند. مسئله بعدی transfer learning است . در قسمت های قبلی به طور سربسته گفتیم که few/zero/one shot learning به نوعی transfer learning هستند اما این تعریف کامل نیست. یادگیری انتقالی به طور دقیق تر مسئله ای است که از source domain/tasks با داده ی فراوان به target domain/task  با داده اندک دانش را انتقال میدهد. Domain adaptation نوعی از transfer learning است که task های منبع و هدف یکسان اما دامنه آنها متفاوت است .ترنسفر لرنینگ در FSL استفاده میشود و با تغییرات اندکی روی آن مناسب مسائلی میشود که داده سمپل بسیار کمی دارند.مسئله ی بعدی دسته مسائل meta-learning هستند .این مسائل یادگیری را با دیتای فراهم شده و یادگیری استخراج شده در حین کار توسط متالرنر صورت میدهد. در حقیقت به  آن یادگیری برای یادگیری گفته میشود. ایم مسئله در مسائلی مثل learning optimizers ،  dealing with the cold-start problem in collaborative filtering و   guiding policies by natural language استفاده شده است .متد هایی که در متالرنینگ به کار گرفته میشود در FSL نیز میتوان به کار گرفت . در حقیقت بخش meta learner درون متالرنینگ به عنوان prior knowledge در نظر گرفته میشود . ۲-۳) مسئله ی اصلی :در اکثر مسائل ماشین لرنینگ ، خطای پیش بینی وجود دارد که ما را به بهترین حالت پیش بینی نمیرساند . ما در مورد تجزیه کردن این خطا برای بکار بردن اون در FSL صحبت میکنیم. خطای ریسک تجربی یا همان (‌Empirical Risk Minimization)‌ با فرمول زیر نشان داده میشود : برای اطلاعات بیشتر در مورد مسئله ERM تحقیق کنید. نکته ای که کافیست بدانیم این هست که هرچه تعداد نمونه های ما بیشتر شود خطا کمتر خواهد شد.در FSL برای مینیمم کردن این خطا باید از دانش قبلی استفاده کرد.۲-۴) مسئله taxonomy (طبقه بندی):براساس اینکه برای مینیمم کردن خطای تجربی باید از دانش قبلی استفاده کنیم ، پیکربندی موضوع را به صورت زیر تعریف میکنیم : ۱- دیتا : این متد ها برای افزایش داده ی ترین با استفاده از دانش قبلی استفاده میشوند و تعداد سمپل ها را زیاد میکنند ( augmentation ) ۲- مدل : این متد ها تلاش میکنند تا با استفاده از دانش قبلی  پیچیدگی فضای فرضیه ها (H) را کاهش دهند.۳-الگوریتم : این متد تلاش میکند تا با استفاده از دانش قبلی به دنبال تتا ای بگردد که بهترین h را در H را بیان کند. دانش قبلی استراتژي این جستجو را با فراهم کردن مقداردهی اولیه و هدایت کردن گام های جستجو فراهم میکند.۳) دیتا :در دسته بندی بالا ابتدا به مورد دیتا پرداخته میشود، در این مقاله ابتدا روش های دستی augmentation را بررسی میکند،روش هایی مثل flip ، crop، rotation  و... سپس به این موضوع میپردازد که این روش هم هزینه ی زیادی تحمیل کرده و هم همه ی حالت های ممکن را در بر نمیگیرد . بنابراین به روش های زیر میپردازد :‌۳-۱) دسته ی transforming samples from D_train :در این استراتژي داده های train  به چندین sample تبدیل میشوند به طوری که پروسه ی این transformation به عنوان دانش قبلی برای تولید تصاویر جدید در نظر گرفته میشود. در حقیقت یک transformer یادمیگیرد که چگونه از روی داده های ترین داده های مشابه تولید کند و یک دیتا ست بزرگ بسازد. سپس این دیتاست بزرگ به یک مسئله ماشین لرنینگ داده میشود.سپس دو رفرنس شماره 53 و 74 را بررسی میکند. در رفرنس 53  فرض میشود که همه ی دسته ها متغییر های transformable خودشون رو با هم اشتراک گذاری کرده و یک transformer یادمیگیرد که تغییرات بین جفت سمپل ها را از دیگر کلاس ها به (xi , yi )  خودش منتقل کند. در رفرنس ۷۴ بجای برشمردن متغییر های جفت سمپل ها ، هر xi را به چندین سمپل با استفاده از مجموعه ای از ویژگی های قدرتمند مستقل رگرسیون ( که از مجموعه بزرگی از تصاویر یادگرفته شده ) transform کرده و label مربوط به xi اصلی را به سمپل های جدید اختصاص میدهد.  هم چنین بیان میکند که یک زیرفضای پیوسته ای از اتریبیوت ها برای اضافه کردن تغییرات اتریبیوت ها به X  اضافه میشود. ۳-۲) دسته ی Transforming Samples from a Weakly Labeled or Unlabeled Data Set : این استراتژی D train را به وسیله ی انتخاب سمپل هایی شبیه به label هدفی که داریم از یک مجموعه بزرگ که به طور ضعیف لیبل گذاری شده یا اصلا نشده است ، افزایش میدهد. مثلا در یک ویدیو ، گوینده حرکات بسیار زیادی انجام میدهد و میتوان از این حرکات استفاده نمود. اما مسئله ی اصلی نحوه ی انتخاب سمپل ها است . در رفرنس ۱۰۲ از یک svm برای یادگیری هر لیبل هدف در D train استفاده شده که لیبل را برای سمپل های با برچسب گذاری ضعیف پیش بینی میکند. نهایتا آن هایی که لیبل مشابه با لیبل هدف دارند به D train اضافه میشوند . در رفرنس ۳۲ ، به جای یادگیری یک classifier ، از label propagation برای لیبل زدن دیتا ست بدون لیبل استفاده میشود . در رفرنس ۱۴۸ ، از یک استراتژی progressive استفاده شده است. سمپل های انتخابی به برچسب های pseudo-label  اختصاص میبابند و CNN مورد نظر آپدیت میشود. ۳-۳) دسته ی Transforming Samples from Similar Data Sets : این استراتژي D train را با aggregate کردن و adapt ورودی و خروجی های یک دیتا ست مشابه اما بزرگ تر ، افزایش میدهد. وزن هایی بر اساس میزان مشابهت بین سمپل ها اختصاص می یابد. در رفرنس ۱۳۳ ،‌وزن ها از یک مجموعه متن کمکی استخراج میشود. در رفرنس ۴۶ ، از آنجایی که ممکن است نمونه های ها استخراج شده از کلاس هدف  FSL نباشند افزایش دادن مستقیم سمپل های aggregate شده ممکن است موجب گمراهی شود به همین منظور از GAN استفاده میشود که طراحی شده تا x های مصنوعی غیر قابل تشخیصی را تولید نماید. در رفرنس ۴۲،‌ دو جنریتور هست، یکی برای مپ کردن سمپل  های FSL به کلاس بزرگتر و دیگری برای مپ کردن سمپل ها از یک کلاس بزرگتر به FSL ( جهت جبران کمبود داده های در GAN ) ۳-۴) خلاصه و مقایسه : انتخاب هر کدام از استراتژي ها بستگی به کاربرد دارد. گاهی تعداد زیادی سمپل با برچسب ضعیف یا بدون برچسب داریم اما از FSL  استفاده میکنیم چون هزینه ی زیادی جهت جمع آوری داده ها و هزینه محاسبات آن باید بپردازیم.در این حالت میتوان از روش دوم استفاده کرد.زمانی که جمع آوری یک دیتا ست بزرگ بدون لیبل دشوار باشد، اما کلاس های few shot مشابهی موجود باشد ،‌میتوان سمپل ها را از این ها استخراج کرد .( روش اول ) استفاده از روش افزایش دیتا ، کار FSL  را بسیار آسان میکند اما مشکل اینجاست که اغلب سیاست افزایش داده معمولا برای هر data set مخصوص است و نمیتوان در data set های دیگر بکار برد. برای رفع آن در رفرنس ۲۷ روش autoaugment پیشنهاد شده که به طور خودکار سیاست نحوه افزایش داده را می‌ آموزد . علاوه بر این مشکل ، متد های گفته شده عموما برای تصاویر به کار برده میشود این درحالی است که برای متن و صدا که دارای ساختار بوده و دشوار تر هستند در رفرنس ۱۴۴ پیشنهاد هایی شده است . خلاصه قسمت چهارم :این قسمت از آموزش، دارای متن کمی سنگین تر و گاها نامفهوم بود. از آنجایی که مقالات survey خلاصه شده ای از چندین مقاله هستند و شرح کاملی ندارند ، برای فهم کامل و درک عمیق باید به رفرنس هایی که مابین متن معرفی میکند مراجعه و دقیق تر مطالعه نمود. در این قسمت ، به تعریف مقاله ی survey پرداختیم و یک مقاله در زمینه FSL  را برای مرور انتخاب کردیم. ابتدا یک معرفی از کلیت مقاله، سپس معرفی خود FSL ، مقایسه ی آن با مسائل مشابه ، مسئله ی ERM یعنی کم کردن ریسک تجربی را مطرح کردیم و به یک طبقه بندی اصلی پرداختیم . گفتیم در این طبقه بندی ، دیتا ، مدل و الگوریتم مورد بررسی قرار میگیرد که در این قسمت مدل را بررسی کردیم و سه استراتژی برای افزایش آن ارائه دادیم. نهایتا این سه استراتژي را با هم مقایسه کردیم . در قسمت بعدی : به ادامه ی این مقاله و مبحث مدل و الگوریتم خواهیم پرداخت . نکته : برای جمع آوری این مطلب ، از مقاله ی &quot;Generalizing from a Few Examples: A Survey on Few-shot Learning &quot;  استفاده کرده ایم.از اینکه تا این ۴ قسمت اصلی همراه ما بودید ، سپاسگذارم و منتظر نظرات و پیشنهادات شما هستم.مسلما این آموزش دارای اشکالاتی نیز هست که بسیار خوشحال میشم با من مطرح کنید. </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Mon, 25 Jul 2022 10:28:49 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۳</title>
                <link>https://virgool.io/Artificialintelligence/%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%B3-uorxgersaw3x</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی ( قسمت ۲ ) بزن و بعد بیا برای ادامه کار . https://vrgl.ir/FsNCF خب همونطور که در قسمت قبلی آموزش گفتیم حالا قرار هست در ادامه ی راه حل های حل یک مسئله ماشین لرنینگ با داده کم ، به را حل ۷ ام و ۸ ام بپردازیم:راه حل ۷ ام و ۸ ام تقریبا به یک موضوع میپردازند و اون هم تولید داده های اضافی هست . این که روی مسائل با داده های کم کار کرده و اون ها رو بهینه کنیم ، قطعا کار چالش برانگیز و قابل ستایشی هست اما گاهی میشه با چند تکنیک ، همون داده های اندک را گسترش بدیم . ۷) راه augmentation :به انواع و اقسام تکنیک هایی که برای تولید &quot; training sample &quot; جدید از روی نمونه ی اصلی انجام میشه میشه  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 به معنای &quot;شبکه های مولد متخاصم!&quot; هست. حالا کار این الگویتم چیه ؟کار اصلی این الگورتیم ، یادگیری از طریق مقایسه کردن هست. چیزی شبیه به ورزشکار بوکسی که برای آمادگی در مسابقات ،‌خود را با حریفانش مقایسه کرده و تخمینی از قدرت خود به دست می آورد . الگوریتم 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 و منابع زیر تصاویر استفاده شده است. از اینکه تا این ۳ قسمت اصلی همراه ما بودید ، سپاسگذارم و منتظر نظرات و پیشنهادات شما هستم. مسلما این آموزش دارای اشکالاتی نیز هست که بسیار خوشحال میشم با من مطرح کنید.  </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Sat, 16 Jul 2022 15:56:51 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۲</title>
                <link>https://virgool.io/Artificialintelligence/%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%B2-v6fvhzkc6cmk</link>
                <description>سلام !قبل از هرچیز اول یه سر به قسمت قبلی بزن و بعد بیا برای ادامه کار . 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%B1-ubvylolzztqb خب همونطور که در قسمت قبلی آموزش گفتیم حالا قرار هست در ادامه ی راه حل های حل یک مسئله ماشین لرنینگ با داده کم ، به را حل ۵ ام بپردازیم : ۵) راه cross validation : اگه تا اینجای بحث رو به خوبی متوجه شده باشید ، میدونید که وقتی مسئله دچار overfitting هست چنانچه  دیتاست های متفاوتی رو برای train کردن به اون بدیم ، روی نتایج test تاثیر خیلی زیادی میذاره؛ علت هم واضحه! وقتی overfitting داریم یعنی مدل ما بیش از حد با داده های Train منطبق میشه.پس وقتی داده ترین متفاوتی و جدیدی بدیم ، این داده های جدید هم مجدد به نحو دیگری overfit میشه.اما به طور ایده آل نباید این اتفاق بیافته . یعنی این که مدل ما باید به نحوی باشه که نویز رو بتونه فیلتر کنه و اجازه تغییر آنچنانی رو نده. در حالت کلی اگر ما داده های  train رو مثلا ۹۰ درصد  و داده های تست رو ۱۰ درصد در نظر بگیریم و عملیات یادگیری ماشین رو انجام بدیم ممکن هست داده های بدرد بخور از دست برود ، چرا که توزیع داده های مهم در در بخش train یا در test بیافتد. بنابراین ، از کراس ولیدیشن برای تقسیم بندی دیتا ها به چند دسته ( fold ) استفاده میکنیم . یکی از حالت های عمل کراس ولیدیشن ، تبدیل دیتا ها مثلا به ۳ فولد ( هر فولد ۳۳.۳۳ درصد ) و انجام iteration ( تکرار ) مثلا ۳ بار برای یادگیری است که هر بار فولد مجزا و متفاوتی رو برای تست انتخاب میکنه . حالا این همه چیز که گفتیم چه ربطی به مسائل با داده کم داشت ؟ اگر در مسائل با داده کم بیایم و فولد های خودمون رو برای تست  اینطور تقسیم کنیم که فقط یک داده برای تست و مابقی train باشد و این عملیات را k بار انجام دهیم ، به این کار کراس ولیدیشن از نوع n-fold میگن .( همچنین leave-one-out یا loocv )  هم گفته میشود.با انجام این کار میتونیم در مسائل با داده کم ، Train بهتری داشته باشیم و با میانگین گیری نتایج iteration ها، داده های تست رو با دقت بیشتری تشخیص بدیم . ۶) راه transfer learning شاید مهم ترین و متداول ترین راه حل مسائل با داده ی کم ، همین روش باشد. یک نکته بگم که این مبحث به طرز قابل توجهی مشابه با مبحث few shot learning - zero shot learning -one shot learning - meta learning مشابه هست و اصلا میشه گفت همگی یک هدف دارن : آموزش مسئله با داده های اندک. مثلا در تعریف meta learning میگن : از زیر شاخه های یادگیری ماشین است که هدف آن طراحی مدلی است که به سرعت و با تعداد کمی نمونه های آموزشی، مهارت های جدید را یاد بگیرد و با محیط های جدید تطبیق یابد.در این روش یادگیری برای یادگیری انجام میشود ! یعنی مدل یادمیگیرد که چگونه وزن های خود را بروز کند تا بتواند نتایج بهتری روی دقت ها بدست اورد.یا در تعریف transfer learning : آموزش شبکه عصبی بر روی مجموعه داده های بزرگ ممکن است هفته ها طول بکشد. خوشبختانه، این زمان را می توان به لطف  مدل های از پیش آموزش دیده کوتاه کرد - به عبارت دیگر، استفاده از یادگیری انتقالی.در تعریف few-shot-learning : آموزش شبکه عصبی عموما روی تصاویری که داده های سمپل آن بسیار اندک و در حد چند سمپل میباشد. . ( برای هر label تنها چند سمپل ) در تعریف one-shot-learning : آموزش شبکه عصبی عموما روی تصاویری که داده های سمپل آن تنها یک تصویر  در هر کلاس را شامل شود . ( برای هر label تنها یک سمپل ) در تعریف zero-shot-learning : آموزش شبکه عصبی عموما روی تصاویری که هیچ داده ی سمپل ای وجود نداشته باشد. ( برای هر label هیچ سمپل ! ) البته بین مفاهیمی که گفته شد تفاوت های ریز بسیار زیادی هست که با سرچ کردن میتونید پی ببرید،ولی در حد چند خط که یک دید کلی ( نه دقیق ! )‌داشته باشید ، کافیه.خُب ، تا اینجا نیاز بود این مفاهیم رو درک کنیم ، حالا بریم سر اصل مطلب : چطور از Transfer learning یا مفاهیم مشابه دیگه ای که گفتیم در حل مسائل با داده اندک استفاده کنیم ؟‌اون چیزی رو که در این مجال بشه از این موضوع ارائه کرد صرفا یکسری توضیحات و مفاهیم هست ، ریز جزئیات ،کد زدن عملی و ... نیازمند مباحث جداگانه ای هست که میتونین با سرچ کردن پیدا کنین یا اگر شرایط فراهم بود در ادامه همین مباحث در مورد اون صحبت خواهیم کرد. در  فرآیند یادگیری مدل ها به روش معمولی ( تصویر بالایی) ، ما یک سری داده داریم، به مدل میدیم و مدل فیچر های اون رو استخراج میکنه ، نهایتا از یک classifier برای assign کردن لیبل خاص به دیتا استفاده میکنیم .اما در مسائل transfer learning ( تصویر پایینی ) ما یک سری داده داریم، به مدل میدیم اما مدل از فیچر های مسئله ی train شده ی دیگری از قبل ،‌برای این مسئله استفاده کرده و توی اون قسمت NEW TASK از یک classifier به صورتی که تغییرات اندکی روی وزن ها با استفاده از دیتای جدید بده استفاده میکنیم . (چقدر استفاده!)توضیح خلاصه دیگر در مورد روش حل مسئله ی few/one shot learning آنکه ، ما ابتدا یک مسئله ی حل شده قبلی داریم، داده ها (siamese network) را به دو دسته ی positive و negative  تقسیم میکنیم. بخش positive مربوط به جفت دیتا هایی است که لیبل مشابه دارند و negative مربوط به جفت دیتاهایی که لیبل مشابه ندارند.مسئله را train میکنیم.حال که مسئله ما train شد یک support set  تعریف شده داریم که یک شات در هر کدام هست .( همان دیتایی مسئله اصلی که قرار هست یادگیری روی اون انجام بشه )  قبل از هرکاری باید با استفاده از یک CNN  فیچر های تصاویر را بدست بیاوریم .نکته و سختی کار اینجاست که support set  نباید شامل کلاس های training set  باشد یعنی صرفا از آن ترین ست برای آموزش دیدن یک ماشین استفاده کرده ایم و حالا مسئله را به صورت انتقالی برای support set  خود حل میکنیم.در مورد مسئله ی zero shot learning هم که اصلا support Set ما خالی هست و صرفا باید از فیچر های مسئله ی از قبل حل شده استفاده کنیم . خلاصه قسمت دوم :در این قسمت از  موضوع cross validation شروع کردیم و توضیح دادیم که ارتباط اون با مسائل less/few data  چی هست ( leave-one-out) بعد از اون به مبحث فوق العاده مهم transfer learning و تکنینک ها و مفاهیم مشابه اون ( meta learning  - few/one/zero-shot-learning ) به طور خیلی خلاصه پرداختیم . در قسمت بعدی : به موضوع  راه حل های augmentation و generate data ( expand data set )   میپردازیم.نکته : برای جمع آوری این مطلب ، از نتایج تجربی نویسنده و همچنین سایت https://neptune.ai و بخشی از آموزش آقای milad farzalizadeh استفاده شده است.هدف این آموزش ، دید کلی نسبت به موضوع مسائل با دیتای اندک است و به جزئیات پیاده سازی و ... در آموزش های دیگری خواهیم پرداخت ) </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Wed, 13 Jul 2022 15:54:31 +0430</pubDate>
            </item>
                    <item>
                <title>شروع یک مسئله ماشین لرنینگ با داده های کم قسمت ۱</title>
                <link>https://virgool.io/Artificialintelligence/%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%B1-ubvylolzztqb</link>
                <description>به نام خدا سلام ، امروز میخوایم به زبان ساده به این موضوع بپردازیم که در برخورد با یک مسئله ماشین لرنینگ چنانچه دیتاست بزرگی برای train کردن مسئله نداشته باشیم، از چه راه هایی میشه استفاده کرد تا عملیات Train رو انجام بدیم. مسئله ماشین لرنینگ شبیه یک ماشین و داده ها شبیه بزنین برای ماشین هستند . برای رسیدن به مقصد با ماشین، یا باید بنزین کافی وجود داشته باشه ، یا باید مصرف بنزین ماشین بهینه شده باشه تا با یک مقدار کمی از بنزین به مقصد برسیم. در مسائل ماشین لرنینگ هم یا باید دیتای کافی داشته باشیم ،‌یا متدهایی که برای train مسئله مون استفاده میکنیم باید با دیتای کم هم نتایج خوبی بدن و یا هر دو ! اول به این موضوع بپردازیم که چرا و چطور ممکنه داده های ما کم باشه ؟! ۱) دیتای انحصاری : مثلا آمار تصادفات خودرو های خودران شرکت تسلا ، دیتای بیماری های نادر و ... این ها در اختیار ما قرار ندارند و ممکن هست برای تهیه برخی دیتاست هم نیاز به هزینه های گزافی باشه. ۲) داده های محدود : مثلا برای پیاده سازی یک مسئله برای یافتن عادت های مالی  حساب یک مشتری بانک زمانی که مشتری جدید باشه و تراکنش های زیادی نداشته باشه ، این دیتا وجود نداره . ۳) منبع داده ی خراب : فرض کنید در خط تولید فولاد ، یک سنسوری قرار دادیم که قرار هست ، دمای ورق فولاد رو انداره گیری کنه . حالا اگر این سنسور خراب بشه اطلاعاتی که ثبت میکنه دارای نویز و خطا هست درنتیجه داده ی صحیح و سالم در دسترس نیست. ۴) داده های نامتعادلفرض کنید دیتاست عظیمی از آزمایش افراد جهت تشخیص یک بیماری نادر داریم. چنانچه از یک میلیون آزمایش فقط ۱۰ مورد مثبت گزارش شود ، نتیجه آن است که تعادل بین دسته های مختلف داده یعنی موارد منفی و مثبت بهم میخورد و امکان تشخیص اشتباه توسط ماشین زیاد میشود.ترید آف بین bias و varianceبایاس و واریانس به زبان ساده یعنی چی ؟ زمانی که شما یک دیتاست دارید و الگوریتمی برای train ( آموزش دادن ) مسئله خود، روی اون دیتاست پیاده میکنید ، داده ها رو به دو دسته train و test  تقسیم میکنید ( مثلا ۹۰ درصد برای train و ۱۰ درصد برای Test ) حالا چند حالت وجود داره : ۱) ماشین شما داده های Train رو عالی تشخیص میده ولی روی داده های تست ضعیف عمل میکنه . چرا ؟ چون اینقدری دقیق طراحی شده که اگه خارج از چهار چوب داده هایی که تعلیم دیده ، داده ای بهش داده بشه ، پرت حساب میشه ! ۲)ماشین شما داده های train رو ضعیف تشخیص میده ولی روی داده های تست بهتر عمل میکنه . چرا ؟ چون الگوریتمی که پیاده کردید اونقدر دقیق نیست که فقط train ها رو تشخیص بده و میتونه تست ها رو عملا تا حدی درست تشخیص بده . ۳) ماشین شما هم داده های train و هم داده های test رو به حد متعادلی و با درصد دقت خوبی میتونه تشخیص بده . در این حالت ما این رو میپذیریم که ممکنه خطاهایی داشته باشه . همینطوری که در تصویر بالا میبینید ، چنانچه مدل ما پیچیده و دقیق تر شود ، مقدار بایاس( خطا روی داده های train)  رفته رفته کم شده و واریانس ( خطا در تشخیص داده تست ) زیاد میشود . برعکس هرچه پیچیدگی کمتر باشد ، خطای بایاس یعنی تشخیص داده ترین زیاد و واریانس کم است .بهترین نقطه کجاست ؟ بهترین نقطه همان خط عمودی تصویر یعنی نقطه ای که جمع خطای bias و variance کم ترین مقدار ممکن شود. همانطور که میبینید خط قرمز مجموع این دو مقدار است و نقطه ای که خط عمودی رسم کرده ایم کمترین مقدار ممکن را دارد . یک نکته : به حالت اول overfitting و به حالت دوم underfitting میگن. خب اصلا چرا این موضوع رو اینجا مطرح کردیم ؟ در اکثر مسائل با داده ی کم ، ما با مشکل overfitting مواجه هستیم . چرا که دیتای کمی برای ترین داریم و حالت های زیادی را شامل نمیشه ، این موجب میشه که فقط تمرکز ماشین روی ساپورت ست خودش ( دیتای کمی که در مسائل ماشین لرنینگ به مسئله برای train میدن ) باشه و داده تست رو درست تشخیص نده . مثلا ۵ تا عکس از گربه،سگ،اسب،گوریل و میمون به مسئله دادیم و انتظار داریم وقتی عکس های تست یعنی عکس یه گربه ی بیچاره ای که از گوگل دانلود کردیم رو درست تشخیص بده ! خب مشخصه وقتی ماشین ما فقط یک عکس گربه دیده ، چیز زیادی یاد نگرفته که بتونه هر عکس گربه ای رو تشخیص بده . بنابراین فقط میتونه همون عکسی که خودش یاد گرفته ( که توی ساپورت ست بوده ) رو با درصد بالایی درست تشخیص شده  اما عکس تست رو خیر (  this is overfitting ! ) راه حل مشکل overfitting چیه ؟ ۱) پیچیدگی کم مدل : هرچی مدل پیچیده تر بشه، تشخیص داده های train قوی تر میشه overfitting بیشتر.۲) حذف داده های پرت : وقتی دیتای کمی داریم، وجود یک دیتای پرت میتونه به راحتی همه چیز رو بهم بریزه، مثلا ما ۵ تا دسته بندی برای اون ۵ تا عکسی که در بالا گفتیم داریم ولی یک عکس ششمی از موز هم به ماشین میدیم ! ماشین ناچارا این موز رو توی یکی از این دسته بندی ها جا میده ولی همینطوری که حدس میزنید همه ی فیچر هایی که در نظر گرفته بوده بهم میریزه . ( مثلا میذاره تو دسته اسب ولی فیچر هایی ( ویژگی ها) که برای اسب در نظر گرفته بوده ، همش بهم میریزه . ۳) بهینه سازی فیچر ها : مهندسی کردن یک سری داده خام اندک کار فوق العاده جذاب و هوشیارانه ای هست. مثلا زمانی که داده های کمی برای قیمت سهام داریم ، به فرض چهار ستون قیمت،زمان باز شدن کندل،تعداد معامله و حجم . خب ما زمانی که میدونیم مسئله در تایم فریم ۱ روزه به فرض داره حل میشه، از روی زمان باز شدن کندل میتونیم به راحتی زمان بسته شدن رو تشخیص بدیم و به مسئله اضافه کنیم : زمان باز شدن+۱ روزیا مثلا میانگین حجم هر معامله رو با تقسیم کردن حجم کل به تعداد معامله میشه به دست آورد.نهایتا از این داده هایی که create کردیم استفاده میکنیم . نکته ریز : در شبکه های عصبی معمولا نیاز به این کار نیست ، چون خود شبکه این کار رو انجام میده و روابط رو تا حدی پیدا میکنه . ۴) روش ترکیبی یا همان ensemble :در این روش ، ما از چند مدل برای پیش بینی نتایج خود استفاده میکنیم و نهاتا اون پاسخی که بیشترین رای رو بیاره ، به عنوان جواب انتخاب میشه. با استفاده از این روش میشه از یک مدل که دچار overfitting هست و یکی underfitting و چندل مدل دیگه در کنار هم دیگه استفاده کرد .یادگیری ترکیبی سه نوع است :bagging, boosting, stacking ,voting خلاصه ای از روش ها : روش voting : این روش از مدل های متفاوت ( مثلا svm,knn و ... )  استفاده کرده و سهم هر مدل در تصمیم گیری با مدل دیگری یکسان است. نهایتا نظر جمع هرچه بود همان انتخاب میشود.روش staking :  این روش دقیقا همان voting است اما به هر یک از مدل ها یک وزنی اختصاص داده میشود تا بر اساس تاثیر و اهمیتی که دارند ،‌ تاثیر گذار باشند. وظیفه پیدا کردن این وزن ها با یک مدل سطح بالاتر از مدل های پایه ی قبلی انجام میشود. روش bagging : در این روش تمامی مدل ها باید یکسان باشند ( مثلا همگی از نوع svm یا ...) اما دیتاست اصلی خودمون رو به چندتا زیر دیتا تقسیم میکنیم ( به این کار bootstrap :the random sampling with replacement) میگن . بعدش این مدل ها روی این زیر دیتاست ها کار میکنن و نتایج نهایتا با هم aggregate میشه. روش boosting : در این روش ، زمانی که ما با مسائل پیچیده سر و کار داریم که نمیشه با یک مدل ساده مثل پرسپترون و  ....اون رو حل کرد، میایم چند مدل ساده روی برای این مسئله پیچیده با هم دیگه ترکیب میکنیم .این کار باعث میشه خطای بایاس هم کم بشه و مجموع این مدل های ساده شبیه یک مدل پیچیده عمل بکنهخلاصه قسمت اول : در این قسمت از این موضوع شروع کردیم که چرا ممکن هست که دیتای کمی داشته باشیم ، بعد از اون به مفهوم مهم bias و variance پرداختیم و فهمیدیم که اگر داده های مسئله کم باشه مشکل overfitting رخ میده که برای حل چنین مسائلی چهار راه حل ارائه دادیم :پیچیدگی کم-حذف داده پرت-مهندسی بهینه کردن فیچر ها - روش ترکیبی که خود روش ترکیبی به چهار روش تقسیم شد : voting-staking-bagging-boosting  در قسمت بعدی : به موضوع  Cross-Validation و مبحث فوق العاده مهم transfer learning میپردازیم.  https://vrgl.ir/FsNCF نکته : برای جمع آوری این مطلب ، از نتایج تجربی نویسنده و همچنین سایت https://neptune.ai استفاده شده است. </description>
                <category>Omid Arab</category>
                <author>Omid Arab</author>
                <pubDate>Tue, 12 Jul 2022 12:35:33 +0430</pubDate>
            </item>
            </channel>
</rss>