10.5 なぜ指数損失なのか — AdaBoostが「正しかった」証拠

損失関数の選択が、究極の分類器への道筋を決める

AdaBoostが使う「指数損失」は、なぜその形なのか? この問いに答えるだけで、AdaBoostが理論上の最強分類器——ベイズ最適分類器——に 直結している深い理由が見えてきます。 指数損失を最小化する関数は何か。その答えを一緒に導きましょう。

損失関数を「選ぶ」とはどういうことか

「機械学習は損失関数の最小化問題だ」とよく言われます。 回帰なら二乗誤差、分類ならクロスエントロピー……。 私たちはほとんど無意識に損失関数を選んでいます。

しかし、本当はここに大きな問いがあります。

「ある損失関数を最小化すると、いったい何が手に入るのか?」

例えば、二乗誤差を最小化すると何が手に入るか考えてみてください。

$$f^*(x) = \arg\min_{f(x)} E\left[(Y - f(x))^2\right] = E[Y|x]$$

最適解は条件付き期待値——つまり「平均を予測する」ことを意味します。 同じ考え方で絶対値損失を最小化すると、最適解は条件付き中央値になります。「真ん中を予測する」わけです。

つまり、損失関数が何かを決めると、「最適解が何になるか」も自動的に決まるのです。 これを「母集団最小化解(population minimizer)」と呼びます。 「母集団」とは「全データの真の分布」のことで、データが無限にあるという理想状況で、 その損失関数を最小化したらどんな関数になるか、という意味です。

3つの損失関数(二乗誤差・絶対値・指数損失)を並べて比較するアニメーション
3つの損失関数を最小化すると、それぞれ異なる「最適解」に到達する

左から「二乗誤差(緑)→平均」「絶対値損失(黄)→中央値」「指数損失(赤)→?」。 指数損失だけ、答えが明らかでありません。

ここで、AdaBoostが使う指数損失について、 同じ問いを立ててみましょう。

$$f^*(x) = \arg\min_{f(x)} E_{Y|x}\left[e^{-Y f(x)}\right] = \; ?$$

二値分類なので $Y \in \{-1, +1\}$ です。 各 $x$ ごとに、$Y$$+1$$-1$ の2つしか取らない期待値を最小化すれば良いだけ。 やってみると——意外な結果が出てきます。

指数損失を「微分して0」にすると何が起こるか

期待損失を $f(x)$ について最小化するなら、 微分して0にすれば良い——高校で習った通りです。やってみましょう。

まず、期待値の中身を $Y$ の値で場合分けして展開します。$Y$$+1$$-1$ しか取らないので、$p(x) = \Pr(Y = +1 | x)$ と置くと:

$$E_{Y|x}\left[e^{-Y f(x)}\right] = e^{-f(x)} \cdot p(x) + e^{+f(x)} \cdot (1 - p(x))$$

$Y=+1$ になる確率 $p$$e^{-f}$$Y=-1$ になる確率 $1-p$$e^{+f}$」の重み付き平均ですね。

これを $f(x)$ で微分して0と置きます:

$$\frac{\partial}{\partial f(x)}\left[e^{-f} \cdot p + e^{+f} \cdot (1-p)\right] = -p(x) \cdot e^{-f(x)} + (1-p(x)) \cdot e^{+f(x)} = 0$$
指数損失を微分してゼロにする過程:最小点から天秤のバランスへ、そして対数オッズが流れ落ちる
損失曲線の最小点でバランスが取れ、対数オッズの半分が結果として流れ落ちる

$p(x) \cdot e^{-f(x)} = (1-p(x)) \cdot e^{+f(x)}$ を変形して両辺の対数を取ると:

$$\log p(x) - f(x) = \log(1 - p(x)) + f(x)$$

$f(x)$ を左辺に集めて2で割ると:

$$f^*(x) = \frac{1}{2} \log \frac{p(x)}{1 - p(x)} = \frac{1}{2} \log \frac{\Pr(Y=+1|x)}{\Pr(Y=-1|x)}$$

驚くべき結果です。これは log-odds(対数オッズ)の半分に他なりません。

ここで:

ロジスティック回帰でも、この量が中心的な役割を果たします。 指数損失の最小化が、ロジットという統計学の根幹概念に直結していたわけです。

なぜ「半分」なのか — 加法モデルの構造から考える

ここで気になる人もいるはずです。

「あれ?ロジスティック回帰では $\log(p/(1-p))$ を直接モデル化するのに、 なぜここでは『半分』なんだろう?」

これは、AdaBoost加法モデル だからです。

AdaBoostは弱学習器を次のように足し合わせていきます:

$$f(x) = \sum_m \alpha_m G_m(x)$$

各弱学習器 $G_m(x) \in \{-1, +1\}$ は強度$\alpha_m$ で予測に貢献します。 最終的な「決定」は $\mathrm{sign}(f(x))$ で行います——$f(x) > 0$ ならクラス +1、$f(x) < 0$ ならクラス -1。

つまりAdaBoostにとって、$f(x)$絶対値はどうでもよく、符号だけが重要なのです。 だから、ロジットの「半分」だろうが「2倍」だろうが、最終判断には影響しません。 式の係数 $\frac{1}{2}$ は、 指数の左右対称性 $e^{-f}$ vs$e^{+f}$ から自然に出てきた数学的な調整係数です。

f*(x)の連続曲線が符号を取られ、0より上は青・下は赤の2領域に変換されるアニメーション
連続値のlog-oddsが符号を取られ、2クラスのベイズ最適分類器になる

