HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【訓練誤差と汎化誤差】学習・統計的推定は正しいのか?【過学習】

 

 

follow us in feedly

はじめに

機械学習、統計分析に少しでも触れたことのある方は「過学習」という言葉を聞いたことがあるでしょう。 データに対してパラメータをうまくフィッティング させすぎている場合 に生ずる現象です。

過学習が起こらないように上手に正則化などを用いて、学習できる能力を制限したり、日夜ハイパーパラメータの調整に明け暮れている人もいるかもしれません。今回は訓練誤差と汎化誤差という2つの誤差をしっかりと理解して、なぜに過学習なるものが起こるのかを見ていきます。

そうすることで、普段行っている「学習」であるとか「推定」であるとか、それらが決して「良いモデルを作る」ことに必ずしも直結しないことを把握します。

学習の目的と試み

学習の真の目的は、今着目している現象の全容をモデルによって明らかにする、あるいは近似することで、その現象の説明、あるいは予測に役立てるということになります。

これは当たり前のことのように見えますが、強調しすぎるということはありません。

真の目的に対する我々の現実

まずは、真の目的に対して我々がどういう状況に置かれているのかを説明します。 基本的にこの世界のすべてに対して、何か自分が興味を持った対象を絞ることをします。そして、興味の対象から何とかデータを採取し、そしてそのデータで統計的分析や機械学習をしようというのが我々の姿勢です。このとき、この世のすべてを知るものの視点からすれば、ちょうど下記の図のようになっています。

f:id:s0sem0y:20190928133429p:plain

私達はこの世のすべてを知ることはもちろんのこと、着目している現象に対してすら正しく理解しておらず、しかも手がかりとなるデータも知りたい現象の一部に過ぎないということです。

このとき、やはり忘れてはならないのは、着目している現象に対する理解や予測が行いたい ということです。

データのサンプリング(採取)

実は上記の図は、割と都合の良い図になっています。実際にデータをサンプリングしていく過程では、実は下記のような集め方になっていることでしょう。

f:id:s0sem0y:20190928134211p:plain

ここでオレンジ色の領域が、実際に得られるデータだとします。データは着目している現象に関することであったり、着目している現象の外の話を含んでしまっていたり、時には関係の無いデータも混じっているのです。そして重要なのは 着目している現象に対する全容を知らないのだから、そのデータの素性もわからない (データがまともかわからない) ということなのです。

このように神様視点で見れば、変なデータを集めていることや、データが着目している現象を網羅できていないことなど明らかなのですが、実際にデータを集める解析者は、データが本来知りたいことに対して十分にまっとうであるのかなど知る術もないのです。

真の目的と推定・学習の関係

さて、本題に入りましょう。我々は、適当な統計モデルによって着目している現象を数値(確率変数) $X$ で表現しておいて

$$ p(X) $$

という分布を考えます。私達が取り回しやすい分布、あるいはよく知っている分布として正規分布やベルヌーイ分布、ポアソン分布などがあります。まず着目している現象に対して、我々はよく知っている分布を 勝手に あてがうのです。ここでは仮に、正規分布をあてがったとしましょう。

$$ p(X) = \mathcal N (X \mid \mu, \sigma) $$

と仮定するのです。ここで重要なのは、この時点で本来知りたかった現象に関する情報が抜け落ちる可能性があるということです。なぜなら、正規分布を仮定すればそれはすなわち、「最も出やすい値を中心に左右均等にばらつく」という分布しか考えられなくなるからです。もしも着目している現象がそうでなかったとしても、そのようにして作ることのできる分布の中でマシなものを見つけることしかできなくなるということです。

これは、現象に対してどのような統計モデルを仮定するかが非常に重要な役割をになっていることを示すと同時に、統計モデルを仮定した時点で、私達は「自分たちが取り扱いやすい範囲の数学」というバーチャルの世界で現象をシミュレーションすることしかできなくなったということを表します。

今ここに、着目している現象を表す真の分布 $q(X)$ というものがあるとしましょう。これは私達が数式で容易に表現できるよなものではないかもしれません。しかし、ただ、現象を表現する真の分布であるということを表すためだけに使います。さて、いま勝手に作ったバーチャルの世界の統計モデル $p(X)$ と真の分布 $q(X)$ は近しいかもしれないが既に別物であるということを把握してください。

そして、学習・推定というのは、ここでは勝手に仮定した正規分布の形状$p(X) = \mathcal N (X \mid \mu, \sigma)$ を決定するパラメータ $\mu, \sigma$ を調整する作業です。 私達は現実からは乖離してしまっているが、可能な限り知識を凝らして近づけたバーチャルの世界の中で、何かをゴニョゴニョ調整しようとしているということです。

つまり、この時点で、知りたい真の分布 $q(X)$ に対して、バーチャルの統計モデル $p(X \mid \theta)$ ($\theta$ は統計モデルの形状を決定するパラメータ)を仮定し、そのパラメータを調整することで $q(X)$ を $p(X \mid \theta)$ で再現しよう。というのです。

具体的な学習の試み

では真の分布をシミュレートするために統計モデルを調整する方法の1つである最尤推定を説明しましょう。

まず、データが $\{x_1, x_2, ..., x_N\}$ と得られた場合には個々のデータの発生が独立に生じたと考えると、 統計モデルから見たときに

$$ p(X = x_1 \mid \theta)p(X = x_2 \mid \theta)...p(X = x_N \mid \theta) $$

という確率の事象が起こったと言えます。もしもこの値を計算してみたときに、値が異様に小さい場合は、統計モデルが実際に生じたデータが発生したことを説明できないことになります。なぜなら、統計モデルはそんなふうにデータが集まる確率は小さいですよ、と言っていることになるからです。しかし現実にはデータが得られているという状況なのですから、そのようなことが起こる確率は相応に高いはずであると考えるのです。

すると、尤度関数

$$ L(\theta) = p(X = x_1 \mid \theta)p(X = x_2 \mid \theta)...p(X = x_N \mid \theta) $$

なるものを考えて、こいつがなるべく大きな値を取るように $\theta$ を調整してみるという発想になります。そうすれば、 統計モデルから見て データが実際に発生したことを都合よく説明できるというわけです。

重要なことを言いました。今、

最尤推定では、手元にデータが集まったという事実を、都合よく説明する統計モデルの調整をしている と述べたのです。

私達が実際に得られたデータが果たして着目している現象を網羅しているのでしょうか。思い出してみると、網羅してないどころか関係ない現象まで含んでいる可能性すらあるのです。

f:id:s0sem0y:20190928134211p:plain

更に、統計モデルというのは着目している現象を表せるようないい感じのバーチャルの世界にすぎないことも言いました。もしもそのバーチャルの世界の作り方が下記のような状況であったら、最尤推定はどうなってしまうでしょうか(変なデータを説明しようと頑張ってしまうのではないだろうか)。

f:id:s0sem0y:20190928141652p:plain

バーチャルの世界の統計モデルからは、灰色の知りたい現象という枠は見えていません。ただただ、オレンジ色のデータしか見えていないのです。そして、いま図示の関係で位置関係が見えていますが、一般にデータや分布の近さを測るのは容易ではありません。 勝手に作ったバーチャルの統計モデルがまともであるか、そして、その統計モデルをパラメータ推定によって決定した結果がまともであるかを知るのは困難なのです。

ただ、事実として言えるのは、最尤推定とは「(勝手に作った)バーチャルの統計モデルが、着目した現象を十分に表現できるかわからない)データが発生したことを都合よく表現できるように適合させること」 なのです。

正則化による統計モデルの制限

さて、ここまでは最尤推定の恐ろしさを正しく理解するためにオーバーな説明をしています。実際には統計モデルを仮定する段階で、ある程度現実の現象を説明できるように設計するはずであり(それができないなら、分析などしないほうがマシである)、そのようになっている前提で話をします。

特に近年の深層学習を統計モデルに導入した際には、モデルの表現力が高いために下記のような関係になっていることが想定できます。

