モデリング●●●●●

バイアスとバリアンス

Bias-Variance Tradeoff ・ ばいあすとばりあんす

予測誤差を偏りとばらつきに分解し、モデルの複雑さの最適点を考える枠組み

✦ 30秒で試す — 航海複雑なモデルほど、新しいデータでは外れることがある点を1000個に増やすと、いちばん当たる次数は?予想してみる

概要

バイアスとバリアンスは、モデルの予測誤差を性質の異なる成分に分けて考える枠組みです。バイアス(偏り)は「モデルが単純すぎて、本当の構造を系統的に捉えそこねている度合い」、バリアンス(分散)は「学習に使うデータが変わるたびに、モデルの予測がどれだけぶれるかの度合い」を指します。射撃にたとえると、バイアスは狙いが的の中心からずれていること、バリアンスは着弾が毎回バラバラに散ることに相当します。

この2つは多くの場合トレードオフの関係にあります。モデルを単純にするとバイアスは増えるがバリアンスは減り、複雑にするとバイアスは減るがバリアンスが増える。過学習と未学習という現象を「誤差の内訳」という視点から統一的に説明してくれるのがこの枠組みで、モデルの複雑さをどこに設定すべきか、不調のモデルに何を打つべきかを考えるときの共通言語になっています。

なぜ生まれたか

過学習の存在が知られると、「モデルを複雑にすると訓練データへの当てはまりは良くなるのに、なぜ新しいデータへの予測はある点から悪化するのか」という疑問が残りました。当てはまりが良くなっているのに予測が悪くなる、という一見矛盾した現象を説明する理論が必要だったのです。その答えが、予測誤差の期待値を分解すると、二乗誤差で測る限り「バイアスの2乗 + バリアンス + 削減不能なノイズ」という3項の和に厳密に分かれる、というバイアス・バリアンス分解でした。複雑化はバイアスを減らす一方でバリアンスを増やすため、両者の和である予測誤差はU字を描く——過学習の正体は「バリアンスの膨張」だと説明できるようになったのです。1992年にゲマンらがニューラルネットワークの文脈で「バイアス・バリアンスのジレンマ」として定式化したことで、機械学習の共通語にもなりました。

この分解の根は、推定量の性質の理論——不偏性(偏りのなさ)と有効性(ばらつきの小ささ)という推定量の評価基準——にあります。推定量の平均二乗誤差は「偏りの2乗 + 分散」に分かれるので、偏りがゼロでも分散が大きければ誤差は大きいままです。統計学では長らく不偏推定量が理想とされてきましたが、1950〜60年代にスタインらが「3つ以上の平均を同時に推定するなら、わざとゼロ方向へ縮めた偏った推定量のほうが、不偏な標本平均より平均二乗誤差が小さくなる」ことを示し、発想の転換が起きました。少しの偏りを受け入れる代わりにばらつきを大きく減らせるなら、そのほうが総合的な誤差は小さい——正則化はまさにこの転換を実装した技法です。

詳細

分解の中身

同じ母集団から訓練データを何度も取り直し、そのたびにモデルを学習し直す思考実験を考えます。ある入力 x に対する予測値 f̂(x) は訓練データごとに変わるので、予測値そのものが分布を持ちます。この分布の中心(予測の期待値)が真の値 f(x) からどれだけずれているかがバイアス、分布の広がりがバリアンスです。新しい観測 y = f(x) + ε(ε は平均0・分散 σ² のノイズ)に対する二乗誤差の期待値は、

E[(y − f̂(x))²] = (E[f̂(x)] − f(x))² + Var[f̂(x)] + σ²

と正確に分かれます。3つ目のノイズ項はデータ自体に含まれる偶然のばらつきなので、どんなモデルでも削れません。つまりモデル側で制御できる誤差はバイアスとバリアンスの2つだけで、モデル設計とはこの2つの配分を決める作業だと言えます。下の図は、複雑さを変えたときの3つの成分と、その和の典型的な形です。

予測誤差(合計)バイアス²バリアンスノイズ(どのモデルでも削れない)誤差← 未学習(高バイアス)最適な複雑さ過学習(高バリアンス)→モデルの複雑さ →
モデルの複雑さと誤差の内訳 — バイアス²は減り、バリアンスは増え、ノイズは一定。その和である予測誤差はU字を描き、ノイズの線より下には決して下がらない

ここで大事な但し書きがあります。この「きれいな足し算」が成り立つのは、誤差を二乗で測るとき(最小二乗法と同じ物差し)に限られます。分類の正解・不正解(0-1損失)や絶対誤差では、バイアスとバリアンスが単純な和にならず、バリアンスがかえって誤差を減らす場合さえあります。そのため分類問題での「バイアス」「バリアンス」は、厳密な分解というより「系統的な外れ」と「データへの敏感さ」を指す比喩として使われていると理解しておくのが安全です。

トレードオフの直感

単純なモデル、たとえば直線回帰は、どの訓練データで学習してもほぼ同じ直線を返します。予測は安定している(低バリアンス)けれど、真の関係が曲線なら、どのデータでも同じ方向に外し続けます(高バイアス)。逆に高次多項式や深い決定木は、真の構造がどんな形でも平均的には捉えられます(低バイアス)が、訓練データのノイズに敏感に反応するため、データが変わるたびに予測が大きく揺れます(高バリアンス)。過学習したモデルの予測が新しいデータで外れるのは、狙いがずれているからではなく、手の震えが大きすぎるから——この比喩がバイアスとバリアンスの区別を端的に表しています。