肝心なのは、母集団最小化解$f^*(x) = \frac{1}{2} \log \frac{p(x)}{1-p(x)}$符号 です:

つまり、$\mathrm{sign}(f^*(x))$ は 「クラス +1 の確率が 0.5 より大きいか」を返します。

$$\mathrm{sign}(f^*(x)) = \begin{cases} +1 & \text{if } \Pr(Y=+1|x) > 0.5 \\ -1 & \text{if } \Pr(Y=+1|x) < 0.5 \end{cases}$$

これこそが ベイズ最適分類器 です。

「ベイズ最適」とは「事後確率に従って多数派に賭ける」戦略のこと。 確率が高い方のクラスを答えれば、長期的には誤分類の回数が最小になる—— これは情報理論の基本的な結果で、どんなアルゴリズムを使っても、これより誤分類率を小さくすることは原理的に不可能な 「理論上の天井」です。

AdaBoostが目指している到達点が、この理論上の天井そのものだった。 これが10.5節の核心です。

確率にも変換できる — 隠れていたシグモイド

ところで、$f^*(x)$ から逆に$p(x) = \Pr(Y=+1|x)$ を求めるとどうなるでしょう。

$f^*(x) = \frac{1}{2} \log \frac{p(x)}{1 - p(x)}$$p(x)$ について解いてみます。 両辺を2倍して指数を取ると$e^{2f(x)} = \frac{p(x)}{1-p(x)}$。 これを整理すると——

$$\Pr(Y = +1 | x) = \frac{1}{1 + e^{-2 f(x)}}$$
縦に無限に伸びるlog-odds空間のドットが、0から1の間に押し込められてS字シグモイド曲線になるアニメーション
無限大に広がるlog-odds空間が、ゴムのように圧縮されて0から1の確率空間に収まる

これは ロジスティック関数(シグモイド関数)そのものです。

ロジスティック回帰でも、ニューラルネットワークの最終層でも、確率を表現するために必ず登場する、 あの S 字カーブ。$f(x)$ が大きいほど確率は 1 に近づき、 小さいほど 0 に近づきます。

つまり AdaBoost の出力 $f(x)$ は、それ自体は単なる「重み付き多数決の合計値」のはずなのに、 無限のデータと無限の弱学習器があれば、シグモイド変換を1つかますだけで確率になる—— 指数損失の最小化はそういう性質を内包していたのです。

AdaBoost は確率モデルではない、ヒューリスティックなアルゴリズムだ—— そう長い間思われていました。しかしこの導出は、その印象を真っ向から覆します。 AdaBoost は:

  1. アルゴリズム的には「重みを更新して弱学習器を足す」だけ
  2. 統計的には「ロジットを推定している」
  3. 結果としてベイズ最適分類器」になる

この3つが、実は 同じ操作の3つの顔 だった、ということです。

ロジスティック損失との「双子の関係」

ここまで来ると、もう一つ気になることがあります。

「同じロジットを最適解に持つ損失関数は、他にもあるのでは?」

その通りです。代表例が 二項負対数尤度(ロジスティック損失)です:

$$L(y, f(x)) = \log\left(1 + e^{-2 Y f(x)}\right)$$

驚くべきことに、これも母集団最小化解は指数損失と全く同じ$f^*(x) = \frac{1}{2} \log(p/(1-p))$ になります。

つまり、無限データの理想世界では、指数損失とロジスティック損失は同じ関数を学習しているのです。

指数損失(赤)とロジスティック損失(緑)を同一座標系で比較。誤分類側(左)で発散の度合いが大きく異なる
横軸はマージン yf(x)。右(正分類)では2曲線は近いが、左(誤分類)では指数損失が急激に発散する

ではどう違うのか?それは「有限データでの振る舞い」、 特に 誤分類された点に対する反応の激しさ です。

横軸 $y f(x)$(マージン)を考えてみてください:

指数損失$y f(x)$ が大きく負(=大きく外れた誤分類)になると、$e^{-yf(x)}$爆発的に増えます。 一方、ロジスティック損失は $\log(1 + e^{-2yf(x)})$ なので、 誤分類が深まっても 線形的にしか増えません

この差は、ノイズや誤ラベルが含まれるデータで決定的になります。 指数損失は外れ値に強く引っ張られ、AdaBoost のパフォーマンスを下げる原因になるのです。 これが次のチャプター「損失関数とロバストネス」につながる伏線です。

このチャプターで見たことを整理

  1. 損失関数は最適解を決める:二乗誤差なら平均、絶対値なら中央値、 そして指数損失なら log-oddsの半分
  2. 指数損失の最適解はロジット$f^*(x) = \frac{1}{2} \log \frac{p(x)}{1-p(x)}$
  3. 符号を取るとベイズ最適分類器$\mathrm{sign}(f^*(x))$ は誤分類率の理論上の最小値を達成する。
  4. 逆変換で確率が出る$p(x) = 1 / (1 + e^{-2f(x)})$ は典型的なシグモイド関数。
  5. ロジスティック損失と双子:母集団最適解は同じだが、外れ値への耐性が違う。

AdaBoostは「ヒューリスティックな重み更新法」ではなく、 「統計的に意味のある損失関数の貪欲最適化」だった。 指数損失を選ぶことが、ベイズ最適分類器という 理論上の天井に至る正しい道筋だった——これが10.5節が伝える、もっとも重要なメッセージです。