8.8 モデル平均化とStacking — モデルを「捨てる」のではなく「混ぜる」

5つの学習アルゴリズムを訓練した。テスト精度はそれぞれ83%, 85%, 81%, 84%, 82%。あなたなら、どれを使う?

教科書の答えは「85%の一番強いのを選べ」。ところが現実はもっと面白い。5つ全部を混ぜたら87%になることがあるのだ。1つも捨てない方が、結果として強くなる。

このページでは、「モデル平均化(Model Averaging)」「委員会法(Committee Methods)」「Stacking(積み重ね一般化)」という3つのアプローチを学ぶ。共通する哲学は単純だ——「最良の1つ」を選ぶより、「みんなで決める」方が、たいてい賢い

この章で得るもの

  • 「最良のモデルを1つ選ぶ」ことが最適でない理由が数学的・直感的に理解できる
  • 委員会法、ベイズモデル平均、Stackingの3つの違いと使い分けがわかる
  • Stackingがモデル選択の一般化であるという深い洞察が得られる

「最良の1つを選ぶ」は本当に最良か?

機械学習の入門書はこう教える。「複数のモデルを訓練し、交差検証で一番良いものを選びなさい」。これは合理的だ。だが、ここに小さな疑問がある。

選ばれた1つを除いた残りのモデルは、本当にゴミなのだろうか?

実際の競技プログラミング(Kaggle等)では、上位陣のほぼ全員が「複数モデルを組み合わせた予測」を提出する。1つのモデルが他より少しだけ優れていても、別のモデルが異なる種類の間違いを犯しているなら、両方の意見を聞いた方が結果として正確になるからだ。

医者の世界で「セカンドオピニオン」が重視されるのと同じ理屈である。同じ症状でも、外科医と内科医では見方が違う。両方の意見を統合した方が、片方を信じきるより正しい診断に近づく。

単一モデル選択と複数モデル平均化の精度比較
左:5つのモデルから1つだけを選択。右:5つのモデルの予測を平均化。平均化の方が真の関数(緑)に近い

機械学習でも候補となるモデル群を $\mathcal{M}_1, \mathcal{M}_2, \ldots, \mathcal{M}_M$ と用意する。これらは:

のどちらでもよい。問題は——どう組み合わせるかだ。

ベイズモデル平均 — 「正しい確率」で重み付けする

注: このセクションはベイズ統計の用語が多めです。難しければ「各モデルにそれぞれ信頼度に応じた重みを付けて足す」という一文だけ覚えて、Section 3 へ飛んでも構いません。

「複数のモデルを平均する」と言ったとき、最も原理的な方法はベイズ統計から来る。

まず用語を1行ずつ。

データ $\mathbf{Z}$ を見たうえで、知りたい量(例えば未来の予測値)$\zeta$ がどんな分布に従うか?を考える。すると:

$$\mathrm{Pr}(\zeta | \mathbf{Z}) = \sum_{m=1}^{M} \mathrm{Pr}(\zeta | \mathcal{M}_m, \mathbf{Z}) \, \mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$$

この式は怖そうに見えるが、日本語に訳すとこうだ。

$\zeta$ の予測 = 各モデルが出す予測を、そのモデルが正しい確率(事後確率)で重み付けして足し合わせたもの」

つまり、モデル $\mathcal{M}_m$ が「真である確率」を $\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$(事後確率)として求め、その確率で各モデルの予測を加重平均する。これを ベイズモデル平均(Bayesian Model Averaging, BMA) という。

期待値だけ抜き出せば、

$$\mathrm{E}(\zeta | \mathbf{Z}) = \sum_{m=1}^{M} \mathrm{E}(\zeta | \mathcal{M}_m, \mathbf{Z}) \, \mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$$

各モデルの予測を、そのモデルの信頼度に応じて重み付けする。自信のあるモデルには大きな重み、自信のないモデルには小さな重み。これがベイズ流の「組み合わせ方」だ。

3つのモデル予測が事後確率で重み付けされ合成される様子
3つのモデルの予測(青・橙・緑)が、それぞれの事後確率(0.6, 0.3, 0.1)に応じた重みで合成される。自信度が高いモデルが最終予測に大きく貢献する

