10.4 指数損失とAdaBoost
神秘の公式はどこから来たのか
AdaBoostには、いくつかの「謎の公式」があります。 なぜ信頼度はlog((1-err)/err)なのか?なぜ重みは指数関数で更新するのか? 実は、これらすべてが「たった1本の数式を最小化する」という操作から自然に流れ落ちます。 その数式こそが「指数損失」です。
「なぜ?」が積み重なる公式群
前の章で、AdaBoost.M1のアルゴリズムを学びました。一言で言えば、
「間違えたデータを目立たせ、その目立つデータを次の弱学習器に重点的に学ばせる。 それを何度も繰り返して多数決を取る」
というアルゴリズムです。手順は単純で、重みを増やしては弱学習器を学習させ、それを重ね合わせるだけ。
しかし、よく見るといくつもの「なぜ?」が浮かびます。
疑問1: 信頼度の式
なぜ対数が出てくるのか?なぜこの形なのか?
疑問2: 重み更新の式
なぜ「指数関数」を使うのか?線形に増やしてはダメなのか?
疑問3: 最終予測の式
なぜ加重「多数決」なのか?

AdaBoostを最初に提案したFreundとSchapireは、これらをPAC学習理論という別の動機から導きました。 式が綺麗に出るのは「偶然」のようにも見えます。
ところがFriedmanらは2000年、こう言ったのです:
「これらの公式はすべて、たった一つの『目的関数』を最適化した結果として自然に出てくる」
その「目的関数」が、これから紹介する 指数損失(exponential loss) です。
指数損失 — 「外れたら大爆発」の罰金
まず、これから主役になる「指数損失」を見ましょう。
二値分類問題で、ラベル $y \in \{-1, +1\}$ と 予測スコア $f(x) \in \mathbb{R}$(実数値)を考えます。
ここで重要:$f(x)$ は$\{-1, +1\}$ そのものではなく、実数値の「信頼度スコア」です。 「$f(x)$ が正で大きいほど『クラス $+1$ だ』と強く主張」 「負で大きいほど『クラス $-1$ だ』と強く主張」という具合。 最終的な分類予測は $\text{sign}(f(x))$ で決めるので、符号だけが分類結果になります。
このとき、指数損失は次の単純な形をしています:
たったこれだけです。
ここで重要な量が マージン $y \cdot f(x)$:
- $y \cdot f(x) > 0$ なら予測の符号が正しい(正分類)
- $y \cdot f(x) < 0$ なら予測の符号が誤り(誤分類)
- マージンが大きいほど「自信を持って正解」、マージンが大きく負ならば「自信を持って間違い」
指数損失は、このマージンに対して指数的に減少・増加します。 マージンが大きい正の値では損失はゼロに急速に近づき(罰金ゼロ)、 マージンが負の方向では損失は爆発的に増加します(重い罰金)。
つまり指数損失は「間違えた時にとんでもなく重い罰金を課す」損失関数です。 これは「自信を持って間違える」ことを極端に嫌います。

なぜこの形が嬉しいのでしょうか?理由は2つあります:
- 計算が綺麗:指数関数の積は和になるので、 後で重みが綺麗に分解できます(これが後の導出の核心です)
- 滑らか:階段関数(0-1損失)と違って微分可能なので、最適化に使えます
指数損失の定義をもう一度確認しましょう:
この式が言っているのは「マージン $yf(x)$ が大きいほど損失は小さく、 負ならば爆発的に大きくなる」ということ。 極端な誤分類を強く罰する設計です。
舞台設定 — 前向き段階的加法モデリングを当てはめる
さて、いよいよ謎を解いていきましょう。
私たちが作ろうとしているのは、複数の弱学習器の重み付き和:
ここで $G_m(x) \in \{-1, +1\}$ は弱分類器、$\beta_m$ はその係数です。
これを一気に最適化するのは難しいので、前向き段階的加法モデリングという戦略を取ります:
「一段ずつ、$(\beta_m, G_m)$ を貪欲に追加する。一度追加したものは絶対に変更しない」
ここが重要です。第 $m$ ステップに来た時点で、 既に決まっている
は凍結された確定値として扱います。 私たちが選ぶのは次の1段 $(\beta_m, G_m)$ だけ。
その選び方は単純で、指数損失の総和を最小化するだけ:
ここで決定的な観察があります。指数の中の$-y_i f_{m-1}(x_i)$ は確定済みなので、 各データ点ごとに「もう値が決まっている定数」です。$\beta$ や $G$ には依存しません。
そこで、指数法則 $e^{a+b} = e^a \cdot e^b$ を使って、 指数を分解します:
第1項を $w_i^{(m)}$ とおくことで、 式が一気にシンプルになります。