f:id:s0sem0y:20190928142636p:plain

要するに、割と何でもかんでも表現できるぜ!という状況になっているということになります。そうすると、もしも仮に全然関係ないデータが迷い込んでしまった状況で、最尤推定を実行してしまえば悲惨な結果が待っていることが簡単に想像できるでしょう(そうでなくとも、データにノイズは付きものであり、ノイズを学習しても仕方がない)。

そこで正則化というモデルの表現力を制限する試みをします。これは単純に、統計モデルが表現できる範囲を小さくする。すなわち、図で言うところ青い領域を小さくすることに相当します。

f:id:s0sem0y:20190928143013p:plain

もちろんこれも万能ではありません。どういうふうにモデルが小さくなり、そしてその結果、小さくなった領域が着目した現象を有利に捉えるように働くかがわからないからです。

ハイパーパラメータの調整

ところで、最尤推定というのはデータに対する統計モデルの適合度を良くしていくというものでした。ここでは具体的にどのように良くしていくかというアルゴリズムについては言及されていません。いま、そのようにパラメータを求めるための手続きを学習アルゴリズムと呼ぶことにします。

学習を実施するときには、勝手に作った統計モデル $p(X \mid \theta)$ の $\theta$ を調整するアルゴリズム

$$ F: \theta, p, \alpha \mapsto \theta $$

というものを考えておきます。ここで $F$ を学習アルゴリズムと呼んで、現在のパラメータ $\theta$ と仮定した統計モデル$p$、そしてハイパーパラメータ $\alpha$ を引数に取って、新しい$\theta$ を返してくれる関数だと思いましょう(なんで統計モデル $p$ が引数かというと、統計モデルが正規分布なのかガンマ分布なのかによってパラメータの調整のされ方が違うとしているから)。

ハイパーパラメータは正則化係数だったり学習率だったりするかもしれないし、兎にも角にも、学習アルゴリズムが統計モデルのパラメータを調整しており、そして学習アルゴリズムの振る舞いが $\alpha$ で制御されていると解釈してください。

さて、勝手に作った統計モデルが学習された後、どういう形状に決定されるかは学習アルゴリズム $F$ に掛かっているとしましょう。

すると、学習アルゴリズムがそもそも良かったんですか?ということが気になるようになってきます。それを評価するために検証データなるものを別途準備しておくことします。

f:id:s0sem0y:20190928144451p:plain

そうすることで学習アルゴリズム自体が良かったのかを評価することができます。

とはいうものの、ここでいう学習アルゴリズムは、ハイパーパラメータを含む何かくらいの話である。例えば「勾配法」という学習アルゴリズムを使うと決めていたとする。統計モデルに正則化項を追加した場合に勾配法を用いれば、学習の更新に使われる勾配が変わる。同じ勾配法なんだけども、正則化項の具合によって勾配が変わるから、これを「学習アルゴリズムを変えた」と思って話をしている。ともかく学習の振る舞いが変わるような調整を入れれば、それを学習アルゴリズムを変えたと表現しているだけの話で難しく考えなくても良い。要は、統計モデルで推定したいパラメータと、それ以外の手で調整しているパラメータの評価を分離しているということである

また、検証に使うデータと訓練に使うデータを入れ替えながら、複数回検証を行うのを交差検証と呼びます。

このとき、統計モデル自体はあれこれ変えていないのですから、検証をしてみることで評価値が変化するのはおそらく学習アルゴリズム(ハイパーパラメータの調整)由来ということでしょう。私達は相応の統計モデルを学習させる、都合の良い学習アルゴリズムの選定をしたということです。

ところで、この検証による評価が最も良かった学習アルゴリズム(ハイパーパラメータの設定)とその時に得られた統計モデルが、着目している現象を表すのに最も適しているかはわからないということも十分に把握しておくべきです。

なぜなら、推定を行うというのは所詮手元のデータにモデルを適合させることにすぎないからです。今検証での評価が最も良い学習アルゴリズムとそれで得られる統計モデルは、単に手元のデータへの適合の具合が学習アルゴリズムで変わるときに、その中でも手元のデータへの適合の度合いが高いものを選んだ。 というだけです。言い換えるならば、検証を繰り返しているうちに、学習アルゴリズムの設定の方が、手元のデータに適合してしているということに過ぎないのです。

