MinAI - Về trang chủ
Lý thuyết
5/2160 phút
Đang tải...

Regularization và Chống Overfitting

Học các kỹ thuật chống overfitting: Dropout, L1/L2 Regularization, Batch Normalization, Early Stopping và Data Augmentation

0

🎯 Mục tiêu bài học

TB5 min

Sau bài này, bạn sẽ:

✅ Hiểu Overfitting là gì và cách phát hiện

✅ Biết 5 kỹ thuật chống overfitting

✅ Áp dụng Dropout, Early Stopping vào code

✅ Chọn kỹ thuật phù hợp cho từng bài toán

Ôn lại bài trước

Bài 4 đã học cách train model. Nhưng train xong chưa chắc đã tốt!

Hôm nay học cách làm model tốt hơn trên data mới.

1

⚠️ Overfitting là gì?

TB5 min

Định nghĩa

Overfitting: Mô hình "nhớ" training data thay vì "học" patterns → hoạt động tốt trên training nhưng kém trên data mới.

Phân biệt các trường hợp

Trường hợpTraining LossVal LossChẩn đoán
Good fitThấpThấp✅ Mô hình tốt
UnderfittingCaoCaoModel quá đơn giản
OverfittingThấpCaoModel quá phức tạp

Đồ thị minh họa

Training vs Validation Loss

Gap lớn giữa 2 đường = Overfitting!

Training vs Validation LossLoss ↑Epochs →Bắt đầu xoay chiều!GAP LỚN= OVERFITTINGTraining LossValidation Loss

Ví dụ thực tế

Ví dụ Overfitting trong đời thực

Học thuộc lòng ≠ hiểu bài!

Ví dụ Overfitting trong đời thực❌ Học sinh A (Overfitting)📚 Thuộc lòng 100 bài trong sách📝 Làm bài cũ: 100 điểm 🌟📋 Gặp đề mới: 30 điểm 💥✅ Học sinh B (Good fit)📚 Hiểu cách giải, nắm vững📝 Làm bài cũ: 90 điểm📋 Gặp đề mới: 85 điểm 😎⚠️ Học sinh A = MODEL bị Overfitting!

Checkpoint

Bạn đã hiểu Overfitting là gì?

2

🎲 Dropout

TB5 min

Dropout là gì?

Dropout: Tắt ngẫu nhiên một số neurons trong quá trình training, buộc model không phụ thuộc vào một vài neurons cụ thể.

Cách hoạt động

Dropout: Training vs Inference

30% neurons bị tắt ngẫu nhiên khi training

Dropout: Training vs InferenceTraining (Dropout = 0.3)(30% tắt ✘)Inference (No Dropout)(Tất cả ○ hoạt động)

Tại sao Dropout hiệu quả?

  1. Ngăn co-adaptation: Neurons không phụ thuộc lẫn nhau
  2. Ensemble effect: Như training nhiều models nhỏ
  3. Feature redundancy: Học nhiều cách biểu diễn

Sử dụng trong Keras

python.py
1from tensorflow.keras import layers
2
3model = keras.Sequential([
4 layers.Dense(64, activation='relu', input_shape=(10,)),
5 layers.Dropout(0.3), # Tắt 30% neurons
6
7 layers.Dense(32, activation='relu'),
8 layers.Dropout(0.2), # Tắt 20% neurons
9
10 layers.Dense(1, activation='sigmoid')
11])

Best Practices cho Dropout

Vị tríDropout rate
Sau Input layer0.1 - 0.2
Hidden layers0.2 - 0.5
Trước OutputThường không dùng

Tip: Bắt đầu với Dropout(0.2), tăng nếu còn overfitting

Checkpoint

Bạn đã hiểu cách sử dụng Dropout?

3

📏 L1 và L2 Regularization

TB5 min

Ý tưởng

Thêm một "penalty" vào loss function để giữ weights nhỏ:

Ltotal=Loriginal+λR(W)L_{total} = L_{original} + \lambda \cdot R(W)

L1 Regularization (Lasso)

R(W)=iwiR(W) = \sum_i |w_i|

Đặc điểm:

  • Tạo sparse weights (nhiều weights = 0)
  • Dùng cho feature selection

L2 Regularization (Ridge)

R(W)=iwi2R(W) = \sum_i w_i^2

Đặc điểm:

  • Giữ weights nhỏ nhưng không bằng 0
  • Phổ biến hơn trong Deep Learning

So sánh L1 vs L2

Đặc điểmL1L2
Công thứcw\sum\|w\|w2\sum w^2
WeightsNhiều = 0 (sparse)Nhỏ nhưng ≠ 0
Feature selection✅ Tốt❌ Không
Deep LearningÍt dùng⭐ Phổ biến

Sử dụng trong Keras