ここに 重み $w_i^{(m)}$ が自然に登場したのです!
これは天才的な仕組みです。$w_i^{(m)}$ は「これまでの予測 $f_{m-1}(x_i)$ で$i$ 番目のデータがどれだけ外れているか」を測る量であり、 これまで誤分類されてきたデータほど $w_i^{(m)}$ は大きくなります。 次の弱学習器は、自動的にそれらに重点を置いて学習するわけです。
「重み」という概念は後付けで導入されたのではなく、指数損失の構造から必然的に湧き出てきたものなのです。
ステップ $m$ で解くべき問題をまとめると:
ここで $w_i^{(m)} = \exp(-y_i f_{m-1}(x_i))$。 この $w_i^{(m)}$ は「これまでの累積誤差の重み」を表しており、$\beta$ や $G$ には依存しません—— つまり最適化の前から既に決まっている定数です。
第1幕 — 弱学習器の最適な選び方
これで舞台は整いました。次に、目的関数を2段階で攻略します。
第1段階:「$\beta > 0$ を固定したとき、 最適な $G_m$ は何か?」
$y_i G(x_i) \in \{-1, +1\}$ という性質を使うと、 目的関数は次のように分解できます:
つまり「正解した側」には $e^{-\beta}$(小さい数)が掛かり、 「誤分類した側」には $e^{\beta}$(大きい数)が掛かります。
ここでさらに式変形すると:
第2項 $e^{-\beta} \sum_i w_i^{(m)}$ は$G$ に依存しない定数。 第1項の係数 $(e^{\beta} - e^{-\beta})$ は$\beta > 0$ の下で正。
したがって、目的関数を最小化する $G$ は「重み付き誤分類数を最小化する分類器」に他なりません:
ここで重要なポイント:重み $w_i^{(m)}$ は固定。弱学習器は 「今の重み付きデータで、最も良い分類器」を選ぶだけです。 これがAdaBoostの「ステップ(a)」と完全に一致します。

第1ステップで得られる最適弱学習器:
これは「現在の重み $w_i^{(m)}$ の下での加重誤分類数を最小化する分類器」。AdaBoostの手順そのものです。
第2幕 — 係数の最適な値
弱学習器 $G_m$ が決まったので、 次は最後の謎、係数 $\beta_m$ の決定です。
目的関数を $\beta$ について微分してゼロと置きます。 先ほどの分解式:
ここで加重誤差率を導入します:
これは「重み付き全体の中で誤分類が占める比率」。$\sum_i w_i^{(m)} = W$ と書くと:
これを $\beta$ で微分してゼロと置くと、$\frac{d}{d\beta}(e^\beta - e^{-\beta}) = e^\beta + e^{-\beta}$、$\frac{d}{d\beta} e^{-\beta} = -e^{-\beta}$ を使って:
ここから、$W > 0$ なのでカッコの中身がゼロ、 両辺を $e^{-\beta}$ で割ると:
整理して:
両辺の対数を取って2で割ると、ついに——
これがAdaBoostにおける $\alpha_m$ の正体です。 厳密に言うと、$\alpha_m = 2 \beta_m$ という関係です。 表記の慣習の違いで中身は全く同じものを別の縮尺で測っているだけです。