実はここでは学習アルゴリズムを選定しているということ自体は本質的ではない。重要なのは、訓練データがモデルのパラメータの調整に使われており、検証データはモデルの外にある手で設計する部分の調整に使われているということである。特に深層学習の検証を行う場合はハイパーパラメータを色々変えることに専念するが、別にモデルを変えても良い。例えば層を増やすことはハイパーパラメータを変えたとも言えるし、モデルを変えたとも言える。なので仮定する統計モデルを変えてみても良いし、回帰モデルの関数を変えても別に良いのである。

最終評価

そこで、最終的にはテストデータと呼ばれる全く統計的推定にも学習アルゴリズムの選定にも用いられていないデータを使って「ただ一度だけ」評価を行います。もしもこのテストデータに対する評価を見て「やり直し」をしたとなれば、それは「テストデータ」が「学習アルゴリズムの選定のための検証データ」に使われたということになってしまいます。

そして、恐ろしいことに、このテストデータに対する評価が良かったからと言って、理論的には着目している現象に対して最も良いモデルが得られていることを保証することはできないのです。

そんなことは少し考えれば分かるように、下記の図のようにテストデータが取られていたらどうでしょうか。

f:id:s0sem0y:20190928150010p:plain

私達は着目している現象の真の分布を知らないのですから、テストデータがまともかもわかりません。 まあ、こんなことはよっぽど無いにしても、ではテストデータが着目している現象を完全に網羅しているかもわからないのです。

とは言っても作業としてできることはここまででしょう。

例えば機械学習コンペなどでは、モデルを提出して、テストデータの評価値を何度か知ることができてしまう。もちろん、評価値を知ったところでテストデータの個々のデータに対する答えは知らないのだから、学習に直接入れることはできない。そうだとしても上記のように、評価値がよくなったのかどうかを知ることができれば、学習アルゴリズムの選定の参考にはできてしまう。だからその時点でそのデータは本当の意味でのテストデータの資格を失う(検証データを自前で作る場合にはその答えも知っていることが多いため、例えば交差検証のように、時には訓練データとして使うということもできる点で、利便性は違うが)。そういうわけで機械学習コンペでは、提出を何度か行うことできるようなデータと、最終評価に使う本当のテストデータは分けられている(はず)。提出の回数に制限が行われているため、評価値を知る機会が少ないというだけで、ほとんど立場としては検証データと変わらない。

(補足)ベイズ推論

いま、統計モデル $p(X \mid \theta)$ に対して、手元に発生したデータに適合するようなパラメータ $\theta$ を見つけることで形状の決定を行うことを学習・推定という言葉で表してきました。しかし、ベイズ推論の枠組みでは、$\theta$ を1つ決定してしまうのではなく、$\theta$ も所詮確率変数であると考えて、 $p(\theta \mid X)$ とデータによる条件付き分布で表現するという試みをします。

そして、統計モデル $p(X \mid \theta)$ が $p(\theta \mid X)$ で重み付けされたものを $\theta$ で積分消去したものを「ベイズ予測分布」と呼びます。これは統計モデルの形状を決定する $\theta$ が確率変数である、その確率分布がデータ $D$ による条件付き分布の形で得られるのだから、

$$ p(X=x _ {new} \mid X = D)=\mathbb E _ {p(\theta \mid X = D)} \left[ p(X=x _ {new} \mid \theta) \right] = \int _ x p(X=x \mid \theta) p(\theta \mid X = D) {\rm d} \theta $$

と統計モデルをパラメータの従っているであろう分布で期待値計算してしまうということに相当します。

理論的な学習の評価

さて、上記では機械学習に使われている実践的な話をしましたが、機械学習の理論では本来知りたい現象に対して、統計モデルがどんな具合であるかを評価する「汎化誤差」というものと、手元のデータに対して統計モデルがどんな具合であるかを評価する「訓練誤差」というものが明確に区別されています。

