کافه‌تدریس

بیش برازش (Overfitting) چیست و برای جلوگیری آن چه باید کرد؟

بیش برازش (Overfitting)

بیش برازش (Overfitting)

بیش برازش (Overfitting) یکی از خطاهای مدل‌سازی در علم داده (Data Science)‌ است. این خطا هنگامی اتفاق می‌افتد که مدل ویژگی‌های داده‌های آموزشی را به‌جای یادگیری، حفظ کرده باشد، یعنی بیش‌ازحد روی آن آموزش دیده باشد؛ درنتیجه، این مدل فقط در مجموعه‌ی داده‌های آموزشی مفید خواهد بود و نه در مجموعه‌ی داده‌های دیگر که هنوز آن‌ها را ندیده است.
در ادامه‌ی این مطلب به‌صورت مفصل به این مفهوم پرداخته‌ایم، دلایل رخ‌دادن آن را توضیح داده‌ایم و راه‌حل‌های جلوگیری از آن را بررسی کرده‌ایم.

منظور از شکست تعمیم در ماشین‌لرنینگ چیست؟

شکست تعمیم یا Generalization Failure در یادگیری ماشین به وضعیتی اشاره دارد که مدلی که روی داده‌های آموزشی به خوبی عمل می‌کند، اما در آزمایش یا داده‌های اعتبار سنجی (Validation) عملکرد خوبی ندارد. به عبارت دیگر، مدل یاد نگرفته است که به خوبی از داده‌های آموزشی به داده‌های جدید و دیده نشده تعمیم پیدا کند.

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

با این حال، اگر یک مدل بیش‌ازحد پیچیده شود یا با داده‌های آموزشی بیش‌ازحد تطبیق پیدا کند، ممکن است به جای یادگیری الگوهای زیربنایی، شروع به حفظ نمونه‌های آموزشی کند. این موضوع می‌تواند باعث شود که مدل در داده‌های آموزشی عملکرد خوبی داشته باشد، اما در داده‌های جدید و دیده نشده ضعیف عمل کند و منجر به مشکل شکست تعمیم شود. برای جلوگیری از شکست تعمیم، استفاده از تکنیک‌هایی مانند منظم‌سازی (Regularization)، اعتبار سنجی متقابل (Cross validation) و توقف زودهنگام  (Early stopping) در طول فرآیند آموزش ضروری است تا به مدل کمک کند تا تعمیم خوبی از داده‌های آموزشی به داده‌های جدید را یاد بگیرد.

بیش برازش (Overfitting) چیست؟‌

قبل از اینکه به بحث اصلی، یعنی تعریف بیش برازش (Overfitting)‌، وارد شویم، بیایید ابتدا کمی درمورد یادگیری ماشین (Machine Learning) صحبت کنیم. در یادگیری ماشین ما یک مدل ریاضی تعریف می‌کنیم که دسته‌ای از داده‌هایی را که در اختیارش می‌گذاریم بررسی می‌کند؛ برای مثال، داده‌های ما می‌تواند صدها عکس گل باشد که درنهایت راهی برای پیش‌بینی آن‌ها ارائه می‌شود؛ حال هر زمان تصویری از یک گل را به این مدل نشان دهیم، حدس می‌زند این گل در کدام دسته قرار دارد.

اما اگر یک تصویر کاملاً جدید از گل ببیند که قبلاً ندیده است چطور؟ آیا آن را هم پیش‌بینی می‌کند؟

در جواب باید بگوییم بله؛ مدل یادگیری ماشینِ خوب، می‌تواند داده‌های جدید را نیز پیش‌بینی کند. به این موضوع تعمیم (Generalization) گفته می‌شود. هدف کلی این است که مدل یک گروه از تصاویر را ببیند و آن را به‌خوبی تعمیم دهد تا بتواند تصاویر جدید را پیش‌بینی کند.

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

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

بیش برازش (Overfitting) یا آموزش بیش‌ازحد

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

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

برای مطالعه درباره‌ی یادگیری ماشین به این لینک‌ها سر بزنید:

یادگیری ماشین (Machine Learning) چیست و چگونه کار می‌کند؟

دلایل ایجاد بیش‌برازش (Overfitting)

بیش‌برازش (Overfitting) می‌تواند به یکی از این دلایل اتفاق بیفتد:

راه‌حل‌های مقابله با بیش‌برازش

بیش برازش (Overfitting)‌ مسئله‌ای بسیار رایج در یادگیری ماشین است. روش‌های مختلفی هم برای جلوگیری از آن وجود دارد. در این بخش به این روش‌ها اشاره خواهیم کرد.