問題は、$\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$ を計算するには各モデルの事前分布や尤度の積分が必要で、現実には非常に難しいことだ。そこで実用上は BIC(ベイズ情報量基準) という近似式で重みを決めることが多い(詳細は7.7節)。ここでは「BIC で重みを計算できる」とだけ覚えておけば十分だ。

読み飛ばし可(数学の詳細)

ベイズの定理を用いて、モデルの事後確率は次のように計算できる:

$$\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z}) \propto \mathrm{Pr}(\mathcal{M}_m) \cdot \int \mathrm{Pr}(\mathbf{Z} | \theta_m, \mathcal{M}_m) \, \mathrm{Pr}(\theta_m | \mathcal{M}_m) \, d\theta_m$$

ここで $\theta_m$ はモデル $\mathcal{M}_m$ のパラメータ。$\mathrm{Pr}(\mathcal{M}_m)$ はモデルの事前確率、積分の中身は「パラメータの全ての可能性についてデータが出る確率を足したもの」(周辺尤度)。この積分はほとんどの場合解析的に解けず、BIC や MCMC で近似する。

もっと単純に — 委員会法

ベイズモデル平均は美しい。だが計算が重い。

そこで思いきってこう仮定する——「全部のモデルは等しく正しい」。つまり全ての $\mathrm{Pr}(\mathcal{M}_m | \mathbf{Z}) = 1/M$ とする。すると:

$$\mathrm{E}(\zeta | \mathbf{Z}) = \frac{1}{M} \sum_{m=1}^{M} \mathrm{E}(\zeta | \mathcal{M}_m, \mathbf{Z})$$

ただの算術平均だ。これを 委員会法(Committee Method) という。

委員会のメンバーが対等な立場で発言し、1人1票で多数決する。それだけ。シンプルだが、驚くほど効く場合がある。

複数のモデルが均等な1票で多数決する様子
5つのモデルが均等な重みで投票する。全ての矢印が同じ太さで中央に合流し、単純平均として結果が決まる

委員会法が機能する直感はこうだ。各モデルが独立して異なる種類の誤差を出すなら、平均することで誤差が打ち消し合う。ノイズが多数の独立な観測値の平均で小さくなるのと同じ原理である。

ただし注意点がある。全てのモデルが同じ間違いをするなら(例えば全員が同じデータで訓練し同じバイアスを持つなら)、平均してもバイアスは消えない。メンバーの多様性こそが委員会法の生命線だ。

バギング(8.7節)はこの委員会法の一種と見ることができる。同じ学習アルゴリズムを異なるブートストラップサンプルで訓練した複数のモデルを、均等重みで平均する——これはまさに委員会法の発想だ。

数学的保証 — 「混ぜて損することはない」

ここで重要な定理を紹介する。頻度論的(フリークエンティスト)視点——「同じ実験を繰り返したとき平均的にどうなるか」という見方——から、モデル平均がなぜ機能するのかを示す結果だ(対義語はベイズ的視点で、Section 2 で扱った)。

予測 $\hat{f}_1(x)$, $\hat{f}_2(x)$, ..., $\hat{f}_M(x)$ が手元にあるとき、二乗誤差を最小化する重みベクトル $\mathbf{w}$ を求めよう:

$$\hat{\mathbf{w}} = \arg\min_{\mathbf{w}} \mathrm{E}_{\mathcal{P}} \left[ Y - \sum_{m=1}^{M} w_m \hat{f}_m(x) \right]^2$$

これは「予測ベクトルを $\hat{F}(x) = [\hat{f}_1(x), \ldots, \hat{f}_M(x)]^T$ と並べ、$Y$ をその線形結合で予測する母集団線形回帰」に他ならない。解は:

$$\hat{\mathbf{w}} = \mathrm{E}_{\mathcal{P}}[\hat{F}(x) \hat{F}(x)^T]^{-1} \, \mathrm{E}_{\mathcal{P}}[\hat{F}(x) Y]$$

そして次が重要な不等式だ:

$$\mathrm{E}_{\mathcal{P}} \left[ Y - \sum_{m=1}^{M} \hat{w}_m \hat{f}_m(x) \right]^2 \leq \mathrm{E}_{\mathcal{P}} \left[ Y - \hat{f}_m(x) \right]^2 \quad \forall m$$

