バイアスとバリアンス

専門家には常識だと思うけど、バイアスとバリアンスという話がある。これが結構ややこしいので自分なりに整理してみる。

教師あり学習で統計モデルを作るアルゴリズムがあったとして、そのアルゴリズムの「良し悪し」を評価したい。

ここでアルゴリズムが出力する統計モデルは、xというデータをインプットすると、yという値を推定してくれるものだとしよう。

ちなみに、統計モデルの良し悪しを評価するんじゃなくて、教師データから統計モデルを学習してくれるアルゴリズムの良し悪しを評価するのだということを意識してないと割と混乱する。

アルゴリズムを利用する手順は

  1. x,yの母集団から教師データを採取する
  2. 教師データをアルゴリズムにインプットする
  3. アルゴリズムが統計モデルをアウトプットする
  4. その統計モデルにx'を与えるとy'が推定される
  5. (ここでx'に対する本当の値はy"だとする)

というものだ。

このときに「アルゴリズムの良し悪し」を、「教師データの選び方によって、(学習されたモデルの)x'に対する推定値y'が、真の値y"の周りをどのように振る舞うか」というふうに定式化する。

この定式化のもとで、状況を少し掘り下げてみる。

まず、教師データの選び方が色々変わったときに、それに応じてy'も色々と変わってくるが、そういう色々のy'を平均したらy"にどのくらい近づくだろう?というのが気になる。教師データの選ぶ方法には、すごく偏った方法もいっぱいあるだろうけど、そういう選び方を全て尽くてy'の平均を取ったら、y'はなかなか良い値としてy"に肉薄するのではないだろうか?まぁそれでもy"にピッタリ一致するとは言い切れないだろう。ちょっとズレるかもしれない。こういうズレをバイアスと呼ぶことにしよう。このバイアスは、アルゴリズムの良し悪しを表すスペックの一つと言えるだろう。

さらに掘り下げて話を進めてみよう。上記のように平均を取ったy'は、y"への肉薄度合はバイアスという限界があるだろうけど、ここで真の値y"についての話をいったん脇に置いて、平均を取る前の個々のy'(=教師データの選び方ごとのy')は平均を取ったy'とどのくらい差があるかについて考えてみる。教師データの偏りにかなり引きずられてモデルを出力するようなアルゴリズムだったら、そのモデルで推定されるy'は平均のy'からだいぶズレるだろう。母集団全体の傾向を保つように教師データをうまくピックアップできれば、アルゴリズムの性質によらず、平均のy'に近い値が出てくるだろうが、教師データの選び方が偏ってしまった場合はその偏りを(アルゴリズムの性質に応じた度合で)反映したy'が出てくるはずだ。というわけで、「平均のy'と教師データの選び方に応じたy'のズレ」を、教師データの選び方を尽くして全体で平均を取ったものも、上記のバイアスに加えてアルゴリズムの良し悪しを表すスペックの一つと言えるだろう。これをバリアンスと呼ぶことにしよう。

ここまで来ると、バイアスとバリアンスにはある関係性があることが分かる。

つまり、アルゴリズムが出力するモデルがとても単純な場合、平均のy'は真のy"になかなか肉薄するところまでいかないだろう。つまりバイアスは大きいだろう。しかしモデルが単純なだけに、教師データの選び方を凄く偏らせたとしても、その偏りに引きずられる度合いも小さいので、バリアンスとしては小さくなるだろう。

逆にアルゴリズムが出力するモデルが複雑なものの場合、平均のy'は真のy"にかなり肉薄するだろう。でも、その小回りが利く性質ゆえに、教師データが偏るとy'も偏ってしまい、平均のy'と比べて教師データの選び方に応じたy'はズレにズレまくる、つまりバリアンスは大きいだろう。

要するに、バイアスとバリアンスはトレードオフの関係にあるということになる。

以上、バイアスとバリアンスの話でした。この説明で、たぶん合ってると思うけど、間違ってたらご指摘くださいな。