۱. نگه‌داشتن داده‌ها (Holding Out Data)

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

۲. اعتبارسنجی متقابل داده‌ها (Cross Validation)

می‌توانیم مجموعه‌داده‌مان را به k گروه تقسیم کنیم (K-fold Cross Validation). در این روش اجازه می‌دهیم یکی از گروه‌ها مجموعه‌ی تست و گروه دیگر به‌عنوان مجموعه‌ی آموزش باشد. این روند را تا زمانی که هر گروه جداگانه یک بار به‌عنوان مجموعه‌ی تست استفاده شود تکرار می‌کنیم (برای مثال، k بار تکرار می‌کنیم). برخلاف روش نگه‌داشتن داده، اعتبارسنجی متقابل اجازه می‌دهد تا تمامی داده‌ها یک بار برای آموزش استفاده شوند، اما از طرفی از نظر محاسباتی گران‌تر هستند.

۳. افزایش داده‌ها (Data Augmentation)

یک مجموعه داده بزرگتر از بیش‌برازش جلوگیری می‌کند. اگر نتوانیم داده‌های بیشتری جمع کنیم و به داده‌هایی که در مجموعه‌ی داده فعلی خود داریم محدود باشیم، می‌توانیم برای افزایش اندازه‌ی مجموعه‌داده‌مان از روش افزایش داده استفاده کنیم؛ برای مثال، اگر کارمان طبقه‌بندی تصاویر است، می‌توانیم تغییرات مختلف تصویر را در مجموعه‌داده‌های تصویر خود اعمال کنیم؛ برای مثال، معکوس‌کردن (Flipping)، چرخش (Rotating)، تغییر اندازه (Rescaling) و شیفت‌دادن (Shifting).

۴. انتخاب ویژگی (Feature Selection)

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

۵. نظم‌دهی (Regularization) L1 / L2

نظم‌دهی تکنیکی است که شبکه‌ی ما را در یادگیری مدلی که بیش‌ازحد پیچیده است و ممکن است به بیش‌برازش بینجامد، محدود می‌کند. در نظم‌دهی L1 یا L2 می‌توانیم برای تابع زیان (Loss Function)‌ یک مجازات در نظر بگیریم تا ضرایب برآورد‌شده (Coefficients)‌ را به‌سمت صفر سوق دهیم. نظم‌دهی L2 اجازه می‌دهد وزن‌ها به‌سمت صفر پیش بروند، اما به صفر نرسند، درحالی‌که تنظیم L1 اجازه می‌دهد وزن‌ها به صفر برسند.

۶. حذف لایه‌ها در مدل

همان‌طور که در تنظیم L1 یا L2 ذکر شد، یک مدل بیش‌ازحد پیچیده به‌احتمال زیاد به بیش برازش (Overfitting) خواهد انجامید. بنابراین، ما می‌توانیم با حذف لایه‌ها به‌طور مستقیم از پیچیدگی مدل بکاهیم و اندازه مدل خود را کاهش دهیم.

۷. دراپ‌اوت (Drop Out)

با استفاده از این تکنیک که نوعی نظم‌دهی محسوب می‌شود، در برخی از لایه‌ها برخی نودها را در نظر نمی‌گیریم. با استفاده از دراپ‌اوت می‌توانیم یادگیری متقابل میان نودها را که ممکن است به بیش برازش بینجامد کاهش دهیم؛ با وجود این، برای اجرای این تکنیک به ایپاک‌های (Epoch)‌ بیشتری برای هم‌گراشدن مدل خود نیاز داریم.

۸. توقف زودهنگام (Early Stopping)

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

جمع‌بندی مطالب درباره‌ی بیش‌برازش (Overfitting)

در این مطلب مشکل بیش برازش (Overfitting) را معرفی کردیم و با دلایل ایجاد و همین‌طور نحوه‌ی مقابله با آن آشنا شدیم. بیش‌برازش یکی از مشکلات معمول در حوزه‌ی یادگیری ماشین است که خیلی از مواقع ممکن است در حین آموزش مدل خود با آن مواجه شویم؛ به‌همین دلیل، یادگیری تکنیک‌های جلوگیری از آن بسیار ضرورت دارد.

یکی از دیگر مشکلات مشابه بیش برازش (Overfitting) مشکل کم برازش (Underfitting) است. برای مطالعه درباره‌ی این موضوع این مطلب را مطالعه کنید:

کم‌ برازش (Underfitting) چیست و راه‌های جلوگیری از آن کدام است؟

خروج از نسخه موبایل