バナナでもわかる話

開設当初は計量経済学・統計学が専門の大学院生でした。今はデータを扱うお仕事をしています。統計学・経済学・投資理論・マーケティング等々に関する勉強・解説ブログ。ときどき趣味も。極力数式は使わずイメージで説明出来るよう心掛けていますが、時々暴走します。

機械学習のバイアスバリアンス分解を古典的な統計学から丁寧に解説する

今日は、バイアスバリアンス分解の話をしようと思います。


目次


スポンサーリンク



はじめに

「バイアスバリアンス分解」と言う言葉を聞いて、皆さんは何を思い浮かべるでしょうか。

恐らく古典的な統計学だけを勉強した人であれば、パラメータの推定量に関するMSEの分解を思い浮かべるかもしれません。

一方機械学習から勉強した人であれば、トレーニングデータで評価した予測値と予測変数(目的変数)とのMSEを思い浮かべることでしょう。

実は、後者のことを一般にバイアスバリアンス分解と呼び、前者はMSEをバイアスとバリアンスに分解できるだけの話で特に名前は与えられていない(と思われる)のですが、当然、両方MSEですし、やってることは同じなので、両方勉強している人であれば、そんなもの分けて議論することがナンセンスだともなることでしょう。


しかし、恐らく機械学習に馴染みのない方からすると、機械学習サイドでよく言われるところのバイアスバリアンス分解はわかりにくく、

躓きポイントじゃないかな〜と私は考えています。



そこで今回の記事では、まずはじめに古典的な統計学で語られるところのMSEの分解とその理解について説明した上で、それとのモチベーションの違いに触れながら機械学習で語られるところのバイアスバリアンス分解について説明しようと思います。

そして、最後にオマケとして、最近話題のdouble descentの話にも触れようと思います。

古典的な統計学におけるMSEの分解

パラメータの推定

まずはじめに、古典的な統計学の目的を確認しておきましょう。
統計学では、あるデータXの性質を'分布'という観点から考察したいというモチベーションから出発します。
ここであるデータXの性質とは「期待値や分散の値」だけでなく、「Xに影響を与える変数は何か」なども含みます。

とにかく、データXの分布(当然この分布は仮定する)のパラメータを推定し、それを解釈利用することでXの性質を述べたり、その述べた性質が妥当か検証したり、パラメータの値を使って予測したりといったことを行いたいわけです。


なので、とにもかくにも仮定した分布のパラメータの値を、持っているデータを使ってうまく当てたいわけです。


ここでXに対して、何かしらのパラメータ \thetaによって決まる分布を仮定します。

パラメータ \thetaの値は神様しかわからないわけですが、持っているデータXを用いて得られる推定量 g(X)で何とか誤差が小さくなるようにパラメータの値を推定したい!と言う話になってきます。


そこで、次のような評価方法Lを考えることになります。


 L=(\theta-g(X))^2

このLは神様しか知らない真の値と推定に用いる値との二乗誤差です。

Xは確率変数を仮定しており、確率的にばらつくはずなので、このLをXの期待値で評価すると

 MSE=E[(\theta-g(X))^2]


これが、MSE (Mean Squared Error) です。

と言うわけで古典的な統計学でMSEを用いる基本的なモチベーションとしては、


あるデータXの性質をパラメータに置き換えて述べたい
しかし、パラメータの値はわからないのでうまい推定量で推定したい
うまい推定量とは何かを検討するにあたり、MSEで評価したい


ということになります。

MSEの分解

さて、MSEですが、推定量のバイアス分散に分解することができます。

ちなみにここでいう推定量のバイアスとは何を指すかというと、
推定したい真の値と、推定量の期待値の差です。
つまり \theta-E[g(X)]がバイアスです。


それを示していきましょう。

 MSE

 =E[(\theta-g(X))^2]

 =E[(\theta-E[g(X)]+E[g(X)]-g(X))^2]

 =E[(\theta-E[g(X)])^2+(g(X)-E[g(X)])^2+2(\theta-E[g(X)])(E[g(X)]-g(X))]

ここで、最後の項は期待値をとるとゼロになりますね。
 E[2(\theta-E[g(X)])(E[g(X)]-g(X))]=0
Xの期待値を考えていることに注目してください。


よって、
 MSE

 =E[(\theta-E[g(X)])^2]+E[(g(X)-E[g(X)])^2]

 =(\theta-E[g(X)])^2+V[g(X)]

1項目はバイアスの二乗ですね。
2項目は推定量の分散です。

こうしてMSEをバイアスと分散に分解することができました。


