تنظیم دقیق

**تنظیم دقیق** (Fine-Tuning) فرایندی است که در آن پارامترهای یک مدل باید به‌صورت خیلی دقیقی تنظیم شوند تا مدل با مشاهدات مشخصی تناسب پیدا کند. این فرایند در یادگیری ماشین یک فرایند بسیار متداول است که در آن با اضافه کردن لایه های جدید مدل از پیش آموزش داده شده‌ای، سعی می‌شود که پارامتر های آن مدل حاصل به گونه ای تنظیم شود که دقت مدل روی یک مجموعه داده ی جدید نیز بالا رود.

## تکنیک های تنظیم دقیق در یادگیری ماشین
* یادگیری انتقالی(Transfer Learning)
در مدل های شبکه عصبی پردازش تصویر که کار آن ها دسته‌بندی(Classification)است، ابتدا لایه آخر را که فرضاً یک لایه n نورونی به m نورون(که در اینجا m نشان دهنده ی تعداد کلاس های دیتاست اصلی مدل است) را حذف می‌کنیم. سپس لایه آخر را یک لایه ی n به k(که در اینجا k نشان دهنده ی تعداد کلاس های دیتاستی میباشد که میخواهیم مدل را روی آن تنظیم دقیق کنیم) می‌گذاریم. حال وزن های همه لایه ها به جز لایه آخر که خودمان اضافه کردیم را ثابت میکنیم و حال دوباره مدل را آموزش می‌دهیم تا روی این دیتاست به دقت بالایی برسد.

واضح است که یادگیری انتقالی یک روش کارامد است و درک مناسبی از اینکه چرا کارامد می‌باشد داریم. مدل، ویژگی(Feature)های بسیاری را از تصاویری که قبلاً روی آنها آموزش داده شده است یادگرفته تا یک تصویر کلی مناسبی از اینکه دسته‌بندی تصاویر چگونه است داشته باشد.
* Ensemble 
بندانگشتی|Ensemble Learning
در مسائل Ensemble هدف این است که به مدلی دستیابی پیدا کنیم که بتواند به بهترین شکل ممکن، خروجی را پیش‌بینی کند. در نتیجه به جای ساختن یک مدل و امید داشتن به آن که این مدل بهترین پیش‌بینی را از خروجی میکند، روش‌های مجموعه‌ای مدل‌های بی‌شماری را در نظر می‌گیرند و آن مدل‌ها را برای تولید یک مدل نهایی میانگین می‌گیرند. توجه به این نکته مهم است که Ensemble learning تنها شکل متدهای گروهی نیستند، بلکه امروزه محبوب‌ترین و مرتبط‌ترین روش‌ها در Data Science هستند.
BAGGing یا Bootstrap AGGregating. BAGGing نام خود را به این دلیل گرفت که Bootstrapping و Aggregation را برای تشکیل یک مدل گروه ترکیب می کند. با توجه به نمونه ای از داده ها، چندین نمونه فرعی بوت استرپ کشیده می شوند. یک درخت تصمیم بر روی هر یک از نمونه های فرعی بوت استرپ تشکیل می شود. پس از تشکیل هر زیرنمونه درخت تصمیم، از الگوریتمی برای تجمیع درختان تصمیم برای تشکیل کارآمدترین پیش‌بینی کننده استفاده می شود. که در این مرحله معمولاً از Major voting استفاده می‌شود.
* بهینه‌سازی ابرپارامتر ها 
مرحله 1 - تصمیم‌گیری در مورد توپولوژی شبکه (در واقع بهینه‌سازی در نظر گرفته نمی شود، اما واضح است که بسیار مهم است)
مرحله 2 - تنظیم کردن نرخ یادگیری(Learning Rate)
یکی از رایج ترین الگوریتم های بهینه‌سازی، استوکستیک گرادیان دیسنت (SGD) است. ابرپارامترهایی که می توانند در SGD بهینه شوند عبارتند از نرخ یادگیری، تکانه، Decay و nesterov.
مرحله 3 - انتخاب یک Optimizer و یک تابع هزینه
مرحله 4 - تعیین کردن Batch size و تعداد Epoch وسپس استفاده از متدهای Cross Validation برای تنظیم ابرپارامترها

* استفاده از وزن های اولیه ی مختلف
تخصیص مقادیر تصادفی به وزن ها بهتر از تخصیص 0 است. اما نکته ای وجود دارد که باید به خاطر داشته باشم این است که چه اتفاقی می افتد اگر وزن ها با مقادیر بالا یا مقادیر بسیار پایین مقداردهی اولیه شوند و یک مقدار اولیه اولیه منطقی برای مقادیر وزن چیست.

الف) اگر وزن ها با مقادیر بسیار بالا مقداردهی اولیه شوند، عبارت np.dot(W,X)+b به طور قابل توجهی بالاتر می شود و اگر یک تابع فعال سازی مانند sigmoid() اعمال شود، تابع مقدار خود را نزدیک به 1 در جایی که شیب گرادیان دارد ترسیم می کند. به آرامی تغییر می کند و یادگیری زمان زیادی می برد.

ب) اگر وزن ها با مقادیر کم مقدار دهی اولیه شوند، به 0 نگاشت می شود، جایی که حالت مانند بالا است.

اولین ابرپارامتری که ما سعی خواهیم کرد از طریق Cross Validation بهینه‌سازی کنیم، مقدار اولیه وزن های مختلف است. مقدار دهی اولیه وزن روشی برای تنظیم وزن شبکه عصبی به مقادیر تصادفی کوچک است که نقطه شروع بهینه سازی (یادگیری یا آموزش) مدل شبکه عصبی را مشخص می کند.