مبادله بایاس و واریانس

در علم یادگیری ماشین و مباحث آماری، دو مفهوم بایاس (اریبی) و واریانس حائز اهمیت است. درنتیجه مفهومی به نام مبادله بایاس و واریانس (Bias-variance tradeoff) به وجود می‌آید که بیانگر رابطه بین واریانس و بایاس با یکدیگر در مدل‌های یادگیری ماشین است. بایاس نتیجهٔ خطا در انتخاب مدل است. در حالی که واریانس نتیجهٔ حساس بودن بیش از اندازه مدل به داده‌های آموزش است. هریک از این دو، به نوعی مقدار خطای مدل آموزش داده شده را نشان می‌دهند. آنچه در هنگام آموزش یک مدل دنبال می‌شود، کم کردن هردوی بایاس و واریانس است. اما در واقعیت با کم کردن واریانس (که معادل با پیچیده‌تر کردن مدل است) بایاس افزایش می‌یابد. همچنین با کاهش بایاس (که معادل با ساده‌تر کردن مدل است) واریانس افزایش می‌یابد. درواقع یک موازنه و مبادله بین مقادیر بایاس و واریانس وجود دارد و کاهش هردوی آن‌ها امکان‌پذیر نیست. به این حالت تناقض بایاس-واریانس (Bias-Variance dilemma) گفته می‌شود.

بایاس یا همان اریبی، درواقع مقدار اختلاف تابع آموخته شده از تابع حقیقی را نشان می‌دهد. معمولاً زیاد بودن بایاس منجر به کم‌برازش (underfitting) می‌شود و در نتیجه مدل حتی در داده‌های آموزش نیز خروجی مورد انتظار را ندارد. برای مثال اگر تابع حقیقی  f(x)  باشد و روی داده آموزشی  S  مدل را آموزش بدهیم، مقدار بایاس برابر با عبارت زیر خواهد بود.
 Bias(h_S) = \mathbb{E}_S [h_S(x)]-f(x) 
واریانس به معنی میزان نوسانات مدل حول میانگین آن است. رابطه آن به‌صورت زیر است.

Var(h_S) = \mathbb{E}[(h_S(x)-\mathbb{E}_S[h_S(x)])^2]

درواقع مدلی که بر روی داده به‌طور کلی آموزش می‌بیند و روی هر داده به‌صورت بسیار دقیق تمرکز نمی‌کند، واریانس کمتری خواهد داشت. هرچه واریانس مدل بیشتر باشد، احتمال بیش‌برازش (Overfitting) بیشتر خواهد بود.

در تصویر زیر ارتباط بین بایاس و واریانس، و نقش آن‌ها در ایجاد بیش‌برازش یا کم‌برازش به‌طور شفاف مشخص شده‌است.

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

از طرفی، بیش‌برازش زمانی رخ می‌دهد که مدل علاوه بر اطلاعات اصلی داده، به نویز نیز به مقدار قابل ملاحظه‌ای توجه می‌کند و درصورتی که مجموعه داده دارای نویز زیادی باشد، عملکرد آن روی داده‌هایی که از قبل ندیده به شدت افت می‌کند. یکی از الگوریتم‌های یادگیری ماشین که به نویز حساس هستند و می‌توانند واریانس زیادی داشته باشند، درخت تصمیم است.

## بررسی خطای میانگین مربعات از منظر بایاس و واریانس
برای بررسی این بخش مسئله رگرسیون خطی را در نظر بگیرید. در این مسئله هدف پیدا کردن تابع f(x) است به طوری که با یادگیری بر روی داده‌های D = { (x_1),...,(x_N,y_N)} بتواند در آینده به ازای داده ورودی  x  خروجی y را تخمین بزند. برای راحت‌تر شدن محاسبات تابع را به‌صورت f(x;D)  بازنویسی می‌کنیم. این مسئله گاهی به نام تعمیم :en:Generalization (learning) شناخته می‌شود. حال در این مسئله برای به‌دست آوردن میزان خطا می‌توان از خطای میانگین مربعات استفاده کرد. درنتیجه می‌توان میزان خطا را به صورت رابطه زیر بازنویسی کرد.

E[(y-f(x;D))^2|x,D]

در طول زمان وابستگی f  به  D  ثابت است، درنتیجه عبارت بالا به‌صورت زیر نوشته می‌شود.

E[(y-f(x;D))^2|x,D] = E[(y-E[y|x])^2|x,D]+(f(x;D)-E[y|x])^2

عبارت E[(y-E[y|x])^2|x,D]  به تابع f یا مجموعه داده بستگی ندارد و واریانس y نسبت به x است. درنتیجه خطای میانگین مربعات f نسبت به E[y|x] معادل است با:

E_D[(f(x;D)-E[y|x])^2] = E_D[((f(x;D)-E_D[f(x;D)])+(E_D[f(x;D)]-E[y|x))^2]



= E_D[(f(x;D)-E_D[f(x;D)])^2]+E_D[(E_D[f(x;D)]-E[y|x])^2]+ 2E_D[(f(x;D)-E_D[f(x;d)])(E_D[f(x;D)]-E[y|x])]



= E_D[(f(x;D)-E_D[f(x;D)])^2]+(E_D[f(x;D)]-E[y|x])^2+ 2E_D[f(x;D)-E_D[f(x;D)]].(E_D[f(x;D)]-E[y|x])



=(E_D[f(x;D)]-E[y|x])^2+ E_D[(f(x;D)-E_D[f(x;D)])^2]

طبق روابط بالا ثابت می‌شود که

MSE=(E_D[f(x;D)]-E[y|x])^2+ E_D[(f(x;D)-E_D[f(x;D)])^2]

بخش اول عبارت مربوط به خطا برابر با توان دوم بایاس است. همچنین بخش دوم طبق تعریفی که در ابتدای این متن نیز بررسی شد بیانگر واریانس است. در نتیجه می‌توان گفت

E[(y-f(x)^2]=bias^2+variance


## راهکارهای مقابله با خطای زیاد در مدل به واسطه بایاس و واریانس
برای آنکه مدل بایاس زیادی نداشته باشد راهکارهای زیر قابل استفاده است.
* **تغییر مدل و معماری**: یکی از ابتدایی‌ترین راهکارها در مقابله با بایاس زیاد، تغییر مدل است. همان‌طور که پیشتر نیز اشاره شد استفاده از مدل‌های خطی رگرسیون ممکن است باعث افزایش بایاس شوند.
* **بررسی آنکه مجموعه داده نمایانگر تمام فضای حالات موجود است**: درصورتی که در مجموعه داده آموزش، از تعدادی از کلاس‌ها داده به اندازه کافی وجود نداشته باشد، مدل نمی‌تواند پیش‌بینی درستی از آن‌ها داشته باشد. درصورتی که مجموعه داده توازن نداشته باشد، روش‌هایی مانند وزن دادن به دادده‌های موجود، اضافه کردن ضریب جریمه به تابع خطا، یا نمونه سازی مجدد (resampling) می‌تواند به بهبود عملکرد مدل کمک کند.
* **تنظیم پارامترها**: بااستفاده از بهینه‌سازی ابرپارامترها می‌توان روند و سرعت یادگیری مدل را تغییر داد. درصورتی که این ابرپارامترها به درستی تنظیم نشوند، ممکن است یادگیری صورت نگیرد.
* **تنظیم k در [[الگوریتم کی-نزدیک‌ترین همسایه]]**: در صورتی که مقدار k زیاد باشد بایاس افزایش می‌یابد.

برای آنکه مدل واریانس زیادی نداشته باشد راهکارهای زیر قابل استفاده است.
* **استفاده از روش‌های [[یادگیری گروهی]] (Ensemble Learning)**: در این روش، از تعداد زیادی مدل برای تخمین خروجی استفاده می‌شود و باتوجه به مجموع خروجی مدل‌ها (که می‌توانند همگی از یک نوع باشند یا چندین الگوریتم متفاوت داشته باشند) خروجی نهایی به دست آورده می‌شود.
* **افزایش داده**: افزایش داده باعث می‌شود یک قاعده و تابع کلی‌تر برای مدل کردن ورودی و خروجی پیدا شود. درواقع مدل در معرض داده‌های نویزدار و بدون نویز بیشتری قرار می‌گیرد و عملکردش بهبود می‌یابد.
* **تنظیم تعداد لایه‌ها در شبکه‌های عصبی**: در شبکه‌های عصبی با افزایش تعداد لایه‌های مدل، شبکه بر روی داده‌های آموزش بیش‌برازش می‌شود و در نتیجه عملکردش در زمان تست کاهش می‌یابد.

## منابع

* 
* 
* 
*