Overfitting در شبکههای عمیق (Deep Neural Networks)
مقدمه
در یادگیری عمیق، هدف اصلی یک شبکه عصبی این نیست که فقط دادههای آموزشی را بهخوبی پیشبینی کند؛ بلکه باید بتواند روی دادههای جدید و دیدهنشده نیز عملکرد خوبی داشته باشد. این توانایی را تعمیمپذیری (Generalization) مینامیم.
Overfitting (بیشبرازش) زمانی رخ میدهد که مدل به جای یادگیری الگوهای واقعی و عمومی، بیش از حد به دادههای آموزشی وابسته شود و حتی نویزها و جزئیات غیرضروری داده را یاد بگیرد.
به زبان ساده:
مدل به جای «یاد گرفتن»، دادههای آموزش را «حفظ میکند».
مثال ساده
فرض کنید یک شبکه عصبی برای تشخیص گربه و سگ آموزش میدهیم.
مدل پس از آموزش:
دقت روی دادههای آموزش: 99٪
دقت روی دادههای تست: 70٪
این یعنی مدل روی تصاویری که قبلاً دیده عالی است، اما روی تصاویر جدید عملکرد ضعیفی دارد.
احتمالاً مدل به جای یادگیری ویژگیهایی مانند:
شکل گوش
فرم بدن
ویژگیهای چهره
مواردی مانند:
رنگ پسزمینه
نور تصویر
زاویه دوربین
را یاد گرفته است.
چرا Overfitting در شبکههای عمیق بیشتر دیده میشود؟
شبکههای عمیق قدرت یادگیری بسیار بالایی دارند. آنها معمولاً دارای:
تعداد زیادی لایه (Layers)
میلیونها پارامتر (Parameters)
قابلیت یادگیری الگوهای بسیار پیچیده
هستند.
برای مثال یک شبکه CNN ممکن است میلیونها وزن قابل تنظیم داشته باشد. اگر حجم داده کافی نباشد، مدل میتواند حتی جزئیات تصادفی داده را نیز یاد بگیرد.
نشانههای Overfitting
مهمترین علامت:
اختلاف زیاد بین Training و Validation
مثال:
| داده | دقت |
|---|---|
| Training | 98٪ |
| Validation | 72٪ |
| Test | 70٪ |
مدل روی داده آموزش عالی است، اما روی داده جدید ضعیف عمل میکند.
نمودار Loss در Overfitting
در آموزش معمول:
Training Loss ↓
Validation Loss ↓
هر دو کاهش پیدا میکنند.
اما در Overfitting:
Training Loss ↓↓↓↓↓
Validation Loss ↓ سپس ↑
یعنی مدل پس از مدتی شروع به یادگیری نویز داده آموزش میکند.
دلایل اصلی Overfitting
۱. کمبود داده (Insufficient Data)
اگر داده آموزشی کم باشد، مدل اطلاعات کافی برای یادگیری الگوهای عمومی ندارد.
مثال:
ساخت مدل تشخیص چهره با فقط ۵۰۰ تصویر.
راهحل:
جمعآوری داده بیشتر
استفاده از داده مصنوعی
Data Augmentation
۲. پیچیدگی بیش از حد مدل
اگر مدل خیلی بزرگتر از نیاز مسئله باشد، احتمال Overfitting افزایش مییابد.
مثال:
مدلی با:
100 میلیون پارامتر
برای دیتاستی با:
1000 نمونه
احتمالاً بیشبرازش خواهد داشت.
۳. آموزش بیش از حد (Too Many Epochs)
در مراحل اولیه آموزش:
مدل الگوهای مهم را یاد میگیرد.
اما پس از مدت طولانی:
نویزها را نیز حفظ میکند.
مثال:
Epoch 10:
Training Accuracy = 90%
Epoch 200:
Training Accuracy = 99%
Validation Accuracy = 65%
۴. دادههای نویزی
وجود مواردی مانند:
برچسب اشتباه
داده ناقص
اطلاعات غیرمرتبط
میتواند باعث شود مدل الگوهای اشتباه یاد بگیرد.
روشهای جلوگیری از Overfitting
۱. افزایش داده (Data Augmentation)
یکی از روشهای مهم در شبکههای عمیق است.
در تصاویر میتوان:
چرخش تصویر
تغییر اندازه
تغییر روشنایی
Flip کردن
Crop کردن
را انجام داد.
مثلاً:
یک تصویر:
cat.jpg
تبدیل میشود به:
cat_rotate.jpg
cat_flip.jpg
cat_crop.jpg
۲. Dropout
Dropout یکی از محبوبترین روشها برای کاهش Overfitting است.
در زمان آموزش، تعدادی از نورونها به صورت تصادفی خاموش میشوند.
مثال:
قبل:
● ● ● ● ● ●
بعد:
● ✕ ● ✕ ● ●
نتیجه:
شبکه مجبور میشود ویژگیها را به شکل عمومیتر یاد بگیرد.
نمونه در Keras:
from tensorflow.keras.layers import Dropout
model.add(Dropout(0.5))
۳. Regularization
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 20 → بهتر
Epoch 40 → ثابت
Epoch 50 → بدتر
آموزش در Epoch 40 متوقف میشود.
۵. کاهش پیچیدگی مدل
راهکارها:
کاهش تعداد لایهها
کاهش تعداد نورونها
حذف ویژگیهای غیرضروری
مثلاً:
مدل بزرگ:
Input
↓
Dense(1024)
↓
Dense(512)
↓
Dense(256)
مدل سادهتر:
Input
↓
Dense(128)
↓
Dense(64)
۶. Batch Normalization
Batch Normalization باعث پایدارتر شدن فرآیند آموزش میشود و در بسیاری از معماریها به بهبود تعمیم کمک میکند.
۷. Transfer Learning
به جای آموزش مدل از ابتدا، از مدلهایی استفاده میکنیم که قبلاً روی دادههای بزرگ آموزش دیدهاند.
مثال:
مدلهای تشخیص تصویر
مدلهای زبانی
مزایا:
نیاز کمتر به داده
کاهش احتمال Overfitting
آموزش سریعتر
تفاوت Overfitting و Underfitting
| ویژگی | Overfitting | Underfitting |
|---|---|---|
| مدل | بیش از حد پیچیده | بیش از حد ساده |
| Training Accuracy | بالا | پایین |
| Test Accuracy | پایین | پایین |
| مشکل اصلی | حفظ کردن داده | یادگیری ناکافی |
رابطه Bias و Variance
در یادگیری ماشین:
Bias بالا
مدل بیش از حد ساده است:
Underfitting
Variance بالا
مدل بیش از حد به داده آموزش وابسته است:
Overfitting
هدف، ایجاد تعادل بین این دو است.
مثال در شبکه CNN
فرض کنید یک CNN برای تشخیص بیماری از تصاویر پزشکی ساختهایم:
نتیجه:
Training Accuracy = 99%
Validation Accuracy = 68%
تحلیل:
مدل احتمالاً تصاویر آموزشی را حفظ کرده است.
راهحل:
افزایش داده پزشکی
Dropout
Regularization
Early Stopping
استفاده از Transfer Learning
جمعبندی
Overfitting یکی از مهمترین مشکلات در شبکههای عصبی عمیق است که باعث میشود مدل روی دادههای آموزشی عالی اما روی دادههای جدید ضعیف عمل کند.
دلایل اصلی:
داده کم
مدل بسیار پیچیده
آموزش طولانی
نویز در داده
راههای مقابله:
✅ Data Augmentation
✅ Dropout
✅ L1/L2 Regularization
✅ Early Stopping
✅ کاهش پیچیدگی مدل
✅ Transfer Learning
در طراحی شبکههای عمیق، هدف اصلی فقط رسیدن به دقت بالا روی داده آموزش نیست؛ بلکه ساخت مدلی است که بتواند الگوهای واقعی را یاد بگیرد و روی دادههای جدید تعمیم خوبی داشته باشد.