最後の $\forall m$ は「任意の $m$ について」つまり「どの単一モデル $m$ を選んだとしても」という意味だ。日本語に訳すと——「複数モデルの最適な線形結合の誤差は、どの単一モデルの誤差以下である」

単一モデル誤差と組み合わせモデル誤差の棒グラフ比較
4つの単一モデルの誤差棒(赤系)を組み合わせると、最低の単一モデルよりもさらに低い誤差(青)が得られる。不等号が視覚的に示される

セカンドオピニオンを取り入れた診断が、1人の医者の判断より平均的に正確になるのと同じように、複数モデルの最適な組み合わせは決して単一モデルより悪くなることはない(母集団レベルでは)。

これは数学的に証明された保証だ。直感的にもうなずける。なぜなら「最適な重み」のうち1つを1に、他を0にすれば、それは単一モデルになる。最適化問題の解は、その中で最良のものに少なくとも等しい

Stacking — データから重みを学ぶ

ここまでで分かったこと——最適な重みベクトル $\hat{\mathbf{w}}$ さえ手に入れば、組み合わせは単一モデルより悪くならない(Section 4の不等式)。問題は、その最適な重みをどうやって求めるかだ。

最も素朴な発想は、訓練データに対して回帰を解くことだ:

$$\hat{\mathbf{w}} = \arg\min_{\mathbf{w}} \sum_{i=1}^{N} \left[ y_i - \sum_{m=1}^{M} w_m \hat{f}_m(x_i) \right]^2$$

しかし、これには罠がある。

例えば、$\hat{f}_m(x)$ を「変数 $m$ 個までの最良サブセット回帰」とする。すると最大モデル $\hat{f}_M(x)$ は他のモデルを完全に包含する。訓練データに対しては最大モデルが最も誤差小さく、線形回帰は $\hat{w}_M = 1$, 他全部 $0$ という解を出す。これでは過学習——訓練データには完璧にフィットするが、新しいデータには弱くなる現象——そのものだ。

訓練データで重みを学ぶと最大モデルだけが選ばれる失敗例
M1(単純)からM4(複雑)まで4つのモデルがある。訓練データで重みを学ぶと、訓練誤差が最小のM4だけが重み1を取り、他は0になる。これは過学習の典型例

要するに、訓練データ上の評価では「複雑なモデル」が不当に高評価される。Section 4 の数学的保証は「最適な重み」の話だったが、その最適な重みを正直に求めるのは、思ったより難しい。

Stacking の核心 — Leave-One-Outで公正に評価する

問題は「訓練データで重みを決めると、複雑なモデルが優遇される」ことだった。解決策は単純だが鮮やかだ。

各データ点 $x_i$ について、その点を除いて訓練したモデルの予測を使う

つまり、Leave-One-Out(一個抜き)交差検証だ。$\hat{f}_m^{-i}(x)$ を「$i$ 番目のデータを除いて訓練したモデル $m$ の予測」と書く。Stacked Generalization(Stacking) は次の最適化問題を解く:

$$\hat{\mathbf{w}}^{\mathrm{st}} = \arg\min_{\mathbf{w}} \sum_{i=1}^{N} \left[ y_i - \sum_{m=1}^{M} w_m \hat{f}_m^{-i}(x_i) \right]^2$$

そして最終予測は、全データで再訓練したモデル $\hat{f}_m(x)$ を、学んだ重み $\hat{w}_m^{\mathrm{st}}$ で組み合わせる:

$$\hat{f}^{\mathrm{stacking}}(x) = \sum_{m=1}^{M} \hat{w}_m^{\mathrm{st}} \, \hat{f}_m(x)$$
Leave-One-Outで各データ点について除外して予測するフロー
各データ点を順番に「除外」し、残りで3つのモデルを訓練して予測する。全点を一巡後、各モデルのLOO予測を使って最適な重みが計算される

なぜこれが上手くいくか?$\hat{f}_m^{-i}(x_i)$ は「$x_i$ を見たことがないモデル」の予測だから、未来の入力に対する予測の正直な代理になる。複雑すぎるモデルが訓練データに過学習しても、Leave-One-Out 予測では正直に悪い値が出る。だから訓練データだけでは見えなかった真の優劣が明らかになる。

実用上はさらに2つの制約を加えると性能が安定する:

これにより、最適化は凸二次計画問題(目的関数が碗型の滑らかな形をしており、局所最適解が大域最適解に一致する)になり、解は安定する。また重みを「モデルの事後確率」として解釈できる利点もある。

読み飛ばし可(制約付き最適化の形)
$$\hat{\mathbf{w}}^{\mathrm{st}} = \arg\min_{\mathbf{w}} \sum_{i=1}^{N} \left[ y_i - \sum_{m=1}^{M} w_m \hat{f}_m^{-i}(x_i) \right]^2$$
$$\text{subject to} \quad w_m \geq 0, \quad \sum_{m=1}^{M} w_m = 1$$

Stackingとモデル選択の意外な関係

先ほどのStacking最適化式(Section 6の式)には、知っておくと面白い事実が隠れている。おさらいすると、Stackingは各データ点を順番に「1点除外」して評価する LOO-CV(Leave-One-Out 交差検証)で重みを学んでいた。

もし重み $\mathbf{w}$ に「1つだけ1、残りは0」という極端な制約を課したらどうなるか?

それは「1つのモデルだけを選ぶ」ことに他ならない。そして最適化問題は——Leave-One-Outクロスバリデーション誤差が最小のモデルを選べ——という命令に化ける。これは伝統的なモデル選択そのものだ。

つまり:

モデル選択(一点に集中)とStacking(連続な重み)の連続性
5本の重み棒が均等な状態から変化し、1本だけが1になる(モデル選択)。さらに変化して複数の棒が中間値を持つ(Stacking)。矢印が「特殊ケース→一般化」の関係を示す

「最良の1つを選ぶ」のではなく「混ぜる」自由を持つことで、Stackingはモデル選択より柔軟になる。だからStackingはLOO-CVによるモデル選択を支配する——少なくとも予測性能の面で。

ただし代償もある。複数のモデルを保持し、重み付けで組み合わせるため、解釈性は低くなる。「これは血圧と体重の線形和で決まる」という単純な説明はできず、「複雑なモデル群の重み付き平均の出力」になるからだ。

まとめ — 3つのアプローチを使い分ける

今日学んだ3つのモデル組み合わせ法を整理しよう。

手法重みの決め方計算コスト強み弱み
委員会法全モデル均等 (1/M)最小単純・堅牢モデルの優劣を反映できない
BMA事後確率 Pr(M|Z)大(積分)理論的に最適事前分布の設定が難しい
StackingLOO-CVで学習中(CV分)データ駆動で柔軟解釈性が下がる

実務での選び方の指針はこうだ。

委員会法・BMA・Stackingの3手法を1つの画面で比較
左:委員会(均等な棒3本)、中:BMA(事後確率の円グラフ)、右:Stacking(CVで学習した重み棒)。3つのアプローチが最終予測に至る道筋の違いが一目でわかる

8.7節までで学んだバギングとも比較しておこう。バギングは「同じ学習アルゴリズムを違うブートストラップ標本で訓練」して平均する手法だった。一方でモデル平均化は「異なる学習アルゴリズムを組み合わせる」点で根本的に異なる。Random Forest、勾配ブースティング、ニューラルネット——全く異なる手法を1つの強力な予測器に統合できる。

最後に、Stackingのアイデアはさらに拡張できる。重み付け部分自体を線形回帰ではなく別の機械学習器にしてもよい。重みが入力 $x$ に依存して変化する「ローカルStacking」も可能だ。「学習器を学習器で積み重ねる(Stacking)」というアイデアは、深層学習のメタ学習や、現代のアンサンブル手法の根本思想として今も生き続けている。

3つのアプローチの統一的な見方

全て次の形をしている:

$$\hat{f}^{\mathrm{combined}}(x) = \sum_{m=1}^{M} w_m \, \hat{f}_m(x)$$

異なるのは $w_m$ の決め方だけだ。

  • 委員会法: $w_m = 1/M$
  • BMA: $w_m = \mathrm{Pr}(\mathcal{M}_m | \mathbf{Z})$
  • Stacking: $w_m$ は LOO-CV で最適化

「混ぜる」という1つの思想が、3つの異なる戦略を生む。そして混ぜることは、母集団レベルで決して悪くならない。最良の1つに固執するより、みんなで決める方が、たいてい賢い——これがモデル平均化の本質だ。