ここまで見れば、例えば不偏推定量(バイアスが0の推定量)を考えるモチベーションもわかるかと思います。
MSEを小さくしたいが、MSEは正確には分散とバイアスの二つの要因から成る。
バイアスが0の推定量のクラスであればとにかく分散を小さくすることだけに注力すればいいので、考えやすいですね。

当然、モチベーション次第では、若干バイアスが生じてもそれ以上に分散を小さくできるような推定量があれば、不偏である必要もないですね。
そんなことを考えることができるわけです。


機械学習におけるバイアスバリアンス分解

予測と分類

一般に機械学習と言われる手法では、上記の話とはモチベーションが少しだけ違います。
パラメータには重きを置きません。


とにかく目的変数を予測(分類)したい!!とにかく正確に予測したい!!というモチベーションで話が進みます。

いやいや、先ほどの統計学の説明でも予測はモチベーションの一つとしてあったじゃないかというのは当然の指摘ですが、先ほどの古典的な統計学のモチベーションのメインはとにかくパラメータにあります。その成果を使って予測を行うこともあるというだけです。


古典的な統計学の文脈で良しとされる手法は、予測変数のMSEを出来うる限り小さくしているわけではないのです。

一方、機械学習でよしとされる手法は、パラメータのMSEを最小化しているわけではないのです。


若干ミスリードの感があるので補足しておくと、これは、統計学は予測に興味がないといっている訳ではありません。統計学は予測に"も"興味はあるが、他のことにも興味があるため、パラメータ目線で話を進めることが多かったというだけです。そのため機械学習を予測に特化した統計学として解釈することも当然可能です。




では、機械学習の話に戻ります。
例えばデータXを使ってデータYの値を予測したいといった状況を考えることにしましょう。

この時、得られたデータ X^{(T)}を使って g(X)というYを予測するための関数(予測器)を考えて、新しいXが与えられた時の'未知のY'を予測したいというのが機械学習のモチベーションです。

ここで、添字 (T)を与えてモデルを作る時に使っている X^{(T)}と、予測したいYに対応するXを区別していることに注意してください。

既に持っているデータは、答えであるYがもう分かっているのだから、わざわざ予測する必要なんてありません。
まだわからないものを予測してこその予測器です。

オーバーフィット

既に持っているデータ X^{(T)}とそれに対応する答え Y^{(T)}の組をテストデータと呼びます。

実はテストデータの二乗誤差

 \sum_{i=1}^{N}(Y_i^{(T)}-g(X_i^{(T)}))^2

を0にする方法は簡単で、パラメータの次元を増やす(モデルを複雑にする)ことで誤差0の理想のモデル(!?)が完成します。


しかし、これには問題があって

このようにテストデータに対する誤差最小化モデルは、新しいデータに対する予測性能がありません

これは当然で、テストデータの二乗誤差を最小化するモデルを作っただけで、新しいデータに対する二乗誤差最小化モデルを考えていないからです。


このようなテストデータにだけ過剰にフィットしている状況をオーバーフィットと呼んだりします。

よくこんな図とともに説明されます。
f:id:bananarian:20190917234218j:plain*1
点線がテストデータで、横軸のcomplexityは複雑度ですが、とりあえずパラメータの次元だと思ってください。縦軸もRiskですが、今回の話で言うところの二乗誤差だと思ってもらえれば問題ないです。

実線が新しいデータで見たものです。複雑度が増すと一定のラインを超えると、Riskが猛烈な勢いで増えています。


じゃあどうすればオーバーフィッティングを回避できるのかというと、評価の基準をテストデータに関する二乗誤差ではなく、新しいデータに関する二乗誤差にしてやれば良い訳です。


バイアスバリアンス分解

それでは、MSEを考えましょう。改めて文字を整理します。


予測器を作るにあたって用いるテストデータセットをDとして次のように書くことにします。

 D= \{(X_1^{(T)},Y_1^{(T)}),...,(X_N^{(T)},Y_N^{(T)})\}


このテストデータセットDを用いて作った予測器gを次のように書くことにします。

 g(x;X^{(T)},Y^{(T)})=g(x;D)


これは、gは新しい予測のための変数xを入れることでxに対応する予測値を出力する関数であるが、
作るにあたって得られたテストデータDの値を用いている(つまり、Dを条件付けたもとで得ている)ことを明示的に示すために、このような書き方をしています。


さて、テストデータとは区別して、データXが与えられた時に生じるであろう値Yをg(x)を使って予測したいので、次のような誤差Lを持って評価すれば良いことがわかりますね。


