漸層和增強功能就像是封裝和增強功能,又稱為其他機器學習演算法。不過請注意,漸層增強涉及兩種模型:
- 為「弱」的機器學習模型,這類決策通常是決策樹。
- 一個「強烈」的機器學習模型,由多個弱模型組成。
梯度提升時,在每個步驟中,都會訓練新的弱模型來預測目前強大的模型 (稱為「虛擬回應」)。我們稍後會詳細說明「錯誤」。目前,假設「錯誤」是預測值和迴歸標籤之間的差異。接著,系統會將弱模型 (也就是「錯誤」) 新增至強大的模型,並加上負號,以減少強勢模型的錯誤。
漸層增強效果是疊代式。每次疊代作業都會叫用下列公式:
\[ F_{i+1} = F_i - f_i \]
其中:
- $F_i$ 是步驟 $i$ 的強大模型。
- $f_i$ 是步驟 $i$ 的弱模型。
系統會重複此作業,直到符合停止條件,例如疊代次數達到上限,或 (強) 模型開始運作,讓系統是在個別驗證資料集上測量而超載。
讓我們以簡單的迴歸資料集說明漸層的增強程度,其中:
- 目標是預測 $x$ 的 $y$。
- 強模型已初始化為零常數:$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
讓我們在以下資料集套用這個程式碼:
圖 25. 具有單一數值特徵的合成迴歸資料集。
梯度提升演算法首次疊代後,有以下三個圖表:
圖 26. 首次疊代後建立三個圖表。
請留意圖 26 中的圖:
- 第一個圖表顯示了強大模型的預測結果,一律為 0。
- 第二張圖顯示錯誤,也就是我們弱點模型的標籤。
- 第三張圖顯示弱的模型。
第一個微弱的模型正在學習標籤的概略表示法,且主要位於特徵空間的左側 (變化版本變化最大的部分,因此為常數錯誤的模型最多錯誤)。
以下是演算法的另一個疊代圖:
圖 27. 第二次疊代後,會有三個圖示。
請留意圖 27 中的圖:
- 強大的模型現在包含先前疊代的低模型預測。
- 強勢模型的新錯誤稍微小一點。
- 目前弱點模型的預測內容現在著重於功能空間的右側。
演算法會進行 8 次疊代:
圖 28. 第三個疊代和第十次疊代後三個區塊。
請注意,在圖 28 中,強勢模型的預測結果開始會像資料集圖。
這些插圖說明瞭使用決策樹作為弱學生的漸層增強演算法。這種組合稱為「梯度提升 (決策) 樹狀結構」。
前述的圖表為梯度提升的基本原理。但這個範例缺少下列兩個實際作業:
- 縮小
- 使用 Newton's 方法的一個步驟,將葉子值最佳化
收縮
在微弱模型 $f_i$ 中,將小值 $\nu$ (例如 $\nu = 0.1$) 乘以相加模型 $F_i$。這個小值稱為 縮減。換句話說,不要使用下列公式每次疊代:
\[ F_{i+1} = F_i - f_i \]
每項疊代作業都會使用以下公式:
\[ F_{i+1} = F_i - \nu f_i \]
梯度提升中的縮減與類神經網路的學習率相當。縮減功能可控制強大模型的學習速度,進而限制過度超載。這表示將更接近 0.0 的縮減值減少到超過 1.0 的收縮值。
在上方的程式碼中,實作的縮減方式如下:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions