قابلیت «عمومی‌سازی» (Generalization) از جمله ویژگی‌های مهم هر مدل یادگیری ماشین است. مدل یادگیری ماشین باید بتواند نمونه‌های جدید از پیش دیده نشده را با دقت قابل قبولی نسبت متغیر هدف پیش‌بینی کند. گاهی به‌خاطر سادگی بیش از حد و در نظر نگرفتن برخی معیارهای مهم یا پیچیدگی بالا از طرف دیگر، مدل یادگیری ماشین به اصطلاح داده‌ها را «بیش‌برازش» (Overfit) می‌کند. بیش‌برازش یا Overfitting در یادگیری ماشین بسیار رایج است. در این مطلب از مجله فرادرس، علاوه‌بر آشنایی بیشتر با مفهوم بیش‌برازش در یادگیری ماشین، نحوه شناسایی و راه‌های مقابله با آن را نیز یاد می‌گیریم.

فهرست مطالب این نوشته

در این مطلب، ابتدا یاد می‌گیریم بیش‌برازش یا همان Overfitting در یادگیری ماشین چیست و سپس با نحوه تشخیص و شناسایی آن آشنا می‌شویم. سپس در ادامه به بررسی دلایل ایجاد بیش‌برازش و تفاوت آن با «کم‌برازش» (Underfitting) می‌پردازیم. در انتهای این مطلب از مجله فرادرس، مجموعه‌ای از راهکارها را برای مقابله با بیش‌برازش ارائه داده و همچنین به چند مورد از سوالات متداول در این زمینه پاسخ می‌دهیم.

بیش برازش یا Overfitting در یادگیری ماشین چیست؟

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

تصویری از مغز با افکت کاغذی که در آن، چرخ‌دنده‌های مختلفی وجود دارند.

حالتی ایده‌آل است که خطای پیش‌بینی مدل نزدیک به صرف باشد و برازش بهینه‌ای از داده‌ها به‌دست آید. تاثیر بیش‌برازش در یادگیری ماشین قابل توجه بوده و در حالی‌که مدل، داده‌های آموزشی را با دقت بالایی پیش‌بینی می‌کند، در نهایت عملکرد مناسبی نسبت به داده‌های جدید نخواهد داشت. در ادامه با ارائه مثالی از مدل «رگرسیون خطی» (Linear Regression) در زبان برنامه‌نویسی پایتون، درک بهتری از مفهوم Overfitting در یادگیری ماشین به‌دست می‌آوریم.

مثال بیش‌برازش

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

1import numpy as np
2def true_fun(X):
3    return np.cos(1.3 * np.pi * X)

مختصات نقاط داده در محور افقی و عمودی به‌ترتیب در دو متغیر $$ X $$ و $$ y $$ ذخیره می‌شوند:

1np.random.seed(0)
2n_samples = 20
3X = np.sort(np.random.rand(n_samples))
4y = true_fun(X) + np.random.randn(n_samples) * 0.1

در ادامه با استفاده از کتابخانه Matplotlib، نقاط داده مختلف را بر روی نمودار نمایش می‌دهیم:

1import matplotlib.pyplot as plt
2plt.plot(X, y, color = 'red', label="Actual")
3plt.scatter(X, y, edgecolor='b', s=20, label="Samples")
4plt.xlabel("x")
5plt.ylabel("y")
6plt.legend(loc="best")
7plt.show()

در تصویر زیر، نمودار توزیع داده‌ها را مشاهده می‌کنید:

نمودار توزیع داده ها
نمودار توزیع داده‌ها

قدم بعدی پیدا کردن تابع محاسباتی مانند $$ f $$ برای نگاشت داده‌های ورودی به خروجی است. نتیجه تابع $$ f(x) $$ برای نمونه $$ x $$، برابر با خروجی $$ y $$ به عنوان پیش‌بینی مدل است. سپس مدل یادگیری ماشین را با استفاده از داده‌های تولید شده آموزش می‌دهیم. همچنین در هر دور از اجرا، با تغییر درجه تابع چندجمله‌ای $$ f $$، نتیجه را به تصویر می‌کشیم:

1from sklearn.pipeline import Pipeline
2from sklearn.preprocessing import PolynomialFeatures
3from sklearn.linear_model import LinearRegression
4
5degrees = [1, 3, 12]
6fig, axes = plt.subplots(1, len(degrees), figsize=(15, 5))
7
8for i in range(len(degrees)):
9    polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False)
10    linear_regression = LinearRegression()
11    pipeline = Pipeline([("polynomial_features", polynomial_features), ("linear_regression", linear_regression)])
12    pipeline.fit(X[:, np.newaxis], y)
13
14    X_test = np.linspace(0, 1, 100)
15    y_poly_pred = pipeline.predict(X_test[:, np.newaxis])
16
17    ax = axes[i]
18    ax.plot(X_test, y_poly_pred, label="Model")
19    ax.plot(X_test, true_fun(X_test), label="True function")
20    ax.scatter(X, y, edgecolor='b', s=20, label="Samples")
21    ax.set_xlabel("x")
22    ax.set_ylabel("y")
23    ax.set_xlim((0, 1))
24    ax.set_ylim((-2, 2))
25    ax.legend(loc="best")
26    ax.set_title("Degree {}".format(degrees[i]))
27
28    ax.set_xticks([])
29    ax.set_yticks([])
30
31plt.tight_layout()
32plt.show()

خروجی سه تابع چندجمله‌ای درجه ۱، ۳ و ۱۲ مانند زیر است:

خروجی توابع چندجمله‌ای – (برای مشاهده تصویر در ابعاد بزرگتر، روی آن کلیک کنید.)

همان‌طور که در تصویر نمودارها نیز قابل مشاهده است، تابع خطی یا همان درجه ۱، نقاط داده محدودی را پوشش داده و عملکرد مناسبی در برازش نمونه‌های آموزشی از خود نشان نمی‌دهد. این یعنی مدل یادگیری ماشین مشکل کم‌برازش دارد. اما تابع درجه ۳ چنین مشکلی نداشته و متغیر هدف ($$ y $$) را با خطای کمی پیش‌بینی می‌کند. موقعیتی که مدل نه کم‌برازش و نه بیش‌برازش است و در حالت ایده‌آلی به نام Good Fit قرار دارد. با این حال در تابع چندجمله‌ای درجه ۱۲، مدل اطلاعات بی‌اهمیت مجموعه آموزشی را نیز یاد گرفته است. در این حالت مدل آن‌قدر تلاش می‌کند پیش‌بینی دقیقی از داده‌ها ارائه دهد که دیگر قادر به تعمیم آموخته خود به داده‌های جدید نیست. شرایطی که آغازگر مشکل بیش‌برازش در یادگیری ماشین است.

چگونه بیش برازش را شناسایی کنیم؟

برای شناسایی Overfitting در یادگیری ماشین، ابتدا باید مدل را با «داده‌های آزمون» (Test Data) مورد سنجش قرار دهیم. در نتیجه باید مجموعه‌داده را به دو زیر دسته مجزا تقسیم کنیم:

  • «مجموعه آموزش» (Train Set): مدل یادگیری ماشین با استفاده از این مجموعه آموزش می‌بیند.
  • «مجموعه آزمون» (Test Set): تجزیه و تحلیل عملکرد نهایی مدل نسبت به مجموعه آزمون انجام می‌شود.

