前提条件
- ラベル \( y_i \in \{0,1\} \)
- モデルのスコア(ロジット値)を \( F_i \) とし、予測確率はシグモイド関数で変換:
- 損失関数(Log Loss): \[ L(y_i, p_i) = -[ y_i \log p_i + (1-y_i) \log (1-p_i) ] \]
損失関数の微分(勾配)
損失関数の勾配 \( g_i \) は L を \( F_i \) で微分して求める。チェーンルールを使うと、
\[ \frac{\partial L}{\partial F_i} = \frac{\partial L}{\partial p_i} \cdot \frac{\partial p_i}{\partial F_i} \]各項は、
\[ \frac{\partial L}{\partial p_i} = -\frac{y_i}{p_i} + \frac{1-y_i}{1-p_i} \] \[ \frac{\partial p_i}{\partial F_i} = p_i (1 - p_i) \]よって、
\[ \begin{align*} g_i & = \frac{\partial L(y_i, F_i)}{\partial F_i} \\ & = \left( -\frac{y_i}{p_i} + \frac{1-y_i}{1-p_i} \right) \cdot p_i (1 - p_i) \\ & = -y_i (1 - p_i) + (1 - y_i) p_i \\ & = p_i - y_i \end{align*} \]
つまり、勾配 \( g_i \) は「予測確率と正解ラベルの差」となる。
この勾配の負号(\(-g_i\))が疑似残差として使われ、回帰木の目的変数となる。
直観的解釈
ロジット値 \( F \) はシグモイド関数を通して確率 \( p \) に変換される。
\( F \) を正方向に増やすと予測確率 \( p \) も1に近付く。逆に、\( F \) を負方向に増やすと0に近付く。
- F = 2 → p ≈ 0.88
- F = 0 → p = 0.5
- F = -2 → p ≈ 0.12
「\( p - y \)」という勾配が、「今のモデル予測\( p \)が正解\( y \)より高いか低いか」を表し、Fの上げ下げ・量を直接教えてくれる量となる。
- p = 0.9, y = 1 → g = -0.1(h=0.1)
- p = 0.1, y = 0 → g = +0.1(h=-0.1)
\( p < y \) なら「Fを上げる」ことで予測確率も上げる
\( p > y \) なら「Fを下げる」ことで予測確率も下げる
計算例:5データ点による勾配ブースティング(2値分類)
前提条件- 入力 \( x_1 \sim x_5 \),ラベル \( y_1 \sim y_5 \)
- \( y = [1, 0, 1, 0, 1] \)
- 初期ロジット値 \( F_i^{(0)} = 0 \) (全データ)
- 学習率 \( \eta = 0.1 \) (計算簡単化のため)
初期ロジット値
\( F_i^{(0)} = 0 \) (i=1〜5)
初期予測確率
\[ p_i^{(0)} = \sigma(F_i^{(0)}) = \frac{1}{1 + e^{0}} = 0.5 \]
Step 2. 勾配および疑似残差の計算
| i | \( y_i \) | \( p_i^{(0)} \) | \( g_i^{(0)} \) | 疑似残差 \( -g_i^{(0)} \) |
|---|---|---|---|---|
| 1 | 1 | 0.5 | -0.5 | +0.5 |
| 2 | 0 | 0.5 | +0.5 | -0.5 |
| 3 | 1 | 0.5 | -0.5 | +0.5 |
| 4 | 0 | 0.5 | +0.5 | -0.5 |
| 5 | 1 | 0.5 | -0.5 | +0.5 |
Step 3. 疑似残差を目的変数に回帰木(弱学習器)学習
- 単純化して、\( y=1 \) のデータには \( h(x)=+0.5 \)、\( y=0 \) のデータには \( h(x)=-0.5 \) を出力する回帰木を仮定(本来は特徴量で分岐)。
Step 4. モデルの更新
\[
F_i^{(1)} = F_i^{(0)} + \eta h_i^{(0)}
\]
| i | \( h_i^{(0)} \) | \( F_i^{(0)} \) | \( F_i^{(1)} \) |
|---|---|---|---|
| 1 | +0.5 | 0 | 0.05 |
| 2 | -0.5 | 0 | -0.05 |
| 3 | +0.5 | 0 | 0.05 |
| 4 | -0.5 | 0 | -0.05 |
| 5 | +0.5 | 0 | 0.05 |
Step 5. 新しい確率
\[
p_i^{(1)} = \sigma(F_i^{(1)}) = \frac{1}{1 + e^{-F_i^{(1)}}}
\]
- \( F = 0.05 \) → \( p \approx 0.5125 \)
- \( F = -0.05 \) → \( p \approx 0.4875 \)
| i | \( F_i^{(1)} \) | \( p_i^{(1)} \) |
|---|---|---|
| 1 | 0.05 | 0.5125 |
| 2 | -0.05 | 0.4875 |
| 3 | 0.05 | 0.5125 |
| 4 | -0.05 | 0.4875 |
| 5 | 0.05 | 0.5125 |
Step 6. 新しい疑似残差
\[
g_i^{(1)} = p_i^{(1)} - y_i
\]
| i | \( y_i \) | \( p_i^{(1)} \) | \( g_i^{(1)} \) | 疑似残差 |
|---|---|---|---|---|
| 1 | 1 | 0.5125 | -0.4875 | +0.4875 |
| 2 | 0 | 0.4875 | +0.4875 | -0.4875 |
| 3 | 1 | 0.5125 | -0.4875 | +0.4875 |
| 4 | 0 | 0.4875 | +0.4875 | -0.4875 |
| 5 | 1 | 0.5125 | -0.4875 | +0.4875 |
Step 7. (以降のステップも同様)
- この新しい疑似残差を目的変数として、再度回帰木(弱学習器)を学習しロジット値を更新。
- \(h_i^{(1)} = +0.4875\)(y=1のデータ)、\(-0.4875\)(y=0のデータ)
| i | \( h_i^{(1)} \) | \( F_i^{(1)} \) | \( F_i^{(2)} \) |
|---|---|---|---|
| 1 | +0.4875 | 0.05 | 0.09875 |
| 2 | -0.4875 | -0.05 | -0.09875 |
| 3 | +0.4875 | 0.05 | 0.09875 |
| 4 | -0.4875 | -0.05 | -0.09875 |
| 5 | +0.4875 | 0.05 | 0.09875 |
Step 8. 新しい確率の算出
この流れを何度も繰り返すことで、予測確率 p が徐々に正解ラベルに近付く。
学習率が小さいほど、各ステップの修正は少なくなり安定するが、収束には時間がかかる。
- \( F = 0.09875 \) の場合:\( p = \frac{1}{1+e^{-0.09875}} \approx 0.5247 \)
- \( F = -0.09875 \) の場合:\( p = \frac{1}{1+e^{0.09875}} \approx 0.4753 \)
この流れを何度も繰り返すことで、予測確率 p が徐々に正解ラベルに近付く。
学習率が小さいほど、各ステップの修正は少なくなり安定するが、収束には時間がかかる。
0 件のコメント:
コメントを投稿