今、本来知りたい現象の真の分布 $q(X=x)$ で、勝手に作った統計モデル $p(X=x)$ とすれば、汎化誤差は

$$ G = - \int _ x q(X=x)\log p(X=x) {\rm d}x $$

と書かれます。これは、確率分布 $q(X)$ と $p(X)$ の隔たり具合いを評価するKLダイバージェンスと定数項を除いて一致します。これは見方を変えると

$$ G = \mathbb E _ {q(X=x)} \left[ - \log p(X=x) \right] $$

であり、統計モデルのエントロピーの期待値を真の分布で計算したものになります。当然、真の分布から $X$ をサンプリングすることはできないのですから(なぜなら真の分布を知らないから)、期待値を計算することもできません。なので、代わりに実際に手元に得られたデータで、期待値計算を肩代わりします。要するに、サンプル平均をとってしまうということです。

$$ T = \frac{1}{N} \sum _ i ^ N \left[ - \log p(X = x _ i) \right] $$

これを訓練誤差と呼び、これはこれまでの話に結びつけるならば、データ尤度関数の対数を取り、符号を反転したようなものになっています。我々はこの訓練誤差をいつも小さくしていたのです。

これまでの話との関連

訓練誤差を下げるのが通常の学習です。本当は汎化誤差を下げたいのですがそれを評価するすべが無いのです。 ところで、これまでの話をふりかえれば、まず統計モデル $p$ を作ること自体が現象の真の分布を表しうるかわからなくなるという点で、既に情報を失っていると言いました。これは最初に見たとおり

f:id:s0sem0y:20190928141652p:plain

のような関係になっており、もはや汎化誤差を評価できたとしても、これを小さくするには限界があるということです。

次に、統計モデルをある程度妥当に仮定できたとしたときに、パラメータを推定するという話をしました。しかし、パラメータの推定は手元のデータでしか行えないのです。これが訓練誤差$ T = \frac{1}{N} \sum _ i ^ N \left[ - \log p(X = x _ i) \right] $を最小化しているということになります。

本当は

$$ G = \mathbb E _ {q(X=x)} \left[ - \log p(X=x) \right] $$

を最小化したいのです。これは要するに期待値計算を勝手にサンプル平均に置き換えたときに「訓練サンプルデータが真の現象を捉えるに至っているか」が重要になるということです(当然、そんなことは知る由もないが)。ビッグデータで深層学習が活躍しているのも、訓練データが増えたおかげで真の現象を表現する割合が増えているからだと言えるでしょう。そのような状況であれば、兎にも角にも表現力の高いモデルが活躍します(とはいっても学習の効率や、表現力の有利不利はある。やけに複雑な現象を機械学習に丸投げしようとしたときには、そもそも従来の説明重視のモデルは表現力不足であったりする。確かに深層であるということが有利に働くケースがあるということを、研究されている方もたくさんにいる。)。

汎化誤差の近似

我々が学習で最小化できるのは訓練誤差だけであるが、せめて学習済モデルを評価するときに汎化誤差に近いものを見積もれないだろうかと考えたくなります。すなわち汎化誤差の近似を得たいということです。

これがいわゆる「情報量基準」と呼ばれるものたちであり、赤池情報量基準(AIC)などはこのようなモチベーションで生まれました。AICも万能ではなく、評価できるバーチャルの世界(統計モデルの種類)が制限されていることに注意が必要です。 その適用範囲を広げたのが、広範囲に使える赤池情報量基準(WAIC)であり、渡辺澄夫によって提案されました。

また、1個抜き交差検証などもある種の汎化誤差の近似になることが知られています。

最後に

小難しい話になってしまいましたが、要するに推定や学習というのはかなり脆弱であるということを知ってほしかったのです。 特にデータが少量の場合、真の現象を捉えるための分析は困難を極めます。ほとんどの分析者がそのようなデータと戦わなくてはなりません。分析者になりたいと思ったならば、そういう道を進まねばなりません。

気楽ではないのです。