梯度提升，亦稱作梯度增強，是一種用於迴歸和分類問題的機器學習技術。其產生的預測模型是弱預測模型的整合，如採用典型的決策樹作為弱預測模型，這時則為梯度提升樹（或）。像其他提升方法一樣，它以分階段的方式構建模型，但它透過允許對任意可微分損失函式進行最佳化作為對一般提升方法的推廣。 梯度提升技術源自於於 1997 年時將提升方法用於最佳化演算法的觀察。隨後於 1999 年時提出了顯式迴歸梯度增強演算法。Llew Mason、Jonathan Baxter、Peter Bartlett 和 Marcus Frean 則針對梯度提升在一般的函式空間的運用進行研究，並於 1999 年在研討會發表之後，同年正式發表了論文。該論文介紹了將提升演算法看作 函式空間上的梯度下降迭代 演算法的觀點。也就是將其視為透過迭代地選擇指向負梯度方向的函式（弱預測模型），來最佳化函式空間上的成本函式的演算法。這種將提升視為函式梯度的觀點，導致了提升演算法被運用於迴歸和分類之外的其他機器學習和統計領域的後續發展。 非正式介紹 （本節遵循 Li 對梯度增強的說明。） 與其他增強方法一樣，梯度增強以迭代方式將弱的 學習器 組合為一個強學習器。最簡單的解釋是在最小二乘迴歸中，透過最小化均方誤差 tfrac 1nsum_i hat y_i y_i2 ，教 模型 F 預測實數值 hat y F x。 在梯度提升的每個階段 m 1 le m le M 假設已經有一個不太完美的模型 F_m 最開始時只是一個預測輸出變數 均值的模型。 梯度提升演算法透過在當前模型 F_m 增加一個新的估計量 得到一個更好的模型 F_m1x F_m x h x 為了求得 h 梯度提升基於以下觀察：一個完美的 可以完美預測當前不完美模型 F_m 的殘差，即滿足， F_m1x F_m x h x y 或者，等效地有， h x y F_m x 因此，梯度提升透過擬合殘差 y F_m x 得到 。和其他提升方法的變體一樣，F_m1 透過糾正 F_m 的誤差變得更完美。 這個想法可以擴充套件到均方誤差損失之外的任意損失函式，甚至擴充套件到分類與排序問題，只要觀察到以下一點：模型的殘差 y F_m x 就是均方損失函式 frac 12y F x2 關於 F x 的負梯度。因此，梯度提升其實是一種 梯度下降演算法，可以代入除了均方損失之外的不同的損失函式，得到不同的梯度。 演算法 在許多有監督學習問題中，一個輸出變數和一個輸入變數透過聯合機率分佈 P xy 描述 。給定訓練集 x_1y_1 dots x_ny_n ，目的是在所有具有給定形式的函式 F x 中找到一個 hat Fx 使某些指定損失函式 L y F x 的期望值達到最小： hat F underset Fargmin mathbb E_xyL y F x 梯度提升方法透過某一類 mathcal H 中弱學習器（或稱基學習器）h_i x 帶權重和的形式來表示對實值變數做出估計的 hat Fx hat Fx sum_i1M gamma_i h_i x mbox const 根據經驗風險最小化原理，該方法試圖找到一個近似 hat Fx 可以最大程度地減少訓練集上損失函式的平均值，即，最小化經驗風險。它是從一個由常數函式組成的模型 F_0 x 開始 ，並以貪心的方式逐步擴充套件： F_0 x underset gammaargmin sum_i1n L y_i gamma F_m x F_m1x underset h_m in mathcal Hoperatorname argmin left sum_i1n L y_i F_m1x_i h_m x_iright 上式 h_m in mathcal H 是基學習器。 不幸的是，通常在每個步驟中為任意損失函式選擇最佳函式是計算上不可行的最佳化問題。因此，我們將方法侷限於問題的簡化版本。 這個想法是對這個最小化問題（函式梯度下降）應用梯度下降步驟。如果我們考慮連續情況，即 mathcal H 是上的任意微分函式的集合 R ，我們將根據以下方程式更新模型 F_m x F_m1x gamma_m sum_i1n nabla_F_m1 L y_i F_m1x_i gamma_m underset gammaargmin sum_i1n Lleft y_i F_m1x_i gamma nabla_F_m1 L y_i F_m1x_i right 式子中，對於 i in 1m 是關於函式 F_i 求導，gamma_m 是步長。 但是在離散情況下，即 mathcal H 如果是有限的，我們選擇最接近梯度的候選函式 ，然後可以根據上述等式透過線搜尋來計算係數。請注意，這種方法是一種啟發式方法，因此不能給出給定問題的精確解決方案，而是一種近似方法。 在虛擬碼中，通用梯度增強方法是： Input training set x_i y_i_i1n a differentiable loss function L y F x number of iterations Algorithm Initialize model with a constant value F_0 x underset gammaargmin sum_i1n L y_i gamma For 1 to Compute socalled pseudoresiduals r_im left frac partial L y_i F x_ipartial F x_iright_F xF_m1x quad mbox for i1ldotsn Fit a base learner or weak learner eg tree h_m x to pseudoresiduals ie train it using the training set x_i r_im_i1n Compute multiplier gamma_m by solving the following onedimensional optimization problem gamma_m underset gammaoperatorname argmin sum_i1n Lleft y_i F_m1x_i gamma h_m x_iright Update the model F_m x F_m1x gamma_m h_m x Output F_M x 梯度樹增強 梯度提升通常與固定大小的決策樹 （尤其是 CART 樹）一起用作基礎學習者。 對於這種特殊情況，Friedman 提出了對梯度增強方法的改進，以提高每個基礎學習者的適應質量。 第 m 步的通用梯度提升將適合決策樹 h_m x 偽殘留物。 讓 J_m 是它的葉子數。 樹將輸入空間劃分為 J_m 不相交的區域 R_1m ldots R_J_m m 並預測每個區域的恆定值。 使用指標符號 ，輸出 h_m x 輸入 x 可以寫為和： h_m x sum_j1J_m b_jm mathbf 1_R_jmx 這裡 b_jm 是該區域中預測的值 R_jm。 然後係數 b_jm 乘以一些值 gamma_m ，使用線搜尋進行選擇，以最大程度地減少損失函式，並按以下方式更新模型： F_m x F_m1x gamma_m h_m x quad gamma_m underset gammaoperatorname argmin sum_i1n L y_i F_m1x_i gamma h_m x_i 弗裡德曼（Friedman）建議修改此演算法，以便選擇一個單獨的最佳值 gamma_jm 每個樹的區域，而不是單個 gamma_m 為整棵樹。 他稱修改後的演算法為 TreeBoost。 係數 b_jm 然後可以簡單地丟棄樹擬合過程中的資料，模型更新規則變為： F_m x F_m1x sum_j1J_m gamma_jm mathbf 1_R_jmx quad gamma_jm underset gammaoperatorname argmin sum_x_i in R_jm L y_i F_m1x_i gamma 樹木大小 J （樹中終端節點的數量）是該方法的引數，可以針對手頭的資料集進行調整。 它控制模型中變數之間允許的最大互動級別。 用 J 2 （ 決策樹樁 ），不允許變數之間進行互動。 用 J 3 該模型可能包括多達兩個變數之間的相互作用的影響，依此類推。 Hastie 等人評論通常 4 leq J leq 8 對於提升效果很好，結果對選擇 J 在這個範圍內 J 2 不足以用於許多應用程式，並且 J 10 不太可能是必需的。 正則化 過於緊密地擬合訓練集可能導致模型的泛化能力下降。 幾種所謂的正則化技術透過限制擬合過程來減少這種過度擬合的效果。 一個自然的正則化引數是梯度提升迭代的次數 M（即，當基礎學習者是決策樹時，模型中的樹的數量）。M 的增加會減少訓練集上的誤差，但將其設定得過高可能會導致過度擬合。 通常透過監視單獨的驗證資料集上的預測誤差來選擇 M 的最佳值。 除了控制 M 外，還使用其他幾種正則化技術。 另一個正則化引數是樹的深度。 該值越高，模型越可能適合訓練資料。 收縮率 梯度增強方法的一個重要部分是透過收縮排行正則化，它包括如下修改更新規則： F_m x F_m1x nu cdot gamma_m h_m x quad 0 nu leq 1 哪裡引數 nu 被稱為 學習率。 根據經驗發現，使用較小的學習率 （例如 nu 01 ）在不縮小（而不縮小）的情況下，極大地提高了模型的泛化能力 nu 1 ）。然而，這是以在訓練和查詢期間增加計算時間為代價的：較低的學習率需要更多的迭代。 隨機梯度增強 引入梯度增強後不久，Friedman 在 Breiman 的 bootstrap 聚合 （裝袋）方法的啟發下 ，對該演算法進行了較小的修改。具體來說，他提出在演算法的每次迭代中，基礎學習者都應適合隨機抽取的訓練集的子樣本，而無需替換。弗裡德曼（Friedman）觀察到，透過這種修改，梯度增強的精度有了顯著提高。 子樣本大小是某個常數 f 訓練集的大小。 什麼時候 f 1 ，該演算法是確定性的，並且與上述演算法相同。 較小的值 f 將隨機性引入演算法中，並防止過度擬合 ，作為一種正則化 。 該演算法也變得更快，因為迴歸樹必須在每次迭代時都適合較小的資料集。弗裡德曼獲得了 05 leq f leq 08 在中小型訓練集上可獲得良好的結果。 因此， f 通常將其設定為 05，這意味著訓練集的一半用於構建每個基礎學習者。 同樣，像在裝袋中一樣，子取樣允許透過評估那些在下一個基礎學習者的構建中未使用的觀察值的預測來定義預測效能改進的袋外誤差 。 預算外的估計有助於避免需要獨立的驗證資料集，但通常會低估實際效能的提高和最佳迭代次數。 葉子中的觀察數 梯度樹增強實現通常還透過限制樹的終端節點中的最小觀察次數來使用正則化（此引數在 R gbm 軟體包中命名為 nminobsinnode）。透過忽略導致導致節點包含少於此訓練集例項數量的節點的任何拆分，在樹構建過程中使用它。 施加此限制有助於減少葉子預測的差異。 懲罰樹木的複雜性 用於梯度增強樹的另一種有用的正則化技術是懲罰學習模型的模型複雜性。 Tianqi Chen Introduction to Boosted Trees 模型複雜度可以定義為學習樹中葉子的比例。 損失和模型複雜性的聯合最佳化對應於後修剪演算法，該演算法可刪除未能將損失降低閾值的分支。 其他種類的正規化，例如 ell_2 還可以新增對葉子值的懲罰以避免過度擬合 。 用法 梯度提升可以用於學習排名 。 商業網路搜尋引擎 Yahoo Cossock David and Zhang Tong 2008 Statistical Analysis of Bayes Optimal Subset Ranking page 14 和 Yandex Yandex corporate blog entry about new ranking model Snezhinsk in Russian 在其機器學習的排名引擎中使用了梯度增強的變體。 名字 該方法有多種名稱。弗裡德曼（Friedman）將他的迴歸技術稱為 梯度提升機（GBM）。 梅森，巴克斯特等。將廣義的演算法抽象類描述為 功能梯度提升。弗裡德曼（Friedman）等人。將梯度提升模型的進展描述為多重可加回歸樹（MART）；Elith 等。將這種方法描述為 增強迴歸樹（BRT）。 R 的一種流行的開源實現將其稱為 通用提升模型。但是，使用 BRT 擴充套件這項工作的軟體包。 Salford Systems 的商業實現使用名稱 Multiple Additive Regression Trees（MART）和 TreeNet，兩者均為商標。 需要引用 參見 AdaBoost 隨機森林 XGBoost CatBoost 決策樹學習 註解 參考文獻 外部連結 如何解釋梯度提升 梯度增強迴歸樹 Category 決策樹 Category 分類演演算法