python.py
1from tensorflow.keras import regularizers
2
3# L2 Regularization
4model = keras.Sequential([
5 layers.Dense(64, activation='relu',
6 kernel_regularizer=regularizers.l2(0.01)), # λ = 0.01
7 layers.Dense(32, activation='relu',
8 kernel_regularizer=regularizers.l2(0.01)),
9 layers.Dense(1, activation='sigmoid')
10])
11
12# L1 Regularization
13layers.Dense(64, kernel_regularizer=regularizers.l1(0.01))
14
15# L1 + L2 (Elastic Net)
16layers.Dense(64, kernel_regularizer=regularizers.l1_l2(l1=0.01, l2=0.01))

Chọn λ (lambda)

λẢnh hưởng
Quá nhỏ (0.0001)Gần như không có regularization
Vừa (0.001 - 0.01)⭐ Thường dùng
Quá lớn (0.1+)Underfitting

Checkpoint

Bạn đã hiểu L1 và L2 Regularization?

4

📊 Batch Normalization

TB5 min

Batch Normalization là gì?

Batch Normalization: Chuẩn hóa input của mỗi layer để có mean ≈ 0 và std ≈ 1, giúp training nhanh và ổn định hơn.

Công thức

x^=xμBσB2+ϵ\hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}

y=γx^+βy = \gamma \hat{x} + \beta

Trong đó:

  • μB,σB\mu_B, \sigma_B: Mean và std của batch
  • γ,β\gamma, \beta: Learnable parameters
  • ϵ\epsilon: Hằng số nhỏ tránh chia cho 0

Tại sao BatchNorm hiệu quả?

  1. Giảm Internal Covariate Shift: Distribution input ổn định
  2. Cho phép learning rate cao hơn: Training nhanh hơn
  3. Regularization effect nhẹ: Giảm overfitting

Sử dụng trong Keras

python.py
1from tensorflow.keras import layers
2
3model = keras.Sequential([
4 layers.Dense(64, activation='relu', input_shape=(10,)),
5 layers.BatchNormalization(), # Sau Dense, trước activation
6
7 layers.Dense(32, activation='relu'),
8 layers.BatchNormalization(),
9
10 layers.Dense(1, activation='sigmoid')
11])

Vị trí đặt BatchNorm

Vị trí đặt BatchNorm

Option 1 phổ biến hơn trong thực tế

Vị trí đặt BatchNormOption 1 (phổ biến ✅)DenseBatchNormActivationOption 2DenseActivationBatchNorm

Tip: Thường đặt BatchNorm sau Dense, trước Activation

Checkpoint

Bạn đã hiểu Batch Normalization?

5

⏹️ Early Stopping

TB5 min

Early Stopping là gì?

Early Stopping: Dừng training khi validation loss bắt đầu tăng (dấu hiệu overfitting), thay vì đợi hết epochs.

Minh họa

Early Stopping

Dừng training khi validation loss bắt đầu tăng

Early StoppingLoss ↑Epochs →(tiếp tục giảm)Best checkpoint ★(bắt đầu tăng!)STOP HERE!Training LossValidation Loss

Sử dụng trong Keras

python.py
1from tensorflow.keras.callbacks import EarlyStopping
2
3early_stop = EarlyStopping(
4 monitor='val_loss', # Theo dõi metric nào
5 patience=10, # Số epochs chờ
6 min_delta=0.001, # Thay đổi tối thiểu
7 restore_best_weights=True, # ⭐ Quan trọng!
8 verbose=1
9)
10
11history = model.fit(
12 X_train, y_train,
13 epochs=1000, # Đặt cao, để early stopping quyết định
14 callbacks=[early_stop]
15)

Tham số quan trọng

Tham sốÝ nghĩaGiá trị thường dùng
monitorMetric theo dõi'val_loss', 'val_accuracy'
patienceSố epochs chờ5, 10, 15, 20
restore_best_weightsLấy weights tốt nhấtTrue
modeHướng tốt: min/max'auto'

Checkpoint

Bạn đã hiểu Early Stopping?

6

🖼️ Data Augmentation

TB5 min

Data Augmentation là gì?

Data Augmentation: Tạo thêm dữ liệu training từ dữ liệu gốc bằng các phép biến đổi (xoay, lật, zoom...), giúp model generalize tốt hơn.

Các kỹ thuật cho Image Data

Kỹ thuậtMô tảKeras
Horizontal FlipLật ngangRandomFlip('horizontal')
RotationXoay ảnhRandomRotation(0.2)
ZoomPhóng to/thu nhỏRandomZoom(0.2)
BrightnessThay đổi độ sángRandomBrightness(0.2)
ContrastThay đổi độ tương phảnRandomContrast(0.2)

Sử dụng trong Keras