L=(Y-g(X;D))^2


ただしここで、Yは確率変数です。そのため、期待値をとって次のように考えてやる必要があります。

 E_{y|x}[(Y-g(X;D))^2]

演算子 E_{y|x}はxを条件づけた時のyの期待値を求めていることを表します。ちゃんと積分の形に直すと次のようなことを言っているのと同じです。

 \int (Y-g(X;D))^2 p(y|x)dy


さて、実はもう一つ確率変数があります。Yを予測するにあたって、Xは固定なのですが、データセットDは固定していません

モデルを考えるにあたって確率変数の組であるトレーニングセットを使って予測器を作っているため、この g(X;D)は確率変数です。
要はXを固定しているだけで X^{(T)}を固定した訳じゃないのです。よって、こいつの期待値も取る必要がありますね。

 MSE=E_{D|x}[E_{y|x}[(Y-g(X;D))^2]]


これが機械学習で考えているところのMSEです。

式は一緒でも、考えているモチベーションが若干異なるため、このような形になる訳ですね。
さて、分解してみましょう。手順は先ほどと同様です。


 MSE

 =E_{D|x}[E_{y|x}[(Y-g(X;D))^2]]

 =E_{D|x}[ E_{y|x}[ (Y-E_{y|x}[Y]+E_{y|x}[Y]-g(X;D) )^2 ] ]

 =E_{D|x}[ E_{y|x}[ (Y-E_{y|x}[Y])^2 + (g(X;D)-E_{y|x}[Y])^2 ] ]

若干複雑ですが、中身をしっかりみてください。右の項はYの値によらずバイアスの二乗の形であることがわかりますね。


さて、続きの計算を行いましょう。
 =E_{D|x}[ V_{y|x}[Y]+(g(X;D)-E_{y|x}[Y])^2]

 = V_{y|x}[Y]+E_{D|x}[(g(X;D)-E_{y|x}[Y])^2]

さて、右側の項をさらに分解しましょう。分解方法は今までの手順と同じです。


  =V_{y|x}[Y]+E_{D|x}[(g(X;D)-E_{y|x}[Y])^2]

 = V_{y|x}[Y] + E_{D|x}[(g(X;D)-E_{D|x}[g(X;D)]+E_{D|x}[g(X;D)] -E_{y|x}[Y])^2]

 =V_{y|x}[Y] + E_{D|x}[(g(X;D)-E_{D|x}[g(X;D)])^2+(E_{D|x}[g(X;D)]-E_{y|x}[Y])^2]

 =V_{y|x}[Y] +V_{D|x}[g(X;D)]+(E_{D|x}[g(X;D)]-E_{y|x}[Y])^2

機械学習モデルにおいては、しばしばこの式の第三項目をバイアスと呼んだりします。
第二項目はバリアンス、そして第一項目はトレーニングデータセットと無関係なデータの分散です。

この第一項目についてはトレーニングデータではどうしようもないので、いじれません

よって、予測においてはトレーニングデータとモデルを使っていじることが可能な第二、第三項が重要になります。


まとめ

結局、やっていることも、評価方法も同じであるということが分かっていただけたと思います。

分析において評価したいものが違っていて、それは手法の背後にあるモチベーションからこそなのです。

そして、評価したいものが違うがゆえに、期待値演算が二重になって若干複雑になっているのが機械学習(or 最新の統計学)におけるバイアスバリアンス分解なのです。


double descent

先ほど、オーバーフィッティングで次のような図を確認しました。
f:id:bananarian:20190917234218j:plain

しかし、2018年、実は次のような状況にあることが[Belkin, Mikhail, et al., 2018]によって確認されました。
f:id:bananarian:20190917234853j:plain*2

実は、もっとモデルの複雑度を増やすとまたRiskが減少し始めるらしい。これをdouble descentと呼んだりします。
これは、古典的な統計学の手法では、そもそもこの先がわかると言う状況がなかったので知られていなかったのですが、例えばニューラルネットワークなどを考えるとこのような状況が発生します。

この仕組みはまだ完全に判明していないので、理屈を説明することが出来ないのですが、

これは今注目を浴びているトピックで、テストデータでRMSEの谷を見るだけではどうやらダメらしいということで研究が進んでいる最中だったりします。


*1:Belkin, Mikhail, et al. "Reconciling modern machine learning and the bias-variance trade-off." arXiv preprint arXiv:1812.11118 (2018)より

*2:Belkin, Mikhail, et al. "Reconciling modern machine learning and the bias-variance trade-off." arXiv preprint arXiv:1812.11118 (2018)より