この「思考実験」は、実際に訓練データを何度も引き直してみると目で見えます。直線のモデルでは線がきれいにそろったまま真の関係から外れ、9次のモデルでは平均こそ真の関係に重なるものの、線が引き直すたびに暴れます。右の棒で、どの複雑さのときに内訳の合計がいちばん低くなるかを比べてみてください。

⚡ 体験: 引き直すたびに線が重なる
モデルの複雑さ
破線 = 真の関係(モデルには見えない)1次(直線)のモデル ・ 0 本新しい点での誤差の内訳?1次?3次?5次?9次灰 = ノイズ(削れない)
真の関係線の平均バイアス²(平均のずれ)バリアンス(線の散らばり)
バイアス²—バリアンス—ノイズ σ²0.0100合計(期待二乗誤差)—

「訓練データを引き直す」を何度か押してください。押すたびに同じ母集団から新しい 11 点が引かれ、そのデータで当てはめた曲線が1本ずつ重なっていきます。

細い線 = 1回ぶんの訓練データで当てはめた曲線。金 = その平均、青緑の帯 = ±1SD、赤い塗り = 平均と真の関係の隙間

誤差の内訳から対策を選ぶ

この枠組みの実用的な価値は、モデルの不調に対して打つ手を選び分けられることです。現実には真の関数が分からないので、バイアスとバリアンスを直接は計算できません。代わりに、訓練誤差と交差検証による検証誤差を並べて読みます。どちらも高いなら高バイアス(未学習)が疑われるので、モデルを複雑にする・特徴量を増やすのが筋です。訓練誤差は低いのに検証誤差が高いなら高バリアンス(過学習)なので、データを増やす・正則化を強める・モデルを単純にするのが筋です。

診断を誤ると逆効果になります。高バイアスのモデルにデータをいくら追加しても誤差はバイアスの水準で頭打ちになりますし、高バリアンスのモデルをさらに複雑にすれば悪化します。データ量を横軸に訓練誤差と検証誤差を描く学習曲線は、この見分けに便利です。2本の線の間が大きく開いたまま縮んでいくならバリアンスの問題で、データを増やす価値があります。2本がすでに近いのに両方とも高いならバイアスの問題で、データを増やしても報われません。

偏りを受け入れるという設計

バイアス・バリアンス分解が統計学にもたらした思想的な転換は、「不偏であることは常に善ではない」という点です。リッジ回帰は係数を意図的にゼロ方向へ縮め、偏った推定量をあえて作りますが、その見返りにバリアンスが大きく減り、総合誤差では不偏な最小二乗推定を上回ることがあります。逆向きの戦略もあります。バギングやランダムフォレストは、ブートストラップ法で作った多数の訓練データで低バイアス・高バリアンスの決定木を育て、その予測を平均してバリアンスだけを打ち消します。ベイズ推論で事前分布が推定を安定させる働きも、少しの偏りと引き換えにばらつきを抑える同じ構図で理解できます。

最後に、U字は「いつでも必ず成り立つ法則」ではない点も知っておくと役立ちます。パラメータ数がデータ数を大きく超える現代の深層学習では、訓練データを完全に再現する点を越えてさらにモデルを大きくすると、検証誤差がもう一度下がる「二重降下(double descent)」が観察されています。これは分解の式が崩れたのではなく、学習アルゴリズムが暗黙のうちに「なめらかな解」を選ぶ正則化として働き、バリアンスが抑えられるためだと考えられています。「正確に狙うこと」と「ぶれずに当てること」は別の能力であり、目的が予測なら後者のためにあえて前者を少し譲る——この設計思想は、形を変えながら現代の統計モデリングと機械学習の底流をなしています。

試問

真の関係(青い破線)にノイズが乗った 11 点の訓練データに、1次(直線)・3次・5次・9次の多項式を当てはめます。訓練データを引き直すたびに線が1本ずつ重なり、右の棒が新しい点での誤差を、バイアス²(線の平均のずれ)・バリアンス(線の散らばり)・ノイズに分けて示します。次数を切り替えながら引き直し、誤差の内訳を比べてください。

✦ 命題挑戦中

4つの複雑さのモデルで訓練データを引き直して比べ、新しい点での誤差(合計)がいちばん小さいモデルを選び出せ

  • 4つの次数すべてで線を 20 本以上重ねる(いま 1次 0 / 3次 0 / 5次 0 / 9次 0)
  • 選んでいる次数の合計(バイアス² + バリアンス + ノイズ)が、4つの中でいちばん小さい
⚡ 体験: 次数を切り替えて引き直し、誤差の合計を比べる
モデルの複雑さ
破線 = 真の関係(モデルには見えない)1次(直線)のモデル ・ 0 本新しい点での誤差の内訳?1次?3次?5次?9次灰 = ノイズ(削れない)
真の関係線の平均バイアス²(平均のずれ)バリアンス(線の散らばり)
バイアス²—バリアンス—ノイズ σ²0.0100合計(期待二乗誤差)—

「訓練データを引き直す」を何度か押してください。押すたびに同じ母集団から新しい 11 点が引かれ、そのデータで当てはめた曲線が1本ずつ重なっていきます。

細い線 = 1回ぶんの訓練データで当てはめた曲線。金 = その平均、青緑の帯 = ±1SD、赤い塗り = 平均と真の関係の隙間