Giống như tạo hình bao bì và tăng cường hiệu ứng chuyển màu, tăng hiệu ứng chuyển màu là một phương pháp áp dụng cùng với một thuật toán học máy khác. Nói một cách đơn giản, cách tăng độ dốc liên quan đến có hai loại mô hình:
- "yếu" mô hình học máy, thường là cây quyết định.
- "mạnh" là một mô hình học máy, bao gồm nhiều yếu tố người mẫu.
Trong quá trình tăng độ dốc, ở mỗi bước, một mô hình yếu mới sẽ được huấn luyện để dự đoán "lỗi" của mô hình mạnh hiện tại (được gọi là phản hồi giả). Chúng tôi sẽ trình bày chi tiết về "lỗi" sau. Tạm thời, hãy giả định "lỗi" điểm khác biệt giữa dự đoán và nhãn hồi quy. Mô hình yếu (tức là "lỗi") là sau đó thêm vào mô hình mạnh cùng với dấu âm để giảm sai số của mô hình mạnh mẽ.
Tính năng tăng độ dốc có tính lặp lại. Mỗi lần lặp lại sẽ gọi công thức sau:
\[ F_{i+1} = F_i - f_i \]
trong đó:
- $F_i$ là mô hình mạnh mẽ ở bước $i$.
- $f_i$ là mô hình yếu ở bước $i$.
Thao tác này lặp lại cho đến khi đáp ứng một tiêu chí dừng, chẳng hạn như đạt đến số lần lặp lại hoặc nếu mô hình (mạnh) bắt đầu phù hợp quá mức khi được đo tập dữ liệu xác thực riêng biệt.
Hãy minh hoạ việc tăng độ dốc trên một tập dữ liệu hồi quy đơn giản trong đó:
- Mục tiêu là dự đoán $y$ từ $x$.
- Mô hình mạnh được khởi tạo là hằng số 0: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
Hãy áp dụng mã này trên tập dữ liệu sau:
Hình 25. Một tập dữ liệu hồi quy tổng hợp có một tính năng dạng số.
Sau đây là 3 biểu đồ sau lần lặp lại đầu tiên của tính năng tăng độ dốc thuật toán:
Hình 26. Ba biểu đồ sau lần lặp đầu tiên.
Chú ý những điều sau về biểu đồ trong Hình 26:
- Biểu đồ đầu tiên hiển thị dự đoán của mô hình mạnh mẽ, luôn luôn là 0.
- Biểu đồ thứ hai hiển thị lỗi, đó là nhãn của mô hình yếu.
- Biểu đồ thứ ba cho thấy mô hình yếu.
Mô hình yếu đầu tiên là tìm hiểu cách mô tả tương đối về nhãn và chủ yếu tập trung vào phần bên trái của không gian đối tượng (phần có nhiều biến thể nhất, và do đó gây ra lỗi nhiều nhất cho mô hình không đổi hằng số).
Sau đây là các biểu đồ tương tự cho một lần lặp lại khác của thuật toán:
Hình 27. 3 biểu đồ sau lần lặp thứ hai.
Chú ý những điều sau đây về các sơ đồ trong Hình 27:
- Mô hình mạnh hiện chứa dự đoán về mô hình yếu của lặp lại trước đó.
- Lỗi mới của mô hình mạnh là một chút nhỏ hơn.
- Dự đoán mới về mô hình yếu hiện tập trung vào phần bên phải của không gian tính năng.
Chúng tôi chạy thuật toán này thêm 8 lần lặp nữa:
Hình 28. Ba biểu đồ sau lần lặp thứ ba và lần lặp thứ mười.
Trong Hình 28, lưu ý rằng việc dự đoán mô hình mạnh bắt đầu giống với biểu đồ của tập dữ liệu.
Những hình này minh hoạ thuật toán tăng độ dốc bằng cách sử dụng cây quyết định như những học sinh yếu kém. Kết hợp này được gọi là cây tăng độ dốc (quyết định).
Các biểu đồ trên cho thấy bản chất của việc tăng độ dốc. Tuy nhiên, việc này ví dụ thiếu hai thao tác thực tế sau:
- Mức độ co ngót
- Tối ưu hoá giá trị lá bằng một bước trong phương pháp Newton
Thu hẹp
Mô hình yếu $f_i$ được nhân với một giá trị nhỏ $\nu$ (ví dụ: $\nu = 0,1$) trước khi được thêm vào mô hình mạnh mẽ $F_i$. Giá trị nhỏ này được gọi là sự sụt giảm. Nói cách khác, thay vì mỗi lần lặp lại sử dụng công thức:
\[ F_{i+1} = F_i - f_i \]
Mỗi lần lặp sử dụng công thức sau:
\[ F_{i+1} = F_i - \nu f_i \]
Hiện tượng co lại trong việc tăng độ dốc cũng tương tự như tốc độ học trong mạng nơron. Sự thu hẹp kiểm soát tốc độ học tập của mô hình mạnh mẽ, giúp hạn chế khái quát hoá kém. Điều đó nghĩa là giá trị co ngót gần với 0.0 sẽ giúp giảm hiện tượng quá tải so với giá trị co rút gần 1.0 hơn.
Trong mã trên, việc rút gọn sẽ được triển khai như sau:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions