在迴歸問題中,將有符號的誤差定義為預測值和標籤之間的差異,是合理的做法。不過,在其他類型的問題中,這項策略通常會導致結果不佳。在梯度提升中採用更理想的策略:
- 定義損失函式,類似於神經網路中使用的損失函式。例如分類問題的熵 (也稱為對數損失)。
- 訓練弱模型,以便根據強模型輸出內容預測損失的梯度。
正式來說,假設損失函數為 $L(y,p)$,其中 $y$ 為標籤,$p$ 為預測值,則用於在步驟 $i$ 訓練弱模型的偽回應 $z_i$ 為:
$$ z_i = \frac {\partial L(y, F_i)} {\partial F_i} $$
其中:
- $F_i$ 是強模型的預測值。
上述範例是迴歸問題:目標是預測數值。在迴歸的情況下,平方誤差是常見的損失函式:
$$ L(y,p) = (y - p)^2 $$
在本例中,漸層為:
$$ z = \frac {\partial L(y, F_i)} {\partial F_i} = \frac {\partial(y-p)^2} {\partial p} = -2(y - p) = 2 \ \text{signed error} $$
換句話說,梯度是從我們的範例中取出,並以 2 為因數的符號錯誤。請注意,由於縮減,常數因數並不重要。請注意,這種等價關係僅適用於使用平方誤差損失函數的迴歸問題。對於其他監督式學習問題 (例如分類、排名、百分位損失的迴歸),梯度和帶有符號的錯誤之間並無對應關係。
使用牛頓方法步驟進行葉子和結構最佳化
牛頓方法是梯度下降法這類最佳化方法。不過,與梯度下降法只使用函式梯度進行最佳化不同,牛頓方法會同時使用函式的梯度 (一階導數) 和二階導數進行最佳化。
梯度下降法的步驟如下:
$$ x_{i+1} = x_i - \frac {df}{dx}(x_i) = x_i - f'(x_i) $$
和牛頓方法如下:
$$ x_{i+1} = x_i - \frac {\frac {df}{dx} (x_i)} {\frac {d^2f}{d^2x} (x_i)} = x_i - \frac{f'(x_i)}{f''(x_i)}$$
您可以選擇以兩種方式將牛頓方法整合至梯度提升樹的訓練作業:
- 樹狀結構訓練完成後,系統會在每個葉節上套用牛頓步驟,並覆寫其值。樹狀結構不會受到影響,只有葉節點值會變更。
- 在樹狀結構成長期間,系統會根據包含牛頓公式元素的評分選取條件。樹狀結構會受到影響。
YDF 代碼
在 YDF 中:
- YDF 一律會在節點上套用牛頓步驟 (選項 1)。
- 您可以使用
use_hessian_gain=True
啟用選項 2。