5つの学習アルゴリズムを訓練した。テスト精度はそれぞれ83%, 85%, 81%, 84%, 82%。あなたなら、どれを使う?
教科書の答えは「85%の一番強いのを選べ」。ところが現実はもっと面白い。5つ全部を混ぜたら87%になることがあるのだ。1つも捨てない方が、結果として強くなる。
このページでは、「モデル平均化(Model Averaging)」「委員会法(Committee Methods)」「Stacking(積み重ね一般化)」という3つのアプローチを学ぶ。共通する哲学は単純だ——「最良の1つ」を選ぶより、「みんなで決める」方が、たいてい賢い。
機械学習の入門書はこう教える。「複数のモデルを訓練し、交差検証で一番良いものを選びなさい」。これは合理的だ。だが、ここに小さな疑問がある。
選ばれた1つを除いた残りのモデルは、本当にゴミなのだろうか?
実際の競技プログラミング(Kaggle等)では、上位陣のほぼ全員が「複数モデルを組み合わせた予測」を提出する。1つのモデルが他より少しだけ優れていても、別のモデルが異なる種類の間違いを犯しているなら、両方の意見を聞いた方が結果として正確になるからだ。
医者の世界で「セカンドオピニオン」が重視されるのと同じ理屈である。同じ症状でも、外科医と内科医では見方が違う。両方の意見を統合した方が、片方を信じきるより正しい診断に近づく。

機械学習でも候補となるモデル群を $\mathcal{M}_1, \mathcal{M}_2, \ldots, \mathcal{M}_M$ と用意する。これらは:
のどちらでもよい。問題は——どう組み合わせるかだ。
「複数のモデルを平均する」と言ったとき、最も原理的な方法はベイズ統計から来る。
まず用語を1行ずつ。
データ $\mathbf{Z}$ を見たうえで、知りたい量(例えば未来の予測値)$\zeta$ がどんな分布に従うか?を考える。すると:
この式は怖そうに見えるが、日本語に訳すとこうだ。
「$\zeta$ の予測 = 各モデルが出す予測を、そのモデルが正しい確率(事後確率)で重み付けして足し合わせたもの」
つまり、モデル $\mathcal{M}_m$ が「真である確率」を $\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$(事後確率)として求め、その確率で各モデルの予測を加重平均する。これを ベイズモデル平均(Bayesian Model Averaging, BMA) という。
期待値だけ抜き出せば、
各モデルの予測を、そのモデルの信頼度に応じて重み付けする。自信のあるモデルには大きな重み、自信のないモデルには小さな重み。これがベイズ流の「組み合わせ方」だ。

問題は、$\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$ を計算するには各モデルの事前分布や尤度の積分が必要で、現実には非常に難しいことだ。そこで実用上は BIC(ベイズ情報量基準) という近似式で重みを決めることが多い(詳細は7.7節)。ここでは「BIC で重みを計算できる」とだけ覚えておけば十分だ。
ベイズの定理を用いて、モデルの事後確率は次のように計算できる:
ここで $\theta_m$ はモデル $\mathcal{M}_m$ のパラメータ。$\mathrm{Pr}(\mathcal{M}_m)$ はモデルの事前確率、積分の中身は「パラメータの全ての可能性についてデータが出る確率を足したもの」(周辺尤度)。この積分はほとんどの場合解析的に解けず、BIC や MCMC で近似する。
ベイズモデル平均は美しい。だが計算が重い。
そこで思いきってこう仮定する——「全部のモデルは等しく正しい」。つまり全ての $\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z}) = 1/M$ とする。すると:
ただの算術平均だ。これを 委員会法(Committee Method) という。
委員会のメンバーが対等な立場で発言し、1人1票で多数決する。それだけ。シンプルだが、驚くほど効く場合がある。

委員会法が機能する直感はこうだ。各モデルが独立して異なる種類の誤差を出すなら、平均することで誤差が打ち消し合う。ノイズが多数の独立な観測値の平均で小さくなるのと同じ原理である。
ただし注意点がある。全てのモデルが同じ間違いをするなら(例えば全員が同じデータで訓練し同じバイアスを持つなら)、平均してもバイアスは消えない。メンバーの多様性こそが委員会法の生命線だ。
バギング(8.7節)はこの委員会法の一種と見ることができる。同じ学習アルゴリズムを異なるブートストラップサンプルで訓練した複数のモデルを、均等重みで平均する——これはまさに委員会法の発想だ。
ここで重要な定理を紹介する。頻度論的(フリークエンティスト)視点——「同じ実験を繰り返したとき平均的にどうなるか」という見方——から、モデル平均がなぜ機能するのかを示す結果だ(対義語はベイズ的視点で、Section 2 で扱った)。
予測 $\hat{f}_1(x)$, $\hat{f}_2(x)$, ..., $\hat{f}_M(x)$ が手元にあるとき、二乗誤差を最小化する重みベクトル $\mathbf{w}$ を求めよう:
これは「予測ベクトルを $\hat{F}(x) = [\hat{f}_1(x), \ldots, \hat{f}_M(x)]^T$ と並べ、$Y$ をその線形結合で予測する母集団線形回帰」に他ならない。解は:
そして次が重要な不等式だ:
最後の $\forall m$ は「任意の $m$ について」つまり「どの単一モデル $m$ を選んだとしても」という意味だ。日本語に訳すと——「複数モデルの最適な線形結合の誤差は、どの単一モデルの誤差以下である」。