この $\beta_m$ の形には深い意味があります:
- $\text{err}_m < 0.5$(半分より良い)なら$\beta_m > 0$(票として活かす)
- $\text{err}_m = 0.5$(ランダムと同じ)なら$\beta_m = 0$(無視)
- $\text{err}_m > 0.5$(半分より悪い)なら$\beta_m < 0$(符号を反転して使う)
- $\text{err}_m \to 0$(完璧)なら$\beta_m \to \infty$(絶対的な信頼)
つまり、信頼度は誤差率に応じて自動的にスケーリングされるのです。
第2ステップで得られる最適係数:
誤差率 $\text{err}_m$ が小さいほど $\beta_m$ は大きくなり、 その弱学習器に強い発言権が与えられます。
大団円 — 重み更新の自動生成
最後のピースです。$\beta_m$ と$G_m$ が決まったので、モデルを更新します:
すると次のステップの重み$w_i^{(m+1)} = \exp(-y_i f_m(x_i))$ は:
ここで $y_i, G_m(x_i) \in \{-1, +1\}$ なので、$y_i G_m(x_i)$ は「正解なら $+1$、 誤分類なら $-1$」という値を取ります。 場合分けして表にしてみると:
| 状況 | $y_i G_m(x_i)$ | $-y_i G_m(x_i)$ | $I(y_i \neq G_m(x_i))$ | $2I(\cdot) - 1$ |
|---|---|---|---|---|
| 正解 | $+1$ | $-1$ | $0$ | $-1$ |
| 誤分類 | $-1$ | $+1$ | $1$ | $+1$ |
「$-y_i G_m(x_i)$」と「$2I(y_i \neq G_m(x_i)) - 1$」 の列が完全に一致していることに注目してください。つまり:
代入して整理すると:
ここで $\alpha_m = 2 \beta_m = \log\frac{1-\text{err}_m}{\text{err}_m}$ です。 最後の因子 $e^{-\beta_m}$ はすべての重みを同じ値で掛け算するだけ。 比率には影響しないので最適化に対しても無関係です(あるいはAdaBoostの正規化ステップに吸収されます)。
これで本質的に得られる更新規則は:
完全にAdaBoost.M1の更新規則そのものです。

つまり——
AdaBoostとは、指数損失を貪欲に最小化する前向き段階的加法モデルそのものだった。
「謎の公式」だったすべてが、たった1本の数式
から自動的に流れ落ちる。これがFriedmanらの発見した美しさです。
最終的な重み更新規則:
これがAdaBoost.M1のアルゴリズムにおける重み更新ステップ(ステップ2(d))と一致します。
振り返り — なぜこの発見が重要なのか
ここまでで、AdaBoostが「指数損失の貪欲最小化」と等価であることを示しました。 これは単なる数学的な好奇心の話ではありません。
意味1: AdaBoostに「統計的な顔」が与えられた
それまでAdaBoostは「学習理論」の中で論じられていました。指数損失との等価性が見つかったことで、 「これは関数空間における勾配降下である」「指数損失の母集団最小化解は対数オッズである」 といった、統計学的な解釈が可能になりました。
意味2: 一般化への扉が開いた
「指数損失」を「他の損失関数」に取り換えれば、別のブースティングアルゴリズムが作れる—— これがLogitBoost(二項対数尤度)やL2Boost(二乗誤差)、さらに勾配ブースティングへと発展していく原動力になりました。
意味3: 弱点も見えた
指数損失はマージンが負に大きくなると爆発的に増加します。 これは「外れ値」や「ラベルノイズ」に脆弱だということです。 次のセクション(10.5、10.6)では、この問題と、よりロバストな損失関数の話に進みます。

下のグラフで注目してほしいのは:誤分類率が0になっても、指数損失はまだ下がり続けるという点です。 AdaBoostは単に「誤分類数」を減らしているのではなく、「自信を持って正解する」ことを追求しているのです。
訓練データ上の指数損失の平均:
これが反復 $m$ につれて単調に減少する—— AdaBoostは「指数損失の貪欲降下法」だからこそ、この単調性が保証されます。 誤分類率が0になっても、各データ点のマージンを増やすことで指数損失はさらに下げられます。
まとめ — AdaBoostの4つの公式の起源
このページで明らかになったのは、次の一文で要約できます:
AdaBoost.M1は、指数損失 $L(y, f(x)) = e^{-yf(x)}$ を最小化する 前向き段階的加法モデルそのものである。
| AdaBoostの公式 | 起源 |
|---|---|
| 重み $w_i^{(m)} = e^{-y_i f_{m-1}(x_i)}$ | 指数の積の分解 |
| 弱学習器選択 = 加重誤差最小化 | $\beta$ 固定で $G$ について最適化 |
| $\alpha_m = \log\frac{1-\text{err}_m}{\text{err}_m}$ | $G$ 固定で $\beta$ について微分=0 |
| 重み更新 $w_i \leftarrow w_i e^{\alpha_m I(\text{誤})}$ | 指数の積から自然に出る |
「天才の閃き」と見えていたものが、実は 「シンプルな目的関数 + 貪欲最適化」という枠組みに過ぎなかった—— この発見こそが、その後のブースティング研究を爆発的に進めた原動力です。
次のセクション(10.5)では、「なぜ指数損失を使うのか?」という根源的な問いに進みます。 指数損失を最小化することは、実は 対数オッズ比 $\frac{1}{2}\log\frac{P(Y=1|x)}{P(Y=-1|x)}$ を推定することと等価—— これがAdaBoostに「確率モデル」としての解釈を与えてくれます。