Regularization là kỹ thuật thêm một số hạng phạt vào hàm mất mát để kiểm soát độ lớn của hệ số mô hình. Bằng cách "ép" các hệ số nhỏ lại, ta đánh đổi một chút bias để giảm mạnh variance, giúp mô hình tổng quát hoá tốt hơn trên dữ liệu mới thay vì học thuộc lòng nhiễu trong tập huấn luyện.
Overfitting xảy ra khi mô hình quá phức tạp so với lượng thông tin thực sự có trong dữ liệu: nó khớp gần như hoàn hảo với tập huấn luyện (kể cả nhiễu ngẫu nhiên) nhưng lại dự đoán kém trên dữ liệu chưa thấy. Dấu hiệu kinh điển là sai số huấn luyện rất thấp nhưng sai số kiểm thử cao.
Sai số kỳ vọng của một mô hình có thể tách thành ba phần — đây chính là đánh đổi bias–variance:
Ý tưởng cốt lõi của regularization: các hệ số có độ lớn lớn thường là biểu hiện của một mô hình "gồ ghề", dao động mạnh. Bằng cách thêm số hạng phạt độ lớn hệ số vào hàm mục tiêu, ta buộc mô hình phải "trả giá" cho sự phức tạp, qua đó tạo ra một hàm mượt hơn, ổn định hơn — chấp nhận tăng nhẹ bias để đổi lấy mức giảm variance lớn hơn nhiều.
Ridge thêm vào hàm mất mát bình phương chuẩn \(\ell_2\) của vector hệ số. Hàm mục tiêu cần tối thiểu hoá:
Vì số hạng phạt khả vi trơn ở mọi nơi, Ridge có nghiệm đóng (closed-form):
Điểm đẹp về mặt số học: ma trận \(X^\top X+\lambda I\) luôn khả nghịch khi \(\lambda\gt 0\), nhờ \(\lambda I\) đẩy mọi trị riêng lên dương. Điều này khắc phục được trường hợp \(X^\top X\) suy biến (khi đặc trưng cộng tuyến hoặc số đặc trưng nhiều hơn số mẫu) — nơi hồi quy tuyến tính thường thất bại.
Vai trò của \(\lambda\): khi \(\lambda\to 0\), Ridge quay về hồi quy tuyến tính thường (variance cao). Khi \(\lambda\to\infty\), mọi hệ số bị ép về 0 (mô hình gần như hằng số, bias cao). Giá trị \(\lambda\) tốt thường chọn bằng cross-validation.
LASSO (Least Absolute Shrinkage and Selection Operator) thay chuẩn \(\ell_2\) bằng chuẩn \(\ell_1\) — tổng giá trị tuyệt đối của các hệ số:
Khác biệt mang tính quyết định: LASSO tạo ra nghiệm thưa (sparse) — nhiều hệ số bị đẩy đúng bằng 0. Những đặc trưng có hệ số 0 coi như bị loại khỏi mô hình, nên LASSO đồng thời thực hiện chọn đặc trưng tự động (feature selection). Đây là ưu thế lớn khi dữ liệu có rất nhiều đặc trưng nhưng chỉ một số ít thực sự quan trọng.
Không có nghiệm đóng: chuẩn \(\ell_1\) không khả vi tại 0 (hàm \(|\theta|\) có điểm gãy), nên không thể giải bằng công thức ma trận như Ridge. Thay vào đó dùng các thuật toán lặp như coordinate descent (cập nhật lần lượt từng hệ số, rất nhanh) hoặc subgradient / proximal gradient.
Vì sao L1 cho nghiệm thưa — giải thích hình học: bài toán có thể nhìn dưới dạng tối thiểu hoá sai số trong một vùng ràng buộc quanh gốc toạ độ. Vùng ràng buộc của L1, \(|\theta_1|+|\theta_2|\le t\), là một hình thoi có các góc nhọn nằm ngay trên trục toạ độ. Các đường đồng mức (contour) hình elip của hàm sai số khi mở rộng ra rất dễ chạm vào vùng này tại một góc nhọn — mà tại góc thì một trong các toạ độ bằng 0, tức một hệ số bị triệt tiêu. Ngược lại, vùng ràng buộc của L2, \(\theta_1^2+\theta_2^2\le t\), là một hình tròn nhẵn không có góc, nên điểm tiếp xúc gần như luôn nằm ngoài trục → hệ số nhỏ nhưng khác 0.
LARS là một thuật toán hồi quy hiệu quả dùng để dựng toàn bộ đường hệ số (regularization path) — tức quỹ đạo của tất cả hệ số khi tham số \(\lambda\) thay đổi từ lớn (mọi hệ số = 0) về nhỏ — chỉ trong một lượt chạy có chi phí tương đương một phép bình phương tối thiểu.
Ý tưởng vận hành:
Liên hệ với LASSO: LARS có quan hệ rất chặt với LASSO — chỉ cần một chỉnh sửa nhỏ (cho phép hệ số bị loại khỏi tập hoạt động khi nó chạm 0), LARS sẽ tính được chính xác đường nghiệm LASSO. Đây là lý do trong sklearn có lớp LassoLars.
LARS đặc biệt hữu ích khi số đặc trưng rất lớn: nó cho ta nhìn toàn cảnh thứ tự các đặc trưng được "kích hoạt" và toàn bộ đường co hệ số mà không phải giải lại bài toán cho từng giá trị \(\lambda\).
| Tiêu chí | LASSO (L1) | Ridge (L2) |
|---|---|---|
| Số hạng phạt | \(\lambda\lVert\theta\rVert_1\) | \(\lambda\lVert\theta\rVert_2^2\) |
| Nghiệm thưa? | Có — nhiều hệ số = 0 | Không — hệ số nhỏ nhưng khác 0 |
| Feature selection | Có (tự động loại đặc trưng) | Không (giữ lại tất cả) |
| Nghiệm đóng | Không (\(\ell_1\) không khả vi tại 0) → coordinate descent / LARS | Có: \((X^\top X+\lambda I)^{-1}X^\top y\) |
| Đặc trưng tương quan cao | Có xu hướng chọn 1, bỏ phần còn lại | Phân bổ trọng số đều cho cả nhóm |
| Khi nào dùng | Nhiều đặc trưng, nghi ngờ chỉ ít biến quan trọng, cần mô hình gọn & dễ giải thích | Hầu hết đặc trưng đều có ích, có đa cộng tuyến, ưu tiên ổn định |
# Ridge, Lasso, LARS trong scikit-learn from sklearn.linear_model import Ridge, Lasso, Lars, LassoLars from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline # Chuẩn hoá đặc trưng RỒI mới regularize (rất quan trọng) ridge = make_pipeline(StandardScaler(), Ridge(alpha=1.0)) lasso = make_pipeline(StandardScaler(), Lasso(alpha=0.1)) ridge.fit(X_train, y_train) lasso.fit(X_train, y_train) # Xem hệ số nào bị LASSO ép về 0 (feature selection) coef = lasso.named_steps['lasso'].coef_ print('Số đặc trưng còn lại:', (coef != 0).sum()) # LARS: dựng toàn bộ regularization path lars = Lars(n_nonzero_coefs=10).fit(X_train, y_train) # LassoLars = đường nghiệm LASSO tính bằng thuật toán LARS lasso_lars = LassoLars(alpha=0.1).fit(X_train, y_train)
StandardScaler (đưa về trung bình 0, độ lệch chuẩn 1) để mọi đặc trưng được đối xử bình đẳng.RidgeCV / LassoCV hoặc GridSearchCV với cross-validation thay vì đoán thủ công.