Overfitting در شبکههای عمیق چیست؟
مقدمه
یکی از مهمترین چالشها در یادگیری ماشین و بهخصوص شبکههای عصبی عمیق (Deep Neural Networks)، پدیدهای به نام Overfitting (بیشبرازش) است.
Overfitting زمانی اتفاق میافتد که مدل به جای یادگیری الگوهای عمومی و قابل تعمیم از دادهها، جزئیات خاص، نویزها و اشتباهات موجود در دادههای آموزشی را نیز یاد میگیرد.
به زبان ساده:
مدل در حفظ کردن دادههای آموزشی بسیار خوب میشود، اما در مواجهه با دادههای جدید عملکرد ضعیفی دارد.
مثال ساده از Overfitting
فرض کنید میخواهیم مدلی بسازیم که تصاویر گربه و سگ را تشخیص دهد.
مدل پس از آموزش:
روی تصاویر آموزشی دقت 99٪ دارد.
اما روی تصاویر جدید فقط 70٪ دقت دارد.
یعنی مدل به جای یادگیری ویژگیهای واقعی گربه و سگ، ممکن است مواردی مانند:
پسزمینه تصویر
نور خاص
زاویه دوربین
نویز تصویر
را یاد گرفته باشد.
تفاوت یادگیری واقعی و Overfitting
یادگیری مناسب (Generalization)
مدل:
الگوهای اصلی را یاد میگیرد.
روی دادههای جدید خوب عمل میکند.
مثال:
تشخیص گربه بر اساس:
گوشها
چشمها
شکل بدن
Overfitting
مدل:
دادههای آموزش را حفظ میکند.
روی داده جدید شکست میخورد.
مثال:
تشخیص گربه فقط چون:
پسزمینه آبی است.
عکس از زاویه خاص گرفته شده است.
چرا Overfitting در شبکههای عمیق زیاد اتفاق میافتد؟
شبکههای عمیق معمولاً دارای:
میلیونها پارامتر
لایههای متعدد
قدرت یادگیری بسیار بالا
هستند.
اگر داده کافی وجود نداشته باشد، مدل میتواند حتی نویزهای کوچک را هم یاد بگیرد.
مثال:
یک شبکه عصبی با:
100 میلیون پارامتر
برای دادهای با:
1000 نمونه آموزشی
احتمالاً دچار بیشبرازش میشود.
علائم Overfitting در شبکه عصبی
یکی از رایجترین نشانهها:
تفاوت زیاد بین Training و Validation
مثال:
| مرحله | دقت |
|---|---|
| آموزش (Training Accuracy) | 99٪ |
| اعتبارسنجی (Validation Accuracy) | 75٪ |
یعنی مدل روی دادهای که دیده عالی است، اما روی داده جدید ضعیف عمل میکند.
نمودار Loss در Overfitting
در حالت معمول:
Training Loss ↓
Validation Loss ↓
هر دو کاهش پیدا میکنند.
اما در Overfitting:
Training Loss ↓↓↓
Validation Loss ↓ سپس ↑
یعنی مدل بیش از حد با داده آموزش سازگار شده است.
دلایل اصلی Overfitting
۱. داده آموزشی کم
یکی از مهمترین دلایل.
مثال:
ساخت مدل تشخیص چهره با فقط چند صد تصویر.
راهحل:
جمعآوری داده بیشتر
استفاده از داده مصنوعی
۲. مدل بیش از حد پیچیده
مثلاً:
مدل:
لایههای زیاد
نورونهای زیاد
پارامترهای بسیار زیاد
دارد.
قدرت مدل از مقدار اطلاعات داده بیشتر میشود.
۳. آموزش بیش از حد (Too Many Epochs)
اگر شبکه را بیش از حد آموزش دهیم:
ابتدا:
الگوهای مفید را یاد میگیرد.
بعد:
نویز داده را حفظ میکند.
مثال:
Epoch 10:
Training Accuracy = 90%
Epoch 200:
Training Accuracy = 99%
Validation Accuracy = 70%
۴. دادههای دارای نویز
اگر دادهها شامل:
خطا
برچسب اشتباه
اطلاعات غیرمرتبط
باشند، مدل ممکن است آنها را یاد بگیرد.
روشهای جلوگیری از Overfitting
۱. افزایش داده (Data Augmentation)
یکی از روشهای مهم در یادگیری عمیق است.
ایجاد نمونههای جدید با تغییرات کوچک:
برای تصاویر:
چرخش
تغییر نور
برش تصویر
تغییر اندازه
مثال:
یک تصویر:
cat.jpg
تبدیل میشود به:
cat_rotate.jpg
cat_crop.jpg
cat_flip.jpg
۲. Dropout
یکی از معروفترین روشهای مقابله با Overfitting است.
ایده:
در زمان آموزش، به صورت تصادفی بعضی نورونها خاموش میشوند.
مثلاً:
Layer:
● ● ● ● ● ●
بعد از Dropout:
● ✕ ● ✕ ● ●
نتیجه:
شبکه مجبور میشود ویژگیها را به شکل عمومیتر یاد بگیرد.
مثال در Keras:
from tensorflow.keras.layers import Dropout
model.add(Dropout(0.5))
یعنی 50٪ نورونها به صورت تصادفی حذف میشوند.
۳. Regularization
Regularization باعث میشود مدل وزنهای بسیار بزرگ ایجاد نکند.
دو روش معروف:
L1 Regularization
باعث کوچک شدن بعضی وزنها تا نزدیک صفر میشود.
L2 Regularization
وزنهای بزرگ را جریمه میکند.
فرمول:
[
Loss = Error + \lambda \sum w^2
]
مثال:
from tensorflow.keras.regularizers import l2
Dense(
64,
kernel_regularizer=l2(0.01)
)
۴. Early Stopping
به جای آموزش تا انتها، زمانی که عملکرد روی Validation بهتر نشد، آموزش متوقف میشود.
مثال:
Epoch 1 → بهتر
Epoch 10 → بهتر
Epoch 20 → بهتر
Epoch 30 → بدتر
در Epoch 20 متوقف میشویم.
کد:
from tensorflow.keras.callbacks import EarlyStopping
callback = EarlyStopping(
patience=5
)
۵. کاهش پیچیدگی مدل
راههای ساده:
کاهش تعداد لایهها
کاهش تعداد نورونها
کاهش تعداد پارامترها
مثلاً:
قبل:
Input
↓
Dense(1024)
↓
Dense(512)
↓
Dense(256)
بعد:
Input
↓
Dense(128)
↓
Dense(64)
۶. استفاده از Batch Normalization
Batch Normalization باعث پایدارتر شدن آموزش میشود و در برخی موارد به کاهش Overfitting کمک میکند.
۷. استفاده از Transfer Learning
به جای آموزش مدل از صفر، از یک مدل آموزشدیده استفاده میکنیم.
مثال:
استفاده از مدلهای آماده:
ResNet
EfficientNet
BERT
مزیت:
نیاز کمتر به داده
تعمیم بهتر
تفاوت Overfitting و Underfitting
| ویژگی | Overfitting | Underfitting |
|---|---|---|
| عملکرد آموزش | عالی | ضعیف |
| عملکرد تست | ضعیف | ضعیف |
| پیچیدگی مدل | زیاد | کم |
| علت | یادگیری بیش از حد | یادگیری ناکافی |
| راهحل | کاهش پیچیدگی | افزایش پیچیدگی |
رابطه Bias و Variance با Overfitting
در یادگیری ماشین:
Bias زیاد
مدل بیش از حد ساده است.
نتیجه:
Underfitting
Variance زیاد
مدل بیش از حد به داده آموزش وابسته است.
نتیجه:
Overfitting
هدف:
ایجاد تعادل بین Bias و Variance.
مثال واقعی در شبکه CNN
فرض کنید یک CNN برای تشخیص بیماری از تصاویر پزشکی ساختهایم.
نتیجه:
Training:
Accuracy = 98%
Validation:
Accuracy = 65%
تحلیل:
مدل احتمالاً:
تصاویر آموزشی را حفظ کرده.
ویژگیهای عمومی بیماری را یاد نگرفته.
راهحل:
Data Augmentation
Dropout
L2 Regularization
Early Stopping
داده بیشتر
خلاصه نهایی
Overfitting یعنی مدل یادگیری عمیق به جای یادگیری الگوهای عمومی، دادههای آموزشی را بیش از حد حفظ کند.
نشانه اصلی:
عملکرد عالی روی Training و عملکرد ضعیف روی Validation/Test
مهمترین روشهای جلوگیری:
✅ افزایش داده (Data Augmentation)
✅ Dropout
✅ Regularization (L1/L2)
✅ Early Stopping
✅ کاهش پیچیدگی مدل
✅ استفاده از Transfer Learning
در پروژههای واقعی یادگیری عمیق، کنترل Overfitting یکی از مهمترین مراحل برای ساخت مدلهایی است که بتوانند روی دادههای جدید عملکرد قابل اعتماد داشته باشند.