<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حامد قاسمی</title>
        <link>https://virgool.io/feed/@hamed74ghasemi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-17 02:41:28</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/30218/avatar/avatar.png?height=120&amp;width=120</url>
            <title>حامد قاسمی</title>
            <link>https://virgool.io/@hamed74ghasemi</link>
        </image>

                    <item>
                <title>تحلیل و بررسی معماری ResNet و بهبودهای آن</title>
                <link>https://virgool.io/@hamed74ghasemi/%D8%AA%D8%AD%D9%84%DB%8C%D9%84-%D9%88-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C-resnet-%D9%88-%D8%A8%D9%87%D8%A8%D9%88%D8%AF%D9%87%D8%A7%DB%8C-%D8%A2%D9%86-qcbbdmyx1g8n</link>
                <description>مقدمه مقاله ResNet یکی از مقالات مهم و کلیدی منتشر شده در سال های اخیر در زمینه یادگیری عمیق است که تاکنون بیش از ۱۰۰ هزاربار به آن ارجاع داده شده است که پر ارجاع ترین مقاله دنیایی یادگیری عمیق تا کنون است و بعید است فعلا عنوان خود را از دست بدهد. میدانیم شبکه های عصبی هر چه عمیق تر شوند فرآیند یادگیری آنها پیچیده تر می شود و این مقاله تلاش می کند تا فرآیند یادگیری را برای الگوریتم های بهینه سازی ساده تر کند و عمق شبکه عصبی را به هر میزان که بخواهد زیاد کند. به عنوان نمونه در بخشانتهایی مقاله شبکه ای با عمق ۱۲۰۰ لایه نیز معرفی می شود. شبکه های عمیق در آن سال ها حدود ۲۰ لایه (شبکه VGG با ۱۹ لایه و GoogLeNet با ۲۲ لایه) داشته و طراحی و آموزش شبکه ای با ۱۲۰۰ لایه پیشرفت بزرگی محسوب می شود که البته چالشهای مخصوصبه خود را نیز داراستمساله چالشهای طراحی و آموزش شبکه های عصبی با عمق زیاد چیست ؟  به صورت کلی با اضافه شدن لایه ها و پارامترهای بیشتر به شبکه های عمیق با دو مشکل عمده روبرو می شود. (با فرضآن که مشکل بیشبرازش را نخواهیم داشت.محوشدگی گرادیان :محوشدگی گرادیان پدیده ای است که در اثر عمق زیاد شبکه عصبی به وجود می آید و در آن گرادیان ها از تابع ضرر به لایه های ابتدایی نمی رسند و با ضرب های متوالی کم و کمتر می شوند و این باعث می شود که وزن ها در لایه های ابتدایی به روز رسانی نداشته باشند و بنابراین شبکه خروجی مطلوب را نداشته باشد. تنزل (degradation):در پدیده تنزل(degradation)شبکه مشکل محو شدگی گرادیان ندارد و به صورت طبیعی وقتی لایه ها بیشتر قرار داده می شود انتظار می رود که شبکه عملکرد بهتری نسبت به شبکه هایی با لایه های کم عمق داشته باشد و یا در حداقل مورد ممکن عملکرد آن با شبکه های کم عمق برابر باشد، که این اتفاق نمی افتد ! (در مورد این پدیده در ادامه دقیق تر صحبت خواهد شد.)مشکل اول یعنی محوشدگی گرادیان تا با کمک تکنیکی مثل Batch Normalization تا حد بسیار زیادی رفع شد و نویسندگان مقاله نیز دو مرتبه (یک بار در پارگراف ۲ قسمت -In troduction و یک بار در پارگراف ۵ قسمت (Expriments به آن اشاره کرده اند و توضیح داده اند که با اندازه گیری گرادیان ها در تمامی لایه ها مشکل محوشدگی گرادیان مشاهده نشده است و تکنیک های نرمال سازی در لایه های میانی این مشکل را تا حد زیادی رفع کرده است.آنچه که مانع از نتایج خوب با عمیق تر شدن شبکه ها شده است پدیده تنزل یا degredation است. به صورت پیشفرضاگر محو شدگی گرادیان نداشته باشیم و شبکه نیز دچار مشکل بیش برازش نشده باشد، انتظار داریم هر چه عمق شبکه را اضافه کنیم، حداقل خروجی حداقل به اندازه شبکه های کم عمق تر باشد. به این علتکه این لایه ها اگر یکلایه همانی باشند (یعنی ورودی دریافت شده را مستقیم بدون هیچ تغییری به خروجی ببرند)بردار خروجی softmax مشابه شبکه کم عمق است و بنابراین دقت دقیقا همان دقت شبکه کم عمق می باشد. حال اگر به جای این شبکه های از لایه های کانولوشنی استفاده کنیم انتظار داریم اگر شبکه نتواند نتایج بهتری نسبت به شبکه کم عمق پیدا کند، حداقل لایه های اضافه شده را به صورت لایه های همانی یاد بگیرد و دقت خروجی کمتر نشود. اما مشکل دقیقا همین جا است و شبکه نمیتواند لایه های کانولوشنی اضافه شده را طوری وزن دهی کند که وروردی و خروجی این لایه ها تغییر نکنند و به تعبیری یک لایه identitiy باشد. در واقع الگوریتم های بهینه سازی استفاده شده این قابلیت را ندارند. شاید هم نتوان به الگوریتم های بهینه سازی خرده ای گرفت، چرا که هنوز به صورت ریاضیاتی اثبات همگرایی برای این الگوریتم ها در شبکه های عصبی ارایه نشده است و ما یک دید ناقص نسبت به عملکرد آنها داریم و اگر این دید کامل تر بود میتوانستیم شبکه ها را بهینه تر طراحی کنیم. در هر صورت باید چاره ای برای حل این مشکل یعنی مشکل تنزل یا degradation پیدا کنیم و این مقاله دقیقا همان جایی است که این مشکل را برطرف کرده است. شکل ۱ این پدیده را نشان داده است. علاوه بر آن در شکل ۲ نیز این پدیده به صورت کامل نشان داده شده است.مشاهده میکنیم که اگر چه تعداد لایه ها بالاتر رفته است و با مشکل بیش برازش نیز روبرو نیستیم ، اما شبکه ای با ۵۶ لایه عمکرد ضعیف تری نسبت به شبکه ای با ۲۰ لایه داشته است. همچنین در مقاله [؟] نیز تابع loss شبکه ۵۶-ResNet در حضور و عدم حضور مسیر های جانبی آورده است. شکل۳ این موضوع را نشان می دهد. مشاهده می گردد که چقدر حضور این مسیرهای جانبی به نرم تر شدن loss function کمک کرده است و این نرم تر شدن باعث مشتق گیری بهتر و طبیعتا همگرایی سریعتر الگوریتم می گردد که در نتایج نیز این موضوع مشخص است. روش حل مساله نویسندگان :مقاله پیشنهاد کردند که وقتی شبکه نمی تواند به صورت مستقیم لایه Identity را یاد بگیرید به کمک یک skip connection و به عبارتی یک مسیر جایگزین به او در این زمینه کمک کنیم ! شکل ۴ این موضوع را نشان می دهد. همانطور که در این شکل نشان داده شده است علاوه بر مسیر اصلی که شامل لایه های کانولوشنی و Batch Normalization و تابع فعال سازی است، داده ورودی به صورتمستقیم و بدون هیچ تغییری با خروجی لایه های غیرخطی استفاده شده جمع می گردد. اما این موضوع چه اثری دارد ؟در این حالت ما به شبکه در یادگیری کمک کرده ایم. به عبارتی در این حالت شبکه می تواند وزن های مربوط به لایه های کانولوشنی را صفر در نظر بگیرید و انگار که لایه های وزن دار عملا وجود ندارد و داده ورودی مستقیم به خروجی رفته است. به عبارتی انگار که لایه ای وجود نداشته است. تعبیر این موضوع این است که شبکه هر جا که دوست داشت می تواند لایه های وزن دار را در نظر بگیرد و اثر آن را در خروجی بیاورد و هر جا که دوست نداشت آن را نظر نگیرد و این باعث می شود که ما به هر تعدادی که بخواهیم لایه اضافه کنیم و شبکه لایه های مختلف را متناسب با درخواست خود به صورت لایه وزن دار در نظر بگیرید یا صرفا ورودی بدون هیچ تغییری در خروجی اعمال شود و این همان راه حل پیشنهادی شبکه است که باعث شده تا بتوانیم شبکه ای با ۱۰۰ و حتی ۱۰۰۰ لایه طراحی کنیم. نتایح خروجی نیز بسیار قابل توجه بود و در چالشILSVRC در همه بخشها با قدرت به عنوان تیم اول دست یافت. در بخشطبقه بندی به خطای ۳ .۶ ٪ رسیدند و در بخشObject Localization نیز نتیجه شبکه VGG که سال قبل اول شده بود را بیش از ۱۶ درصد بهبود دادند و به عدد ۹ درصد رساندند که بهبود قابل توجهی استبهبودها Mapping Identity اهمیت بررسی ۱ .۴ در مقاله ای که بعدتر توسط نویسندگان همین مقاله تحت عنوان Identity Mapping in Deep Residual Networks ارایه گردید، به صورت دقیق تر بلوک های residual با معماری و ساختارهای مختلف تست گردید و تلاش کردند تا به صورت بهینه تری طراحی ها را انجام دهند. در بخش اول طراحی بهینه بلوک های residual بر روی مسیر جانبی اطلاعات یا همان skip connection تحقیق و بررسی انجام گرفت و تلاش شد تا به روش های مختلف این مسیر کمی بهینه تر طراحی شود. بدین منظور معماری های مختلفی در این باره ارایه شد که در شکل ۵ مشاهده می گردد. در این شکل قسمت(a (همان بلوک ResNet معمولی می باشد. در قسمت(b (خروجی لایه های وزنی و خروجی مسیر جانبی هر دو در یکعدد ثابت(در اینجا۰ .۵(ضربشده اند.نتیجه البته جالب نبود و بلوک ResNet اصلی نتایج بهتری داشت. به عبارتی ضرب مقادیر باعث شده بود فرآيند یادگیری سخت تر شود. در قسمت (c (به کمک یک کانولوشن ۱ در ۱ و تابع فعال سازی sigmoid تلاش شده است تا یک ساختار گیت مانند (مشابه GRU و (LSTM ایجاد شود و فرآیند خروجی اطلاعات کمی هوشمندانه تر کنترل شود. نتایج البته باز هم مشابه بلوک ResNet اصلی نشد. علاوه بر آن نیاز به تنظیم دقیقی از مقادیر هایپرپارامترها داشت ات نتایج قابل قبولی را کسب کند. قسمت(d (مشابه قسمت(c (استبا این تفاوت که ساختار گیتمانند فقط بر روی مسیر جانبی عمل می کند. نتایج نیز مشابه قسمت قبل است. نیاز به تنظیم هایپرپارامترها دارد و البته از بلوک ResNet اصلی نیز ضعیف تر عمل می کند. بخش(e (نیز همان حرف بخش(d (را میزند اما با زبانی کمی متفاوت تر. در واقعا به جای ساختار گیت مانند صرفا از یک کانولوشن ۱ در ۱ استفاده می شود. نتایج این بخش در صورتی خوب است که تعداد بلوک های residual زیاد نباشد و در صورت زیاد بودن نتایج ضعیف تر می شود. بخش (f (نیز از dropout) با نرخ ۰ .۵ (در مسیر جانبی استفاده کرده است . مشابه بخش (b (می باشد که ورودی مسیر جانبی در یک عدد ثابت ضرب شده است و البته نتایج نیز قابل قبول نیست. به صورت کلی و برای جمع بندی می توان این طور گفت که مسیر جانبی اگر بدون هیچ مانعی باشد و اطلاعات به صورت مستقیم جریان یابد، نتایج خروجی بهتر است و در این ۶ مورد نیز در نهایت بلوک ResNet اصلی بهترین نتایج را کسب کرد. این موضوع نشان می دهد که با پیچیده تر نکردن مسیر جانبی ، الگوریتم بهینه سازی توانسته است مسیرهای بهتری را برای نقاط مینیمم پیدا کند و در نتیجه خروجی بهتری حاصل کند.ResNeXt بلوک ۳ .۴ بهبود بعدی در مورد ResNet معرفی ایده بلوک ResNeXt است که در آن یک بلوک ResNet به تعدادی مسیرهای موازی تجزیه می شود که طوری که تعداد پارامترها افزایش نیابد. در واقع در این حالت همزمان با ثابت ماندن تعداد پارامترها و بدون پیچیده تر کردن آن ، دقت را افزایشمی دهند. ایده مورد استفاده در این مقاله همان استراتژی merge-transform-split است که در نرون های عادی و معماری Inception نیز مشاهده شده است. یک بلاک ResNeXt در شکل ۷ نشان داده شده است. در این تصویر بلاک سمت چپ همان بلاک ResNet معمولی است و بلاک سمت راستنیز یک بلاک ResNeXt است. مشاهده می شود که لایه اول کانولوشنی در بلاک ResNet به صورت تعدادی مسیری موازی تبدیل شده است و لایه های کانولوشنی بعدی بدون هیچ گونه تغییری در مسیرهای موازی قرار گرفته اند. تعداد این مسیرهای موازی با کلمه کلیدی -Car dinality در مقاله معرفی شده است و در اینجا برای این که دو بلوک به لحاظ تعداد پارامترها مساوی باشند مقدار Cardinality یا به اختصار C برابر عدد ۳۲ در نظر گرفته شده است و عمق خروجی که در بلوک اصلی ResNet برای لایه کانولوشنی برابر ۶۴ بوده است در بلوک ResNext برابر ۴ می شود. همین تغییر ساده باعث می شود که نتایج بهتر شود و البته به لحاظ پیچیدگی نیز شبکه پیچیدگی بیشتری نداشته باشد. بر خلاف معماری Inception که هر چه این مسیرهای موازی بیشتر می شدند به تعداد پارامترها افزوده می شد و چالشهای مخصوصبه خود را همراه داشت. نتایج نیز جالب توجه بود و در حالی که خطا برای معماری ۱۰۱-ResNet برابر ۲۲ ٪ بود در معماری ۱۰۱-ResNeXt این خطا به عدد ۲۱ .۲ ٪ کاهش یافت. علاوه بر آن نویسندگان مقاله نیز با دو برابر کردن FLOPS از ۳ طریق مختلف نتایج را مقایسه کردند. به عبارتی یک بار عمق را اضافه کردند. یک بار به پهنا و عرض شبکه افزودند و بار دیگر پارامتر C را افزایش دادند و به این شکل پیچیدگی شبکه را دو برابر کردند. بازهم نتیجه جالب بود و معماری ResNeXt نتایج بهتری را کسب کرد.نتیجه گیری در این گزارش ایده درخشان معماری ResNet به تفصیل مورد بحث و بررسی قرار گرفت و مشاهده کردیم که چطور اضافه کردن یک مسیرجانبی می تواند به ساده تر شدن تابع هزینه کمک بسیاری کند و باعث شود که مشکل تنزل یا degradation حل گردد و شبکه هایی با هر عمقی را طراحی کنیم و مشکل عمق شبکه رفع شود. در گام بعد تلاش ها در زمینه بهبود بلوک ResNet معرفی گردید که مشاهده شد که چگونه ساده تر کردن مسیر جانبی و عدم قرارگیری تابع فعال سازی در مسیر جانبی نتایج را بهتر می کند. در انتها نیز ایده ResNeXt مورد بررسی قرار گرفت و با معرفی پارامتر Cardinality بدون اضافه کردن پیچیدگی به مساله نتایج قبلی بهبود داده شد.</description>
                <category>حامد قاسمی</category>
                <author>حامد قاسمی</author>
                <pubDate>Fri, 03 Jun 2022 21:57:44 +0430</pubDate>
            </item>
                    <item>
                <title>مروری بر مقاله Multi-Similarity Loss with General Pair Weighting for Deep Metric Learning</title>
                <link>https://virgool.io/@hamed74ghasemi/%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%D9%85%D9%82%D8%A7%D9%84%D9%87-multi-similarity-loss-with-general-pair-weighting-for-deep-metric-learning-t0sdzkxuxu0q</link>
                <description>حرف و نوآوری مقاله چیست ؟مقاله دو حرف مهم میزند :‌· یک رابطه و ساختار کلی برای تمامی Loss های موجود ارایه می کند که میتوانید همه Loss ها را از یک دریچه ببینیم و نگاهی واحد به همه آنها داشته باشیم و آنها را با یکدیگر مقایسه کنیم.· با استفاده از همین نگاه واحد و معرفی سه معیار شباهت در مورد جفت های انتخاب شده در Deep Metric Learning به معرفی Multi Similarity Loss می پردازد و نشان  می دهد که چگونه این Loss نتایج را تا حد زیادی بهبود می بخشد.معرفی General Pair Weighting (GPW)در این بخش قصد بر آن است که یک رابطه کلی برای تابع Loss بدست آورده شود که بتوانیم تمامی Loss های ارایه شده تاکنون را از دریچه همین رابطه کلی ببینیم. اما قصه از چه قرار است ؟‌با فرض آن که  xi یک بردار در فضای d بعدی است و ما m داده داریم بنابراین ماتریس نمونه های ما یک ماتریس است و به صورت کلی C کلاس مختلف نیز داریم که داده ها می توانند متعلق به این C کلاس باشند. حال    را فاصله بردار    و     در نظر بگیریم که این دو بردار در واقع بردارهای embedding خروجی شبکه عصبی هستند و اگر ما m داده داشته باشیم میتوانیم یک ماتریس S با ابعاد m در m تعریف کنیم که تمامی فواصل بردارها را در دل خود دارد.در Deep Metric Learning از آنجا که به دنبال نزدیک کردن یا دور کردن جفت های همسان یا ناهمسان هستیم میتوانیم تابع Loss را به فرم    بنویسیم که S همان فاصله بین جفت ها و y لیبل مربوط به هرکدام است. به عنوان مثال میتوانیم Contrastive Loss را به همین شکل بنویسیم :‌حال اگر از  L   نسبت به   تتا مشتق بگیریم طبق قاعده ضرب زنجیره ای خواهیم داشت :حال با انتگرال گیری از طرفین به رابطه زیر خواهیم رسید :‌که این تابع F تغییرات کمی نسبت به تابع L دارد و حتی در نسخه های قبلی مقاله نیز به جای F از خود L استفاده می شد که در نسخه نهایی آن تابع F جایگزین آن شده است که البته صحیح تر نیز است. حال رابطه بالا را برای جفت های همسان و نا همسان تجزیه میکند و  با فرض مثبت بودن مشتق L  برای جفت های نا همسان و منفی بودن آن برای جفت های همسان می توان رابطه زیر را نوشت :‌ساختار رابطه بالا بسیار جالب است. در واقع در این ساختار برای زوج های همسان و نا همسان یک وزن در نظر گرفته شده است و رابطه نهایی بر حسب این وزن ها می باشد که وزن های زوج ها به صورت کلی می توانند متفاوت باشند تا اثرگذاری متفاوتی در Loss نهایی داشته باشند. در ادامه مقاله ۴ تابع Loss معروف را مورد بررسی قرار میدهد و با مشتق گیری از آنها وزن های مربوط به زوج های همسان و نا همسان برای هر کدام از این Loss را محاسبه می کند و به کمک آن می تواند این توابع Loss را با یکدیگر مقایسه کند.１-  تابع Contrastive Loss :‌مقاله تابع Contrastive  را به صورت زیر تعریف می کند :که در آن وقتی یک جفت مثبت انتخاب می شود ، بخش دوم این تابع فعال می گردد و وقتی یک جفت منفی انتخاب می گردد بخش اول این تابع فعال می گردد. (این فعال بودن با Iij که مقدار صفر یا یک است مشخص می شود.)حال برای زوج های مثبت (که بخش دوم تابع فعال می گردد) مشتق را نسبت به  Sij  محاسبه کنیم به عدد یک میرسیم که وزن مربوط به زوج های مثبت یک در نظر گرفته می شود. همچنین برای زوج های منفی و وقتی که است با مشتق گیری مجدد به همین ضریب یک خواهیم رسید. به عبارت دیگر تابع Contrastive یک حالت خاص از GPW است که در بالا معرفی شد و در آن برای زوج های مثبت و منفی وزن دهی یکسانی در نظر گرفته شده است.2- تابع Triplet Loss :‌در Triplet Loss تلاش می شود تا بردارهای Embedding طوری یادگرفته شود که در آن مقدار فاصله زوج مثبت از زوج منفی با یک حاشیه ای کمتر باشد. رابطه ریاضی این تابع به صورت زیر تعریف می گردد‌:که در این رابطه  San فاصله زوج منفی و    Sap فاصله زوج مثبت است. مطابق رابطه بالا تنها در حالتی که رابطه درون پرانتز عددی مثبت شود تابع Triplet مقدار خواهد داشت. مجدد با مشتق گیری به صورت ساده واضح است که اگر چه شکل تابع Contrastive و Triplet و نوع انتخاب زوج های آنها با یکدیگر فرق دارد ، اما در نهایت وزن یکسانی را به زوج های مثبت و منفی اختصاص می دهد و زوج هایی که اطلاعات بیشتری دارند و به هم گرایی شبکه کمک بیشتری میکنند عملا نادیده گرفته می شوند و همان ضریب یک به آنها اختصاص داده میشود.3- تابع Lifted Structure Loss :‌این تابع از تمام جفت های مثبت و منفی موجود در یک mini-batch استفاده می کند و به تعبیری از حداکثر ظرفیت یک mini-batch استفاده می کند تا Loss را به کمترین مقدار خود برساند. رابطه این تابع Loss به صورت زیر تعریف می گردد:‌که در رابطه بالا مقدار لاندا  یک عدد ثابت است. در حالتی که این تابع یک مقدار غیرصفر را برمیگرداند با مشتق گیری از آن نسبت به  لاندا  به سادگی می توانیم وزن های مربوط به جفت های مثبت و منفی را مشخص کنیم.تابع MS Loss :‌قبل از معرفی تابع Multi Similarity Loss ابتدا سه نوع معیار شباهت تعریف می گردد و سپس از آنها برای تعریف تابع Loss نهایی استفاده می گردد.１- Self Similarity :‌این معیار شباهت که یکی از مهمترین ها نیز می باشد در واقع فاصله بین دو نمونه در یک pair می باشد. مثلا در یک جفت منفی هر چه شباهت کسینوسی بیشتر باشد به این معنی است که این زوج سخت تر هستند و حاوی اطلاعات بیشتری هستند و میتوانند نقش مهمی در همگرایی شبکه داشته باشند. توابع Loss معروفی مثل Contrastive Loss یا Binomial Deviance از این معیار شباهت در خود استفاده می کنند.البته این تابع معیار شباهت به تنهایی برای توصیف فضای Embedding کافی نمی باشد و ما نیاز داریم تا فاصله نسبی جفت ها با یکدیگر را بدانیم. به عبارتی با در نظر گرفتن یک Anchor ثابت فاصله نسبی زوج ها را نیز محاسبه کنیم که در ادامه معرفی گردیده است.２- Negative Relative Similarity :با در نظر گرفتن یک Anchor ثابت (مثلا مثبت) فاصله بین یک زوج منفی و دیگر زوج های منفی را Negative Relative Similarity می گوییم. مثلا اگر زوج منفی ۱ و زوج منفی ۲ وجود داشته باشند که دارای یک Anchor مشترک باشند و فاصله زوج اول از زوج دوم کمتر باشد (به عبارت شباهت کسینوسی زوج اول از زوج دوم بیشتر باشد) آنگاه این فاصله یک فاصله نسبی است. به عبارت دیگر تفاوت بین فاصله زوج ها با یکدگیر است که این زوج ها زوج هایی منفی هستند. شکل زیر نیز به بیانی زیباتر آن را توصیف کرده است :‌۳- Positive Relative Similarity :این معیار شباهت فاصله بین زوج کنونی با زوج های مثبت است. مثلا در شکل زیر وقتی نمونه های مثبت به یکدیگر نزدیک می شوند فاصله زوج کنونی که یک زوج منفی است با سایر زوج های مثبت کم و کمتر می شود. تابع Triplet Loss از این نوع معیار شباهت استفاده می کند.حال به کمک این سه نوع معیار شباهت می توانیم انواع توابع Loss را با یکدیگر مقایسه کنیم و از دیدی جامع تر به آنها نگاه کنیم. در جدول زیر مقایسه مربوط به هر کدام از این Loss ها آورده شده است :‌در این جدول منظور از S همان Self-Similarity ، منظور از N همان Negative Relative Similarity و منظور از P همان Positive Relative Similarity است. مشاهده میکنیم که انواع Loss های مختلف تنها از یک یا حداکثر دو نوع معیار شباهت استفاده می کنند در حالی که Loss معرفی شده در این مقاله یعنی MS Loss که در ادامه معرفی می شود از هر سه نوع معیار شباهت استفاده می کند و همین باعث می شود که نتایج آن نسبت به سایر توابع Loss بهتر باشد.معرفی تابع MS Loss :‌تابع MS Loss برای وزن دهی pair ها از دو مرحله کلیدی استفاده می کند. مرحله اول mining است که در آن pair ها به وسیله Similarity-P انتخاب می شوند و در مرحله بعد یعنی weighting به کمک Similarity-S و Similarity-N جفت های انتخاب شده وزن دهی می شوند. به عبارتی از هر سه نوع Similarity که در بخش قبل معرفی شد، در اینجا استفاده می شود که این همان نقطه قوت MS Loss است. در ادامه این دو مرحله کمی دقیق تر بررسی می شوند.مرحله اول : Miningدر این مرحله ابتدا جفت هایی که بیشترین اطلاعات را دارند به کمک Similarity-P انتخاب می شوند. به صورت دقیق تر یک جفت منفی با سخت ترین جفت مثبت مقایسه می شود. ( سخت ترین جفت مثبت یعنی جفتی که کمترین میزان شباهت را دارند. ) و البته یک جفت مثبت نیز با سخت ترین جفت منفی مقایسه می شود. یعنی جفتی که بالاترین میزان شباهت را دارد. اگر بخواهیم کمی ریاضیاتی تر این موضوع را بیان کنیم می توانیم روابط زیر را بنویسیم.۱ – رابطه مربوط به انتخاب جفت منفی :‌(منظور از اپسیلون همان margin یا حاشیه است. )۲ – رابطه مربوط به انتخاب جفت مثبت :‌(منظور از اپسیلون همان margin یا حاشیه است. )مرحله دوم :‌ Weightingدر مرحله قبل جفت های خوب و حاوی اطلاعات انتخاب می شوند و در این مرحله این جفت ها به صورت دقیق وزن دهی می شوند تا نتیجه نهایی بهتر شود. برای وزن دهی از Similarity-N و Similarity-S استفاده می گردد. برای وزن دهی جفت ها از توابع binomial deviance loss و Lifted Structure loss استفاده می گردد. این دو تابع به ترتیب از Similarity-S و Similarity-N برای وزن دهی جفت ها استفاده می کنند و در اینجا نیز با الهام از این توابع Loss وزن ها تعریف می گردد‌:وزن مربوط به جفت های منفی به صورت زیر تعریف می گردد :و وزن مربوط به جفت های مثبت به صورت زیر تعریف می گردد‌:که در آن آلفا و بتا و گاما هایپرپارامترها هستند. (مشابه تابع Binomial Deviance Loss)از آنجا که این دو رابطه وزن های مربوط به جفت ها مثبت و منفی هستند میتوانیم با ترکیب دو مرحله Mining و Weighting و استفاده از GPW که در بخش قبل معرفی گردید می توانیم رابطه نهایی مربوط به Loss را محاسبه کنیم. (مشتق گیری از این تابع Loss ما را به همان روابط بالا می رساند.)نتایج :‌در جدول زیر نیز نتایج بر روی دیتاست Cars-196 با معیار Recall@K آورده شده است. عملکرد مناسب این تابع Loss به خوبی قابل مشاهده است و نشان می دهد که چگونه با درصد مناسبی از تمامی توابع Loss قبلی بهتر عمل کرده است. اندیس m در این جدول اضافه شدن مرحله Mining به تابع Loss مربوطه است که نشان می دهد همین موضوع بین ۲ تا ۴ درصد نتایج را بهبود داده است.جمع بندی :در این مقاله ابتدا یک ساختار و دید کلی از تمامی توابع Loss به کمک GPW معرفی گردید که این دید این امکان را به ما داد که بتوانیم تمامی توابع Loss قبلی را از نگاهی واحد ببینیم و آنها را مقایسه کنیم. علاوه بر آن با استفاده از همین دیدگاه و تعریف معیارهای شباهت Similarity-S و Similarity-N و Similarity-P تابع MS Loss معرفی گردید که نتایج را به طرز قابل ملاحظه ای بهبود بخشید.</description>
                <category>حامد قاسمی</category>
                <author>حامد قاسمی</author>
                <pubDate>Fri, 03 Jun 2022 21:45:57 +0430</pubDate>
            </item>
                    <item>
                <title>مروری بر مقاله Unsupervised Learning by Competing Hidden Units</title>
                <link>https://virgool.io/@hamed74ghasemi/%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%D9%85%D9%82%D8%A7%D9%84%D9%87-unsupervised-learning-by-competing-hidden-units-wvy2le1r39ed</link>
                <description>مقدمه :این مقاله یک تکنیک جدید در حوزه Unsupervised Learning را معرفی کرده است که بخش عمده از فرآیند آموزش آن بدون استفاده از Backpropagation است و در انتها نیز مدل برای یک Task مشخص آموزش ندیده است و میتواند بسته به نوع Task شخصی سازی شود که این از نقاط قوت روش است. البته در مقاله مثال ها و نتایج بر روی داده های تصویر نشان داده شده است ولی هیچ محدودیتی در این زمینه وجود ندارد و میتوان همین روش را بر روی انواع Task ها و نوع داده های دیگر نیز انجام داد.نویسندگان مقاله یعنی Dimitry Krotov و John Hopfield پیش زمینه نوروساینس دارند و این پیش زمینه نیز در مقاله خود را نشان داده و اصولا مقاله نیز بر مبنای دو مشاهده زیستی بنا شده است. تفکر آنها این است که قواعد یادگیری در شبکه های عصبی (backpropagation یا SGD) ، بر خلاف نرون ها و ساختار آنها که الهام گرفته از سیستم عصبی انسان است، هیچ گونه ارتباطی با نروبیولوژی ندارد و تلاش دارند که بر مبنای مشاهدات زیستی یک الگوریتم یادگیری ارایه کنند.الگوریتم ارایه دهنده آنها بر مبنای دو مشاهده است که در زیر به آنها پرداخته شده است :‌مشاهده ۱‌: تغییرات سیناپسی به صورت محلی است :‌در یک سیستم عصبی واقعی پاسخ نرون توسط یک روش تغییر سیناسپسی انجام می شود که به صورت فیزیکی محلی است. این جمله شاید کمی نامفهوم باشد. پس کمی آن را بازتر میکنیم. فرض کنید یک اتصال سیناپسی                       که بین دو نرون i و j قرار دارد. در فرآیند آموزش به وسیله الگوریتم SGD تغییر این وزن نه تنها به نرون های i و j بستگی دارد بلکه به لیبل ها و فعالیت نرون های لایه های بعد نیز بستگی دارد. (فرمول Backpropagation) پس فرآیند یادگیری در این حالت local نیست در حالی که در یک سیستم عصبی واقعی این وزن و اتصال به صورت Local تغییر می کند و اینجا همان نقطه ای که نویسندگان مقاله میخواهند آن را رفع کنند و روشی ارایه دهند که این اتصال به صورت Local و محلی تغییر کند. اگر چه تغییرات در سیستم عصبی میتواند به بعضی از متغیرهای Global بستگی داشته باشد (مثل وضعیت توجه حیوان ، ترس و ...) اما باز هم به فعالیت سایر نرون ها بستگی ندارد.مشاهده ۲ :‌ فرآیند یادگیری در حیوانات بدون استفاده از Label است و سیستم عصبی آنها نیز داده بسیار کمتری را برای یادگیری نیاز دارد.فرآیند یادگیری شبکه های عصبی در بسیاری از اوقات نیاز به حجم زیادی از داده های label دار دارد در حالی که وقتی به موجودات زنده مثل انسان یا حیوان نگاه میکنیم برای یادگیری نیاز به این حجم از داده نیست و یادگیری با حجم داده بسیار کمتری امکان پذیر است.بنابراین سوالی که مقاله به دنبال پاسخ آن است این سوال است :“آیا میتوان فرآیند یادگیری بدون استفاده از داده های Label دار باشد و فرآیند تغییر وزن ها نیز به صورت local باشد و بسته به فعالیت نرون ها در لایه های بعد نداشته باشد ؟‌ “در ادامه به الگوریتم یادگیری مطرح شده میپردازیم.یادگیری محلی به صورت Unsupervised :‌قبل از معرفی الگوریتم دو نکته در مورد این مقاله قابل ذکر است :· نکته ۱ : به لحاظ محاسباتی این الگوریتم محاسبات کمتری دارد و حجم محاسبات آن تقریبا مشابه با Forward Pass در ‌Backpropagation است.· نکته ۲ : برای بدست آوردن یک representation مناسب نیاز نیست که بر روی یک Task خاص آموزش ببینید.حال به توضیح ساختار کلی الگوریتم میپردازیم :بخش سمت چپ تصویر بالا همان الگوریتم یادگیری زیستی است که فرآیند آپدیت وزن های آن به صورت Local است و در آن داده بدون استفاده از هیچ گونه Label در این ساختار جاری می شود و وزن های مربوطه آپدیت می گردد. پس از آموزش این بخش اگر بخواهیم این ساختار را برای یک مساله خاص گسترش دهیم کافی است تا یک شبکه Fully Connected به این ساختار اضافه کنیم (بخش سمت راست تصویر بالا) و آن را به کمک الگوریتم Backpropagation آموزش دهیم. در طی کل فرآیند آموزش تنها این بخش است که از Backpropagation استفاده میکند.در ادامه کمی دقیق تر به ریاضیات مربوط به این ساختار میپردازیم.روابروابط بالا همان روابطی است که در شبکه های عصبی به صورت متداول دیده می شود. تنها نکته در روابط بالا مربوط به توان n تابع فعال سازی می باشد که اگر این مقدار برابر یک باشد همان تابع فعال سازی ReLU است. همچنین وزن های Wui به کمک الگوریتم Unsupervised که در ادامه معرفی می شود آپدیت میگردد. لازم به ذکر است که همانطور که گفته شد برای آپدیت این بخش از وزن ها از هیچ Label ای استفاده نمی شود. پس از آموزش این بخش نیز    نیز به کمک همان روش متداول SGD محاسبه می گردد.نحوه محاسبه وزن های   Wui  :به صورت معمول برای محاسبه خروجی  hu باید ورودی یعنی  vi   در  Wui   ضرب ماتریسی شود و سپس تابع فعال سازی غیرخطی اعمال گردد. در تکنیک جدید ارایه شده در مقاله مقدار   hu  از طریق حل معادل دیفرانسیلی زیر بدست می آید‌:در بالا همان روابطی است که در شبکه های عصبی به صورت متداول دیده می شود. تنها نکته در روابط بالا مربوط به توان n تابع فعال سازی می باشد که اگر این مقدار برابر یک باشد همان تابع فعال سازی ReLU است. همچنین وزن های Wuj به کمک الگوریتم Unsupervised که در ادامه معرفی می شود آپدیت میگردد. لازم به ذکر است که همانطور که گفته شد برای آپدیت این بخش از وزن ها از هیچ Label ای استفاده نمی شود. پس از آموزش این بخش نیز    نیز به کمک همان روش متداول SGD محاسبه می گردد.نتایج :‌برای ارزیابی الگوریتم از دو دیتاست MNIST و CIFAR-10 استفاده شده است و ابتدا به کمک الگوریتم زیستی پیشنهاد شده وزن های محاسبه شده اند. برای این بخش ۲۰۰۰ نرون در لایه مخفی قرار داده شده است. وزن دهی اولیه این پارامترها نیز به کمک توزیع نرمال استاندارد انجام شده است. در مرحله بعد با استفاده از الگوریتم SGD بخش Supervised آموزش داده شده است که در این مرحله وزن های بخش اول آپدیت نخواهد شد و اصطلاحا Freeze می شوند.نتایج مربوط به دیتاست MNIST‌:‌نتایج بدست آمده نیز قابل ملاحظه بود. در شکل زیر نمودار مربوط به فرآیند Train و Test برای دیتاست MNIST آورده شده است که در ادامه بررسی می گردد‌:‌نتایج بسیار قابل ملاحظه است. بخش سمت راست تصویر بالا ، نتایج مربوط به فرآیند Train و Test الگوریتم SGD (یعنی شبکه ای معادل با شبکه پیشنهادی به ترتیب با ۷۸۴ و ۲۰۰۰ و ۱۰ نرون ) با رنگ های صورتی و سبز رنگ نشان داده شده است و نتایج مربوط به ترکیب روش زیستی و SGD نیز با رنگ های آبی و قرمز نشان داده شده است. آنچه که در اینجا بیشتر اهمیت دارد نتایج بر روی داده های Test است که مشاهده میکنیم که الگوریتم زیستی توانسته است کاملا پا به پای الگوریتم SGD حرکت کند. اگر چه در فرآیند آموزش نتایج SGD کمی بهتر است اما در نهایت نتایج بر روی داده های تست معادل می باشد و این نشان می دهد که الگوریتم زیستی توانسته است به رقابت با SGD بپردازد و خطایی معادل با ۱.۵۲ درصد کسب کند که نسبت به سایر الگوریتم های زیستی ارایه شده به مراتب بهتر است. (بهترین نتایج مقالات قبل بین ۲ تا ۳ درصد خطا را ارایه می کردند.)در اشکال سمت چپ و وسط تصویر بالا نیز ویژگی های یاد گرفته شده توسط الگوریتم زیستی و SGD نشان داده شده است و مشاهده می گردد که ویژگی های یاد گرفته شده کاملا متفاوت می باشند. رنگ های استفاده شده در شکل بالا به این صورت است که رنگ سفید نشان دهنده وزن های صفر و رنگ قرمز نشان دهنده وزن های مثبت و رنگ آبی نشان دهنده وزن های منفی می باشد. نکته مهمی که در اینجا وجود دارد آن است که این الگوریتم صرفا یک تطبیق ساده با اعداد را یاد نمیگیرد و به واقع به دنبال یادگیری الگوها است. در بخش چپ شکل بالا از ۱ تا ۵ (نحوه خواندن : از چپ به راست و سپس از بالا به پایین) یک سری زیرالگو استخراج شده است که نشان می دهد شبکه به دنبال یادگیری ساختار و الگوها است. اگر چه این موضوع در نتایج مربوط به داده های تست نیز قابل مشاهده بود. چرا که اگر به دنبال تطبیق الگو بود قطعا قادر به رقابت با SGD که ساختارها را پیدا میکند ، نبود.نتایج مربوط به داده های CIFAR-10 :‌برای دیتاست CIFAR-10 نیز به صورت مشابه ۲۰۰۰ نرون در لایه مخفی در نظر گرفته شده است و ساختار شبکه تشکیل شده از ۳۰۷۲ و ۲۰۰۰ و ۱۰ نرون (نرون های لایه آخر) که این ساختار به کمک ترکیبی از الگوریتم زیستی و SGD یک بار آموزش دیده است و بار دیگه کل ساختار به کمک SGD آموزش دیده شده است. در شکل زیر نتایج مربوط به فرآیند Train و Test این الگوریتم آورده شده است :‌برای SGD نتایج تا ۱۰۰ ایپاک آموزش داده شده است ولی برای الگوریتم زیستی نتایج تا ۵۰۰ ایپاک ادامه پیدا کرده است تا بتوان به لحاظ خطا به SGD نزدیک شد. البته قابل ذکر است که حجم محاسبات در الگوریتم زیستی به خاطر ذات آن کمتر می باشد و ۵۰۰ ایپاک آن نسبت به ۵۰۰ ایپاک الگوریتم SGD زمان کمتری را میگیرد و به لحاظ زمانی برای محاسبه با دقت بیشتری را داشت. اما در هر صورت نشان داده شده است که باز هم الگوریتم می تواند به دقت کافی برسد.قابل ذکر است که دیتاست CIFAR-10 مورد علاقه طراحان الگوریتم های زیستی نیست و عموما کمتر دیده می شود در حالی که در این مقاله نتایج مربوط به آن آورده شده است.با وجود همه نتایج اما به نظر می رسد الگوریتم های زیستی هنوز مسیر درازی را در پیش دارند. به عنوان مثال این مقاله به سوالات زیر پاسخ نداده است :‌· آیا برای بهینه ساز Adam نیز نتایج به همین شکل است و الگوریتم زیستی می تواند به رقابت با Adam  بپردازد ؟‌· آیا برای تعداد لایه های بیشتر این اتفاق تکرار می شود ؟· برای سایر Task ها چطور ؟ آیا الگوریتم زیستی قادر به رقابت با بهینه سازهای دیگر خواهد بود‌؟جمع بندی‌:در این مقاله تلاش شده است تا با الهام بخشی از نحوه یادگیری حیوانات فرآیند آموزش را کمی متفاوت تر کند. الگوریتم زیستی پیشنهاد شده به صورت Unsupervised آموزش می بیند چنانچه یادگیری حیوانات نیز بدون استفاده از Label می باشد. این الگوریتم پیشنهادی مربوط به Task خاصی نیست و برای آن که یک Task خاص مثل طبقه بندی را انجام دهد کافی است تا یک یا چند لایه Fully Connected اضافه گردد و به کمک SGD و Backpropagation آموزش ببیند. در نهایت نیز نشان داده شده که برای Task های خاص و ساده مثل طبقه بندی MNIST و CIFAR-10 نتایج میتواند به شبکه ای معادل که تنها با SGD آموزش دیده است نزدیک شود.</description>
                <category>حامد قاسمی</category>
                <author>حامد قاسمی</author>
                <pubDate>Fri, 03 Jun 2022 21:26:15 +0430</pubDate>
            </item>
            </channel>
</rss>