python.py
1from tensorflow.keras import layers
2
3# Tạo augmentation layer
4data_augmentation = keras.Sequential([
5 layers.RandomFlip("horizontal"),
6 layers.RandomRotation(0.1),
7 layers.RandomZoom(0.1),
8])
9
10# Thêm vào model
11model = keras.Sequential([
12 data_augmentation,
13 layers.Conv2D(32, 3, activation='relu'),
14 # ...
15])

Augmentation cho Text

Kỹ thuậtMô tả
Synonym ReplacementThay từ bằng từ đồng nghĩa
Random InsertionChèn từ ngẫu nhiên
Random SwapHoán đổi vị trí từ
Back TranslationDịch sang ngôn ngữ khác rồi dịch lại

Checkpoint

Bạn đã hiểu Data Augmentation?

7

🔧 Kết hợp các kỹ thuật

TB5 min

Ví dụ Model với đầy đủ Regularization

python.py
1from tensorflow import keras
2from tensorflow.keras import layers, regularizers
3from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau
4
5# Xây dựng model với các kỹ thuật regularization
6model = keras.Sequential([
7 # Input layer
8 layers.Dense(128, input_shape=(20,)),
9 layers.BatchNormalization(),
10 layers.Activation('relu'),
11 layers.Dropout(0.3),
12
13 # Hidden layer 1
14 layers.Dense(64, kernel_regularizer=regularizers.l2(0.01)),
15 layers.BatchNormalization(),
16 layers.Activation('relu'),
17 layers.Dropout(0.3),
18
19 # Hidden layer 2
20 layers.Dense(32, kernel_regularizer=regularizers.l2(0.01)),
21 layers.BatchNormalization(),
22 layers.Activation('relu'),
23 layers.Dropout(0.2),
24
25 # Output
26 layers.Dense(1, activation='sigmoid')
27])
28
29# Compile
30model.compile(
31 optimizer='adam',
32 loss='binary_crossentropy',
33 metrics=['accuracy']
34)
35
36# Callbacks
37callbacks = [
38 EarlyStopping(
39 monitor='val_loss',
40 patience=15,
41 restore_best_weights=True
42 ),
43 ReduceLROnPlateau(
44 monitor='val_loss',
45 factor=0.5,
46 patience=5
47 )
48]
49
50# Train
51history = model.fit(
52 X_train, y_train,
53 epochs=200,
54 batch_size=32,
55 validation_split=0.2,
56 callbacks=callbacks
57)

Thứ tự áp dụng các kỹ thuật

Thứ tự áp dụng các kỹ thuật chống Overfitting

Thứ tự áp dụng các kỹ thuật chống OverfittingBắt đầuOverfitting?Không✅ Model OK1. Thêm DropoutVẫn overfit?2. Thêm L2 Regularization3. Thêm BatchNorm4. Data Augmentation5. Giảm model size

Checkpoint

Bạn đã biết cách kết hợp các kỹ thuật?

8

📊 Bảng Tổng hợp

TB5 min

So sánh các kỹ thuật Regularization

Kỹ thuậtCách hoạt độngKhi nào dùngKeras
DropoutTắt ngẫu nhiên neuronsMọi mạngDropout(0.3)
L1Penalty w\sum\|w\|Feature selectionl1(0.01)
L2Penalty w2\sum w^2⭐ Mặc địnhl2(0.01)
BatchNormChuẩn hóa activationsDeep networksBatchNormalization()
Early StoppingDừng sớmMọi trainingEarlyStopping()
Data AugmentationTạo thêm dataImage, TextRandomFlip()

Checklist chống Overfitting

  • Sử dụng Early Stopping
  • Thêm Dropout (0.2-0.5)
  • Thêm L2 Regularization
  • Sử dụng Batch Normalization
  • Data Augmentation (nếu image/text)
  • Giảm model complexity nếu cần
  • Tăng training data nếu có thể

🎉 Tuyệt vời! Bạn đã nắm vững các kỹ thuật chống Overfitting!

9

🎯 Tổng kết Module 1

TB5 min

Những gì đã học trong Module 1: ANN

  1. Bài 1: Deep Learning là gì, so sánh với ML
  2. Bài 2: Neuron, Activation Functions (Sigmoid, ReLU, Softmax)
  3. Bài 3: Forward & Backward Propagation
  4. Bài 4: Training với TensorFlow/Keras
  5. Bài 5: Regularization (Dropout, L2, BatchNorm)

Key Takeaways

  • Neural Network = Layers of neurons với weighted connections
  • Training = Forward → Loss → Backward → Update
  • Keras = High-level API dễ sử dụng
  • Regularization = Chống overfitting

Chuẩn bị cho Module 2: CNN

Bài tiếp theo sẽ học về:

  • Convolutional Neural Networks cho xử lý ảnh
  • Convolution, Pooling operations
  • Các kiến trúc nổi tiếng: VGG, ResNet

🎉 Chúc mừng! Bạn đã hoàn thành Module 1: ANN Fundamentals!