勾配ブースティングの原理:GBDT・XGBoost・LightGBM
表形式データで今なお最強級の精度を出す勾配ブースティング。残差を逐次的に潰す仕組みと、XGBoost・LightGBM が桁違いに速い理由を原理から掴めば、ハイパラ調整に根拠が持てます。
- 1.勾配ブースティングは、弱学習器(浅い決定木)を1本ずつ足し、各ステップで現在の予測の損失の負の勾配(GBDT では残差に相当)へ新しい木をフィットする。関数空間での勾配降下として定式化できる。
- 2.XGBoost は損失を2次までテイラー展開し、勾配 g とヘシアン h で分割の利得を解析的に評価する。さらに正則化項を目的関数に組み込み、葉の重みと木の複雑さを同時に制御する。
- 3.高速化の核は、特徴量を離散ビンに量子化するヒストグラム法と、損失減少が最大の葉を優先して伸ばす leaf-wise 成長(LightGBM)。学習率・列サンプリング・木の深さで過学習を抑える。
ブースティングの考え方:弱学習器を逐次的に足す
勾配ブースティング(gradient boosting) は、表形式データで今なお最強級の予測精度を出すアンサンブル手法です。中心となる発想は単純で、「単体では弱い学習器(weak learner)を1本ずつ足し合わせ、後から足す木が前までの誤りを補正する」 ことにあります。多数の独立な木を並列に平均する**バギング(ランダムフォレスト)とは対照的に、ブースティングは木を逐次的(sequential)**に積み上げ、前段の予測残差に次段が集中するのが本質です。
弱学習器には通常、深さ数段の浅い決定木(GBDT: Gradient Boosting Decision Trees) を使います。最終予測は、初期値(多くは目的変数の平均やロジット)に、各ステップの木の出力を学習率で縮めて足し込んだ総和です。
F_0(x) = 初期値(例: 平均値、または log-odds)
F_m(x) = F_{m-1}(x) + ν · h_m(x) (m = 1..M)
h_m = m 番目に追加する弱学習器(決定木)
ν = 学習率(shrinkage, 0 < ν <= 1)
M = 木の本数(ブースティング回数)
関数空間の勾配降下としての定式化
なぜ「勾配」ブースティングと呼ぶのか。Friedman(2001)の定式化では、予測関数そのものを最適化変数とみなした勾配降下として説明できます。通常の勾配降下法がパラメータ空間でパラメータを更新するのに対し、ブースティングは関数空間で「現在の予測関数」を1ステップ更新します。
損失 L(y, F(x))(例: 回帰の二乗誤差、分類のロジスティック損失)に対し、各データ点での現在予測に関する負の勾配を計算します。
擬似残差: r_im = - [ ∂L(y_i, F(x_i)) / ∂F(x_i) ] at F = F_{m-1}
二乗誤差 L = (1/2)(y - F)^2 のとき
r_im = y_i - F_{m-1}(x_i) ← まさに残差そのもの
この r_im が擬似残差(pseudo-residual) です。二乗誤差では文字通り「実測 − 現予測」の残差になり、「残差に木をフィットする」という直感が、より一般の損失では「負の勾配方向に木をフィットする」へと拡張されます。次の木 h_m は、入力 x からこの擬似残差を予測するよう訓練され、その分だけ予測を勾配方向へ動かします。学習率 ν は勾配降下のステップ幅に対応します。
「残差に木を当てる」は二乗誤差という特殊な損失で成り立つ見え方にすぎません。一般の損失では、各点の負の勾配(擬似残差)に木を当て、葉ごとに最適な出力値を1次元の line search で決めます。分類なら擬似残差は「実測ラベル − 予測確率」の形になります。この抽象化のおかげで、二乗誤差・ロジスティック損失・ポアソン損失・分位点損失など、微分可能な任意の損失を同じ枠組みで扱えます。
XGBoost:2次近似と正則化された目的関数
素朴な GBDT が1次勾配(残差)だけを使うのに対し、XGBoost(Chen and Guestrin, 2016)は損失を2次までテイラー展開し、収束と精度を高めました。各点で勾配 g(1次)とヘシアン h(2次)を求め、木を追加したときの目的関数を解析的に近似します。
g_i = ∂L(y_i, F(x_i)) / ∂F # 1次勾配
h_i = ∂²L(y_i, F(x_i)) / ∂F² # 2次(ヘシアン)
葉 j の最適重み: w_j* = - G_j / (H_j + λ)
G_j = Σ g_i, H_j = Σ h_i (葉 j に落ちるサンプルの和)
λ = 葉重みへの L2 正則化係数
XGBoost のもう一つの核心は、正則化を目的関数に明示的に組み込んだ点です。葉の数 T への罰則 γ と、葉重みへの L2 罰則 λ を加えることで、木の複雑さと出力の大きさを同時に抑えます。分割を行うかどうかは、分割後の利得(gain)が γ を上回るかで判定されます。
分割の利得(gain):
Gain = (1/2)[ G_L²/(H_L+λ) + G_R²/(H_R+λ) - (G_L+G_R)²/(H_L+H_R+λ) ] - γ
左右の子の構造スコアの和 - 分割前のスコア - 分割コスト γ
Gain <= 0 なら分割しない(事前枝刈り)
この式は「分割が損失をどれだけ減らすか」を g, h, λ, γ だけで閉じた形で与えるため、全候補分割を高速に比較できます。これが正則化を損失の外側の付け足しではなく、木構造の探索そのものに織り込む設計です。
高速化の三本柱:ヒストグラム・leaf-wise・サンプリング
大規模データで効くのは精度よりも速度とメモリ効率です。XGBoost の hist 法と LightGBM(Ke et al., 2017)は、次の工夫で桁違いに高速化しました。
| 技法 | やること | 効果 |
|---|---|---|
| ヒストグラム分割 | 連続特徴量を 255 程度の離散ビンに量子化し、ビン単位で勾配・ヘシアンを集計 | 分割候補が全データ点からビン数へ激減し、計算量とメモリが大幅低下 |
| leaf-wise 成長 | 損失減少が最大の葉を1つ選んで伸ばす(LightGBM) | 同じ葉数で level-wise より深く損失を下げるが過学習しやすい |
| level-wise 成長 | 同じ深さの葉を一斉に分割(XGBoost 既定) | 木が左右対称で過学習しにくいが、無駄な分割も増えやすい |
| GOSS / EFB | 勾配の大きい点を優先抽出し、疎な特徴量を束ねる(LightGBM) | サンプル数・特徴量数を実質削減して高速化 |
ヒストグラム法が高速化の土台です。連続値をあらかじめビンに丸めておくと、各分割候補の利得評価が「ビンごとの G, H の累積和」で済み、ソートも不要になります。leaf-wise 成長は LightGBM の特徴で、木全体を一様に深くするのではなく、最も損失を下げる葉だけを選んで深くするため、限られた葉数で誤差を効率よく削れます。ただし非対称に深くなるぶん過学習しやすく、num_leaves や max_depth での制御が前提になります。
LightGBM の leaf-wise は同じ葉数なら level-wise より表現力が高い反面、num_leaves を上げすぎると一気に過学習します。深さ d の完全二分木の葉数は 2^d なので、num_leaves は 2^max_depth より小さく設定するのが原則です。max_depth だけ絞っても num_leaves が大きいと非対称に深い木ができる点に注意してください。
過学習を抑える:学習率・サンプリング・木の制約
ブースティングは木を足し続ければ訓練損失をいくらでも下げられるため、過学習との戦いが運用の中心になります。主要なハイパーパラメータは、それぞれ過学習を抑える明確な役割を持ちます。
| パラメータ | 役割 | 効果と勘所 |
|---|---|---|
| 学習率 ν(shrinkage) | 各木の寄与を縮小して足す | 小さくすると1本あたりの影響が減り汎化が向上。代わりに必要な木の本数 M が増える |
| 木の本数 M / early stopping | ブースティング回数 | 検証損失が下げ止まったら停止。ν を下げたら M を増やすのが定石 |
| 行サブサンプリング | 各木で訓練行の一部のみ使用(確率的勾配ブースティング) | 木間の相関を下げ分散を低減。バギング的な効果で汎化と速度を両立 |
| 列サブサンプリング | 各木・各分割で特徴量の一部のみ候補にする | 強い特徴量への依存を崩し木を多様化。ランダムフォレスト由来の正則化 |
| max_depth / min_child_weight | 木の複雑さの上限 | 深さと葉の最小ヘシアン和を制限し、過度に細かい分割を防ぐ |
| λ(L2) / γ(葉罰則) | 目的関数内の正則化 | 葉重みを縮め、利得が小さい分割を枝刈りする |
学習率 ν(shrinkage) と木の本数 M はトレードオフです。ν を小さくすると各木の補正が控えめになり汎化は向上しますが、同じ精度に到達するのに多くの木が要ります。実務では「ν を小さめに固定し、検証損失で early stopping して M を自動決定」する形が定番です。列サンプリング(colsample) は各分割で使える特徴量をランダムに絞ることで、支配的な特徴量への過依存を崩し、木の多様性を高めます——これはランダムフォレスト由来の正則化が勾配ブースティングに取り込まれたものです。これらの効きは過学習とバイアス・バリアンスと二重降下の観点で整理すると、なぜ汎化が改善するのかが腑に落ちます。
「GBDT・XGBoost・LightGBM の違いは」と問われたら——GBDT は1次勾配(擬似残差)に木をフィットする一般枠組み、XGBoost は2次(勾配 g とヘシアン h)まで使い正則化項 λ・γ を目的関数に組み込んだ実装、LightGBM はヒストグラム+leaf-wise 成長+GOSS/EFB で大規模データを高速化した実装、と答えます。「関数空間の勾配降下」「ν は勾配降下のステップ幅」「leaf-wise は過学習しやすく num_leaves で制御」がキーワードです。
まとめ
勾配ブースティングは、弱い決定木を逐次的に足し、各ステップで損失の負の勾配(二乗誤差では残差)に新しい木をフィットする——すなわち関数空間での勾配降下として理解できます。XGBoost は損失を2次近似し、勾配とヘシアンで分割利得を解析的に評価しつつ正則化を目的関数へ織り込みました。LightGBM はヒストグラム分割と leaf-wise 成長で大規模データを高速化しています。学習率・行/列サンプリング・木の深さ・正則化係数は、いずれも「足しすぎによる過学習」を抑える役割を分担します。なぜ速いのか・なぜ効くのかを原理から押さえれば、ハイパーパラメータ調整は当てずっぽうではなく、損失と正則化のバランスを動かす意図的な操作になります。
AI/機械学習 Article
勾配ブースティングの原理:GBDT・XGBoost・LightGBMを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
勾配ブースティング
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 6
導入後に効く点
XGBoost は損失を2次までテイラー展開し、勾配 g とヘシアン h で分割の利得を解析的に評価する。さらに正則化項を目的関数に組み込み、葉の重みと木の複雑さを同時に制御する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 6
判断チェックリスト
- 自社の用途が「勾配ブースティング / GBDT」に近いか確認する。
- 強みである「勾配ブースティングは、弱学習器(浅い決定木)を1本ずつ足し、各ステップで現在の予測の損失の負の勾配(GBDT では残差に相当)へ新しい木をフィットする。関数空間での勾配降下として定式化できる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。