شناسایی بیش‌برازش یا Overfitting در یادگیری ماشین از طریق پایش مداوم عملکرد مدل نسبت به دو مجموعه آموزش و آزمون ممکن می‌شود. اگر دقت و عملکرد مدل در برابر داده‌های مجموعه آموزشی در حال بالا رفتن باشد، اما نسبت به مجموعه آزمون پیشرفتی حاصل نشود، یعنی مدل بیش‌برازش شده است. به عنوان مثال ممکن است دقت مدل بر روی مجموعه آموزشی ۹۹ درصد باشد، اما تنها دقتی ۵۰ یا ۵۵ درصدی را نسبت به مجموعه آزمون نتیجه دهد. به‌طور معمول ۳۰ درصد از کل مجموعه‌داده به مجموعه آزمون و ۷۰ درصد دیگر به مجموعه آموزشی اختصاص داده می‌شود؛ البته این در حالی است که تعداد کل نمونه‌ها کافی باشد. علاوه‌بر دو مجموعه آموزش و آزمون، مجموعه سومی به نام «مجموعه اعتبارسنجی» (Validation Set) نیز وجود دارد که با استفاده از آن، سنجش همزمان چند مدل نسبت به نمونه داده‌ای مشابه ممکن می‌شود.

روش «اعتبارسنجی متقابل» (Cross Validation)، یکی دیگر از معیارهای آسان برای شناسایی Overfitting در یادگیری ماشین است. اعتبارسنجی متقابل، انواع مختلفی برای سنجش عملکرد مدل نسبت به داده‌های ناشناخته دارد. روش‌هایی که اصول یکسانی داشته اما هر یک برای کاربردی خاص طراحی شده‌اند. از جمله این روش‌ها می‌توان از الگوریتم K-Fold، «تقسیم تصادفی» (Shuffle Split) یا Leave-One-Out نام برد.

دلایل ایجاد بیش برازش

دلایل مختلفی برای ایجاد بیش‌برازش وجود دارد. در فهرست زیر چند نمونه از این دلایل را ملاحظه می‌کنید:

  • زمانی که پیچیدگی مدل نسبت به کمیت و کیفیت داده‌های آموزشی زیاد باشد، ممکن است به‌جای تعمیم الگوهای مهم به نمونه‌های جدید، جزییات و نویزهای مجموعه آموزشی را یاد بگیرد.
  • اگر مجموعه آموزشی به هدف مسئله مرتبط نباشد، مدل یادگیری ماشین تنها اطلاعاتی نامرتبط را از نمونه‌های آموزشی فرا می‌گیرد.
  • تعداد بالای «اَبرپارامترها» (Hyperparameters) نسبت به کمیت داده‌های آموزشی، از جلمه دلایل دیگری است که موجب بیش‌برازش در یادگیری ماشین می‌شود.
  • تعداد نا کافی از نمونه‌های آموزشی یکی دیگر از علت‌های ایجاد بیش‌برازش است.

گاهی افراد، بیش‌برازش را نادیده می‌گیرند و پیدا کردن راه‌حل مناسب را به تعویق می‌اندازند. همزمان با افزایش پیچیدگی مدل، حل مشکل Overfitting در یادگیری ماشین نیز دشوارتر می‌شود. پس بهتر است با شناسایی زودهنگام این مشکل، از ایجاد چالش‌های بیشتر در آینده جلوگیری کنیم.

تفاوت بیش برازش و کم برازش

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

  • بیش‌برازش: دقت بالا در مجموعه آموزشی و دقت پایین نسبت به نمونه‌های جدید. «جی‌پی‌اِسی» (GPS) را تصور کنید که در محدوده خانه شما بسیار خوب کار می‌کند؛ اما تقریبا در هر موقعیت مکانی دیگری بلااستفاده است.
  • کم‌برازش: دقت پایین هم در مجموعه آموزشی و هم نسبت به داده‌های جدید. مانند جی‌پی‌اسی که حتی نمی‌تواند شما را به خانه برساند.
تصویری آیکونی که در آن، دستی مشغول رسم نمودار است و پس‌زمینه این نمودار، دو رنگ مشکی تیره و آبی است.

کم‌برازش و بیش‌برازش در یادگیری ماشین، هر دو به پیش‌بینی‌هایی ضعیف از داده‌های جدید منتهی می‌شوند؛ اما به دلایل متفاوت. با وجود این‌که علت ایجاد بیش‌برازش اغلب در پیچیدگی مدل یا داده‌های بی‌کیفیت خلاصه می‌شود، مشکل کم‌برازش، نتیجه مدلی بیش از حد ساده یا تعداد ویژگی‌های ناکافی است.

جلوگیری از Overfitting در یادگیری ماشین

برای جلوگیری از بیش‌برازش در یادگیری ماشین، روش‌هایی ارئه شده است که در ادامه این مطلب از مجله فرادرسی به بررسی آن‌ها می‌پردازیم.

۱. مهندسی ویژگی

در صورتی‌که تعداد داده‌های آموزشی محدود اما تعداد ویژگی‌های هر نمونه زیاد باشد، برای جلوگیری از بیش‌برازش، تنها باید مهم‌ترین ویژگی‌ها انتخاب شوند. انتخاب ویژگی‌ها می‌تواند به‌صورت دستی انجام شود و پس از جدا کردن ویژگی‌های مد نظر، مدل‌های مجزا را با آن ویژگی‌ها آموزش داده و به بررسی قابلیت تعمیم هر یک بپردازیم. همچنین روش‌های مختلفی برای انتخاب ویژگی وجود دارد که می‌توان از آن‌ها نیز استفاده کرد. حذف داده‌های پرت، جایگزینی مقادیر ناموجود و نرمال‌سازی، تنها چند مورد از روش‌های «مهندسی ویژگی» (Feature Engineering) هستند. با بهره‌برداری از این روش‌ها، داده‌ها ساده‌سازی شده و علاوه‌بر بهبود عملکرد نهایی مدل، خطر بیش‌برازش نیز کاهش پیدا می‌کند.

۲. توقف زودهنگام

پس از آغاز روند کاهشی دقت مجموعه اعتبارسنجی، از روشی به نام «توقف زودهنگام» (Early Stopping) برای متوقف کردن فرایند آموزش استفاده می‌شود. از طریق این روش، می‌توان میزان کارایی مدل را بررسی کرد و در صورت وجود مشکل بیش‌برازش، روش‌های دیگری انتخاب کرد.

۳. انتخاب ابرپارامترها

انتخاب ابرپارامترها باید با اهداف مسئله و داده‌های ورودی هماهنگ باشد. ابرپارامترهای نامناسب، ممکن است موجب بیش‌برازش در یادگیری ماشین شوند. به عنوان مثال در مدل‌های غیر پارامتری مانند «درخت تصمیم» (Decision Tree)، احتمال رخداد بیش‌برازش بسیار بالاست. اما با محدودسازی اندازه درخت در این مورد، می‌توان از بیش‌برازش جلوگیری کرد.

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

۴. اضافه کردن داده های آموزشی

هر چه مجموعه‌داده بزرگ‌تر باشد، احتمال «سربار» (Overflow) نیز کمتر می‌شود. اگر قادر به جمع‌آوری داده‌های بیشتر نباشیم، می‌توان به شکل مصنوعی نیز تعداد نمونه‌های آموزشی را افزایش داد. به عنوان مثال با ایجاد تغییراتی همچون «برعکس کردن» (Flip)، «چرخاندن» (Rotate)، «تغییر اندازه» (Resize) و «جابه‌جایی» (Move)، می‌توان تصاویر متنوعی ایجاد و در فرایند «دسته‌بندی تصاویر» (Image Classification) از آن‌ها استفاده کرد.

۵. یادگیری جمعی

ایده «یادگیری جمعی» (Ensemble Learning)، آموزش دادن چند مدل با استفاده از الگوریتم یادگیری یکسان است. ترکیب دو عبارت یادگیری و جمعی، به ترکیب الگوهای مجزا برای ساخت الگویی موثرتر اشاره دارد. در این روش امکان دارد صدها یا حتی هزاران مدل یادگیری به حل مسئله‌ای مشترک بپردازند. یادگیری جمعی نه تنها دقت را بالاتر برده بلکه از Overfitting در یادگیری ماشین نیز جلوگیری می‌کند. دو روش Boosting و Bagging از جمله انواع رایج یادگیری جمعی هستند که در مدل‌های یادگیری ماشین زیادی همچون XGBoost، LightGBM و GradientBoosting مورد استفاده قرار می‌گیرند.

۶. روش های منظم‌سازی

به مجموعه روش‌هایی که پیچیدگی کلی مدل‌های یادگیری ماشین را کاهش می‌دهند، روش‌های «منظم‌سازی» (Regularization) گفته می‌شود. بهره‌گیری از دو روش منظم‌سازی L1 و L2 در «مدل‌های رگرسیونی» (Regression Models) کاربرد زیادی دارد. نوعی از منظم‌سازی که میان عملکرد و پیچیدگی مدل توازن ایجاد می‌کند. در نهایت همان‌طور که در معادله زیر مشاهده می‌کنید، پس از تخصیص وزن به متغیرها توسط یک «تابع هزینه» (Cost Function)، روش‌های منظم‌سازی با اعمال ضریب $$ lambda $$ از اهمیت برخی ویژگی‌های موثر در بیش‌برازش کاسته و متغیرهای مناسب را انتخاب می‌کنند:

$$ sum_{i=1}^n(y_i – sum_{j=1}^px_{ij}b_{j})^2; + ; lambda : cdot : (sum_{j=1}^pb_j)^2 $$

۷. حذف تصادفی

روش «حذف تصادفی» (Dropout) نوعی منظم‌سازی است که بر هر لایه شبکه‌های عصبی اعمال شده و تعدادی از «واحدها» (Units) یا همان نورون‌ها را نادیده می‌گیرد. پس از استفاده از حدف تصادفی، وابستگی واحدهای شبکه از نظر یادگیری نسبت به یک‌دیگر کمتر شده و خطر بیش‌برازش کاهش می‌يابد. با این حال باید توجه داشت، در صورت به‌کارگیری حذف تصادفی، مدل به مراحل بیشتری برای همگرایی نیاز دارد. همچنین می‌توانیم به‌صورت دستی از تعداد لایه‌ها یا نورون‌های موجود در هر لایه «تمام متصل» (Fully Connected) کم کنیم.

تصویری که نتیجه روش حذف تصادفی را به صورت دو نمودار با فلش‌ها مشکی‌رنگ و گوی‌های قرمز و سبز نشان می‌دهد.
نتیجه روش حذف تصادفی – به ترتیب از راست به چپ: پس از اعمال حذف تصادفی و شبکه عصبی استاندارد

سوالات متداول

پس از آشنایی با مفهوم بیش‌برازش و روش‌های جلوگیری از آن، حال زمان خوبی است تا در این بخش، به چند نمونه از پرسش‌های متداول و مرتبط پاسخ دهیم.

چرا باید از بیش‌برازش جلوگیری شود؟

بیش‌برازش باعث محدود شدن توانایی مدل در شناخت داده‌های جدید می‌شود. موضوعی که هدف اصلی هر نوع مسئله یادگیری ماشین است.

چگونه باید از Overfitting در یادگیری ماشین جلوگیری کنیم؟

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

آیا شرایطی وجود دارد که در آن بیش‌برازش مفید باشد؟

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

جمع‌بندی

حتی شرکت‌های بزرگ نیز اغلب در دام بیش‌برازش گرفتار شده و بالا بودن دقت مدل یادگیری ماشین در مجموعه‌داده آموزشی را برابر با عملکرد نهایی فرض می‌کنند. اما تنها زمانی متوجه مشکل می‌شوند که سیستم معرفی و دیگر دیر شده است. مسیر یادگیری ماشبن اغلب با مدلی کم‌برازش شده آغاز و با تکرار فرایند آموزش، موجب بهبود عملکرد می‌شود. همان‌طور که در این مطلب از مجله فرادرس آموختیم، همزمان با افزایش پیچیدگی، احتمال رخداد بیش‌برازش در یادگیری ماشین نیز افزایش یافته و باید با به‌کارگیری روش‌های ارائه شده از آن جلوگیری کنیم.

source

توسط expressjs.ir