Series: Machine Learning Fundamentals – Bài 21
Ở bài trước, chúng ta đã tìm hiểu Random Forest.
Ý tưởng của Random Forest khá trực quan:
Xây dựng nhiều Decision Tree khác nhau → để chúng cùng dự đoán → tổng hợp kết quả.
Nhưng có một cách tiếp cận khác.
Thay vì để các cây học tương đối độc lập, điều gì sẽ xảy ra nếu:
Cây thứ hai tập trung sửa những gì cây thứ nhất dự đoán sai?
Sau đó:
Cây thứ ba tiếp tục sửa những sai số còn lại?
Và quá trình này tiếp tục hàng chục hoặc hàng trăm lần.
Đó chính là tư tưởng cốt lõi của Gradient Boosting.
Gradient Boosting là gì?
Gradient Boosting là một phương pháp Ensemble Learning xây dựng nhiều mô hình yếu (Weak Learners) theo trình tự.
Mỗi mô hình mới được thêm vào nhằm cải thiện những sai số mà tập hợp mô hình trước đó chưa xử lý tốt.
Trong thực tế, Weak Learner thường là những Decision Tree nhỏ.
Có thể hình dung:
Khác biệt quan trọng nằm ở chữ:
Sequential – Tuần tự.
Các cây không được xây dựng độc lập.
Cây sau phụ thuộc vào kết quả của các cây trước.
Một ví dụ đơn giản
Giả sử chúng ta muốn dự đoán giá của một căn nhà:
Giá thực tế: 5 tỷ đồng
Mô hình ban đầu dự đoán:
3,5 tỷ
Sai số:
5 − 3,5 = 1,5 tỷ
Tree tiếp theo được xây dựng để học phần sai số này.
Nó điều chỉnh thêm:
+1 tỷ
Dự đoán mới:
4,5 tỷ
Sai số còn:
0,5 tỷ
Tree tiếp theo tiếp tục học:
+0,35 tỷ
Dự đoán trở thành:
4,85 tỷ
Quá trình tiếp tục cho đến khi mô hình đạt mức sai số phù hợp.
Residual – phần mô hình chưa học được
Trong Regression, một cách trực quan để hiểu Boosting là thông qua Residual.
Residual có thể viết đơn giản:
Residual = Giá trị thực − Giá trị dự đoán
Ví dụ:
| Thực tế | Dự đoán | Residual |
|---|---|---|
| 100 | 80 | +20 |
| 150 | 160 | -10 |
| 200 | 170 | +30 |
| 250 | 240 | +10 |
Thay vì tiếp tục dự đoán trực tiếp Target ban đầu, cây tiếp theo cố gắng học:
Tức là học:
Mô hình trước đang sai ở đâu và sai bao nhiêu?
Từ một cây yếu đến mô hình mạnh
Gradient Boosting thường sử dụng các Decision Tree khá nhỏ.
Một cây riêng lẻ có thể không dự đoán tốt.
Ví dụ:
Nhưng khi kết hợp tuần tự:
Đây chính là tư tưởng của Boosting:
Kết hợp nhiều mô hình yếu để tạo ra một mô hình mạnh.
Gradient nằm ở đâu trong Gradient Boosting?
Đây là điểm khiến Gradient Boosting khác với cách giải thích đơn giản “cây sau sửa lỗi cây trước”.
Mục tiêu thực sự của Machine Learning là tối thiểu hóa một Loss Function.
Ví dụ trong Regression:
Mean Squared Error (MSE)
Gradient cho biết:
Nếu thay đổi Prediction theo một hướng nhất định, Loss sẽ tăng hay giảm?
Gradient Boosting xây dựng mô hình mới nhằm đi theo hướng giúp giảm Loss.
Chính xác hơn, các Weak Learner được dùng để xấp xỉ hướng negative gradient của Loss Function.
Đó là lý do thuật toán có tên:
Gradient + Boosting
Learning Rate
Nếu mỗi cây mới sửa toàn bộ sai số ngay lập tức, mô hình có thể thay đổi quá mạnh.
Vì vậy Gradient Boosting sử dụng một Hyperparameter quan trọng:
Learning Rate
Ví dụ cây mới dự đoán:
Nếu:
thì mô hình chỉ cập nhật:
Thay vì:
ta có:
Mô hình học chậm hơn nhưng có thể kiểm soát tốt hơn.
Learning Rate và số lượng cây
Hai Hyperparameter này có quan hệ chặt chẽ:
Learning Rate nhỏ → thường cần nhiều cây hơn.
Ví dụ:
so với:
Không thể chỉ nhìn một Hyperparameter riêng lẻ.
Đây chính là lý do Hyperparameter Tuning rất quan trọng đối với các mô hình Boosting.
Gradient Boosting hoạt động như thế nào?
Một phiên bản đơn giản của quy trình:
Bước 1 – Khởi tạo Prediction
Mô hình bắt đầu với một dự đoán đơn giản.
Ví dụ trong Regression có thể dựa trên giá trị trung bình của Target.
Bước 2 – Tính sai số
So sánh:
Bước 3 – Huấn luyện Decision Tree
Một Tree nhỏ được xây dựng để học hướng điều chỉnh sai số.
Bước 4 – Cập nhật Prediction
Bước 5 – Lặp lại
Tiếp tục xây thêm cây để giảm Loss.
Random Forest và Gradient Boosting khác nhau thế nào?
Đây là phần rất quan trọng.
Random Forest
Các cây chủ yếu được xây dựng độc lập.
Gradient Boosting
Các cây được xây dựng tuần tự.
So sánh:
| Random Forest | Gradient Boosting |
|---|---|
| Bagging | Boosting |
| Cây tương đối độc lập | Cây phụ thuộc tuần tự |
| Giảm Variance | Tập trung giảm Loss |
| Có thể Training song song tốt hơn | Khó song song hóa toàn bộ quá trình |
| Thường dễ Tune hơn | Nhạy với Hyperparameter hơn |
| Baseline rất mạnh | Có thể đạt Accuracy cao hơn |
Gradient Boosting có bị Overfitting không?
Có.
Nếu chúng ta:
- Xây quá nhiều cây.
- Để cây quá sâu.
- Chọn Learning Rate không phù hợp.
- Tune quá mức trên Validation Data.
mô hình vẫn có thể Overfit.
Một số Hyperparameter quan trọng gồm:
n_estimators
Số lượng cây.
learning_rate
Mức đóng góp của mỗi cây mới.
max_depth
Độ sâu của mỗi Decision Tree.
min_samples_leaf
Số mẫu tối thiểu trong Leaf.
subsample
Tỷ lệ dữ liệu được sử dụng để huấn luyện từng cây trong một số biến thể.
Các giá trị này thường được lựa chọn thông qua Cross Validation.
Vì sao Gradient Boosting mạnh với Tabular Data?
Trong nhiều bài toán dữ liệu dạng bảng, chúng ta có:
Các mô hình dựa trên cây có khả năng học:
- Quan hệ phi tuyến.
- Interaction giữa các Feature.
- Threshold phức tạp.
Boosting sau đó tiếp tục cải thiện những vùng dữ liệu mà các cây trước xử lý chưa tốt.
Vì vậy, các phương pháp Gradient Boosted Trees trở thành một nhóm mô hình rất quan trọng đối với Tabular Machine Learning.
Từ Gradient Boosting đến XGBoost
Gradient Boosting rất mạnh.
Nhưng implementation truyền thống có thể gặp những vấn đề như:
- Training chậm.
- Tốn tài nguyên.
- Cần kiểm soát Overfitting.
- Khó mở rộng khi dataset lớn.
Từ nền tảng Gradient Boosting, nhiều thư viện và thuật toán tối ưu hơn đã xuất hiện.
Một trong những cái tên nổi tiếng nhất là:
XGBoost – Extreme Gradient Boosting
Ngoài ra còn có:
- LightGBM.
- CatBoost.
Những công cụ này đã trở thành lựa chọn phổ biến trong nhiều bài toán Machine Learning với dữ liệu dạng bảng.
Gradient Boosting có luôn tốt hơn Random Forest?
Không.
Không có thuật toán nào luôn chiến thắng.
Random Forest có thể phù hợp hơn khi:
- Muốn một baseline nhanh.
- Muốn ít Hyperparameter hơn.
- Muốn mô hình tương đối ổn định.
- Không muốn dành nhiều thời gian Tuning.
Gradient Boosting đáng thử khi:
- Predictive performance là ưu tiên lớn.
- Có đủ tài nguyên để Tune.
- Dữ liệu dạng bảng.
- Quan hệ giữa Feature và Target phức tạp.
Cách tốt nhất vẫn là:
Đánh giá bằng Cross Validation trên chính dữ liệu của bài toán.
Một lưu ý quan trọng: cây sau không đơn giản “học những dòng dự đoán sai”
Cách nói:
“Cây sau học từ lỗi của cây trước”
rất hữu ích để hiểu trực quan.
Nhưng về mặt kỹ thuật, nó chưa hoàn toàn đầy đủ.
Gradient Boosting tối ưu một Loss Function bằng cách thêm từng Weak Learner theo hướng giúp giảm Loss.
Tùy bài toán và Loss Function, thứ cây tiếp theo học không nhất thiết chỉ là một danh sách các mẫu “đúng/sai”.
Đây là điểm khác biệt giữa việc hiểu trực giác và hiểu cơ chế toán học của Gradient Boosting.
Bạn có thể xem mô tả kỹ thuật về Gradient Boosting trong Scikit-learn User Guide.
Khi nào nên dùng Gradient Boosting?
Gradient Boosting đáng cân nhắc khi:
- Làm Classification hoặc Regression.
- Dữ liệu chủ yếu ở dạng bảng.
- Decision Tree đơn lẻ chưa đủ tốt.
- Random Forest đã tạo baseline nhưng muốn cải thiện thêm.
- Có khả năng thực hiện Hyperparameter Tuning.
- Cần mô hình học được các quan hệ phi tuyến phức tạp.
Tuy nhiên, mô hình vẫn cần được đánh giá bằng Validation/Cross Validation thay vì chỉ nhìn Training Score.
Kết luận
Gradient Boosting là một phương pháp Ensemble Learning xây dựng nhiều Weak Learner theo trình tự.
Thay vì để các Decision Tree hoạt động độc lập như Random Forest:
Mỗi mô hình mới được thêm vào để cải thiện những gì tập hợp mô hình hiện tại vẫn chưa dự đoán tốt.
Ba ý tưởng quan trọng nhất cần nhớ:
1. Sequential Learning
Các cây được xây dựng lần lượt.
2. Loss Optimization
Mỗi bước cố gắng làm giảm hàm Loss.
3. Learning Rate
Kiểm soát mức đóng góp của mỗi cây mới.
Gradient Boosting cũng mở ra một nhánh cực kỳ quan trọng của Machine Learning hiện đại:
Và đó cũng chính là nơi series sẽ đi tiếp.
Tài liệu tham khảo
Scikit-learn – Gradient Boosting
Gradient Boosting User Guide
XGBoost Documentation
XGBoost Documentation
Khóa học tại MCNA Technology School
Nếu bạn muốn thực hành Decision Tree, Random Forest, Gradient Boosting và các mô hình Machine Learning bằng Python, có thể tham khảo:
🤖 Combo 5 khóa AI & Power BI
🐍 Combo Python
Tác giả: Bùi Đình Tuyển – Data Analyst tại MCNA Technology School
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: MCNA Technology School
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

