わかりやすく 過学習 とは
試験の前の日に、問題集の答えをまるごと覚えた友だちがいるとしましょう。まったく同じ問題が出れば、全部正解します。でも、数字だけ少し変えた問題が出ると、がらがらとくずれてしまいます。答えを覚えただけで、しくみを理解していなかったからです。機械学習にも、まったく同じ落とし穴があります。モデルが訓練データをまるごと覚えてしまうと、見た問題は100点なのに、はじめて見る問題はまちがえます。これを過学習といいます。
まるごと覚えると訓練の点数は満点
点が散らばっています。モデルの仕事は、この点の下にある流れを表すなめらかな曲線を見つけることです。でも、欲ばると、点を一つ残らず通るように、曲線をくねくね曲げることもできます。
そうすると、訓練の点はすべて曲線の上にのり、訓練の点数はまさに100点になります。完璧に見えますが、実は点の位置を覚えただけです。
ボタンを押して、点をまるごと覚えるくねくねした曲線をオンにしてみましょう。すべての点を通るので、訓練の正確さは100パーセントになります。
曲線はすべての点を正確に通り、訓練の点数は100点になりました。気分はよいですが、ここで止まってはいけません。実際のデータには、測るときにまぎれこんだ偶然のゆれ、つまりノイズがたいてい入っています。
すべての点を通る曲線は、本当の流れだけでなく、このノイズまでそのままなぞってしまったのです。覚えることがなぜ問題なのかは、新しい点を入れてみるとすぐに分かります。
新しいデータが来るとがらがら
覚えた曲線の本当の試験は、一度も見たことのない新しい点です。新しい点も訓練の点と同じ流れから来ているので、流れをうまくとらえた曲線なら、新しい点の近くもそこそこ当てられるはずです。
でも、覚えた曲線は訓練の点の間で大きく波打っているので、新しい点の近くでは、とんでもない高さを指してしまいます。見た問題は100点なのに、新しい問題では大きく外れるのです。
あいている丸を押して、新しい点を入れてみましょう。覚えた曲線はその場所で大きく外れ、はじめて見るデータに弱いことが分かります。
新しい点で、曲線は大きく外れました。訓練の点ではあれほど完璧だったのに、はじめて見る点の前では手も足も出ません。これが過学習の正体です。
答えだけを覚えた友だちが、数字の変わった問題でくずれるのと同じです。だから、本当に知りたいのは訓練の点数ではなく、はじめて見るデータでの点数です。はじめて見るデータでもよく当てる力を、汎化と呼びます。
訓練、検証、テストに分ける
はじめて見るデータで実力を測るには、データの一部を前もって取り分けて、かくしておかなければなりません。そこで、手もとのデータを三つに分けます。大部分は訓練データとしてモデルに学ばせ、一部は検証データとして残しておいて、学習のとちゅうでうまく進んでいるかを点検します。
残りのテストデータは最後まで手をつけず、いちばん最後に一度だけ見ます。そうしてはじめて、本当の新しい試験をまねた採点になります。
点を押して、訓練、検証、テストの箱に分けてみましょう。三つの箱が全部うまると、はじめて見るテストデータで評価する準備ができます。
データを三つのグループに分けました。かなめは、テストデータを学習のあいだ決して見せないことです。試験問題を前もって解いてしまえば、それはもう試験ではないからです。
検証データは、学習をいつ止めるかを決めるときにも使います。訓練の損失は減り続けているのに、検証の損失がまた上がりはじめたら、そこから覚えこみが始まったということなので、学習を止めます。これを早期終了といいます。
単純すぎず、複雑すぎず
では、三つのモデルをくらべてみましょう。単純すぎるモデルは、まっすぐな直線一本ですませようとして、点がえがく曲線についていけません。これは学習不足、つまり学びが足りない状態です。
複雑すぎるモデルは、点を全部覚えてしまって、新しいデータに弱くなります。その間のちょうどよいモデルは、点一つ一つではなく、全体を流れるパターンをなめらかにとらえます。
三つのモデルを順に押して、くらべてみましょう。単純すぎるモデルはあまり合わず、複雑すぎるモデルは覚えて波打ち、ちょうどよいモデルだけが新しいデータでもうまくいきます。
三つのモデルのちがいが、ひと目で分かりました。単純すぎるとパターンを見のがし、複雑すぎると覚えてゆれます。ちょうどよいモデルだけが、訓練データでも、はじめて見るデータでも、むらなくうまくいきました。
よい学習とは、訓練の点数を100点に引き上げることではなく、はじめて見るデータで安定してうまくいくことです。過学習を防ぐために、データをもっと集めたり、重みが大きくなりすぎないように罰点をあたえたりする方法も使われます。
まとめ
まとめるとこうです。点を全部覚えたくねくねした曲線は、訓練の点数だけが100点で、新しい点には弱くなります。これが過学習です。本当の理解とは、全体を流れるパターンをとらえることです。
だから、データを訓練、検証、テストに分けて、はじめて見るデータで実力を測ります。単純すぎず複雑すぎない、ちょうどよいモデルが、いちばんよく汎化します。
要点を順に押して振り返りましょう。(まるごと覚えると訓練だけ100点 → 新しいデータには弱い → 訓練・検証・テストに分ける → はじめて見るデータで本当の実力を測る)
これで、覚えることと本当に理解することのちがいが分かりました。訓練の点数が高いからといってよいモデルとはかぎらず、はじめて見るデータの前でもゆるがないことが大切です。
でも、パターンをうまくとらえるには、なによりもモデルに入れるデータがよくなければなりません。どんなデータを集め、その中からどんな特徴を選んで入れるかで、結果は大きく変わります。この話を、次のレッスン「データと特徴」で扱います。