セカンドオピニオンを取り入れた診断が、1人の医者の判断より平均的に正確になるのと同じように、複数モデルの最適な組み合わせは決して単一モデルより悪くなることはない(母集団レベルでは)。
これは数学的に証明された保証だ。直感的にもうなずける。なぜなら「最適な重み」のうち1つを1に、他を0にすれば、それは単一モデルになる。最適化問題の解は、その中で最良のものに少なくとも等しい。
ここまでで分かったこと——最適な重みベクトル $\hat{\mathbf{w}}$ さえ手に入れば、組み合わせは単一モデルより悪くならない(Section 4の不等式)。問題は、その最適な重みをどうやって求めるかだ。
最も素朴な発想は、訓練データに対して回帰を解くことだ:
しかし、これには罠がある。
例えば、$\hat{f}_m(x)$ を「変数 $m$ 個までの最良サブセット回帰」とする。すると最大モデル $\hat{f}_M(x)$ は他のモデルを完全に包含する。訓練データに対しては最大モデルが最も誤差小さく、線形回帰は $\hat{w}_M = 1$, 他全部 $0$ という解を出す。これでは過学習——訓練データには完璧にフィットするが、新しいデータには弱くなる現象——そのものだ。

要するに、訓練データ上の評価では「複雑なモデル」が不当に高評価される。Section 4 の数学的保証は「最適な重み」の話だったが、その最適な重みを正直に求めるのは、思ったより難しい。
問題は「訓練データで重みを決めると、複雑なモデルが優遇される」ことだった。解決策は単純だが鮮やかだ。
各データ点 $x_i$ について、その点を除いて訓練したモデルの予測を使う
つまり、Leave-One-Out(一個抜き)交差検証だ。$\hat{f}_m^{-i}(x)$ を「$i$ 番目のデータを除いて訓練したモデル $m$ の予測」と書く。Stacked Generalization(Stacking) は次の最適化問題を解く:
そして最終予測は、全データで再訓練したモデル $\hat{f}_m(x)$ を、学んだ重み $\hat{w}_m^{\mathrm{st}}$ で組み合わせる:

なぜこれが上手くいくか?$\hat{f}_m^{-i}(x_i)$ は「$x_i$ を見たことがないモデル」の予測だから、未来の入力に対する予測の正直な代理になる。複雑すぎるモデルが訓練データに過学習しても、Leave-One-Out 予測では正直に悪い値が出る。だから訓練データだけでは見えなかった真の優劣が明らかになる。
実用上はさらに2つの制約を加えると性能が安定する:
これにより、最適化は凸二次計画問題(目的関数が碗型の滑らかな形をしており、局所最適解が大域最適解に一致する)になり、解は安定する。また重みを「モデルの事後確率」として解釈できる利点もある。
先ほどのStacking最適化式(Section 6の式)には、知っておくと面白い事実が隠れている。おさらいすると、Stackingは各データ点を順番に「1点除外」して評価する LOO-CV(Leave-One-Out 交差検証)で重みを学んでいた。
もし重み $\mathbf{w}$ に「1つだけ1、残りは0」という極端な制約を課したらどうなるか?
それは「1つのモデルだけを選ぶ」ことに他ならない。そして最適化問題は——Leave-One-Outクロスバリデーション誤差が最小のモデルを選べ——という命令に化ける。これは伝統的なモデル選択そのものだ。
つまり:

「最良の1つを選ぶ」のではなく「混ぜる」自由を持つことで、Stackingはモデル選択より柔軟になる。だからStackingはLOO-CVによるモデル選択を支配する——少なくとも予測性能の面で。
ただし代償もある。複数のモデルを保持し、重み付けで組み合わせるため、解釈性は低くなる。「これは血圧と体重の線形和で決まる」という単純な説明はできず、「複雑なモデル群の重み付き平均の出力」になるからだ。
今日学んだ3つのモデル組み合わせ法を整理しよう。
| 手法 | 重みの決め方 | 計算コスト | 強み | 弱み |
|---|---|---|---|---|
| 委員会法 | 全モデル均等 (1/M) | 最小 | 単純・堅牢 | モデルの優劣を反映できない |
| BMA | 事後確率 Pr(M|Z) | 大(積分) | 理論的に最適 | 事前分布の設定が難しい |
| Stacking | LOO-CVで学習 | 中(CV分) | データ駆動で柔軟 | 解釈性が下がる |
実務での選び方の指針はこうだ。

8.7節までで学んだバギングとも比較しておこう。バギングは「同じ学習アルゴリズムを違うブートストラップ標本で訓練」して平均する手法だった。一方でモデル平均化は「異なる学習アルゴリズムを組み合わせる」点で根本的に異なる。Random Forest、勾配ブースティング、ニューラルネット——全く異なる手法を1つの強力な予測器に統合できる。
最後に、Stackingのアイデアはさらに拡張できる。重み付け部分自体を線形回帰ではなく別の機械学習器にしてもよい。重みが入力 $x$ に依存して変化する「ローカルStacking」も可能だ。「学習器を学習器で積み重ねる(Stacking)」というアイデアは、深層学習のメタ学習や、現代のアンサンブル手法の根本思想として今も生き続けている。
全て次の形をしている:
異なるのは $w_m$ の決め方だけだ。
「混ぜる」という1つの思想が、3つの異なる戦略を生む。そして混ぜることは、母集団レベルで決して悪くならない。最良の1つに固執するより、みんなで決める方が、たいてい賢い——これがモデル平均化の本質だ。