学習しすぎも良くない?AIの「過学習」とは

AIの賢さは学習によって担保されています。
算数ドリルをしたことがない子にいきなり足し算の式を見せても訳が分からないのと同じように、AIが何かを判断するためには相応のデータをあげなくてはなりません。

では学習させればさせるだけ賢くなるのでしょうか。今回は学習をし過ぎる「過学習」という概念の紹介です。

過学習ってどういうこと?

AIの学習には学習用のデータが存在します。先の例でいうところの「算数ドリル」のように、AIが学習するためにはデータを用意しなくてはなりません。
また、学習データは文字通り学習用のデータに過ぎず、実際にはAIは学習データにはないまだ見ぬデータに対しての性能を高めていく必要があります。

この学習データ以外のデータに対するAIの性能を汎化性能といいます。
汎化性能を高めることがAIモデルを作る最終目標にあたるわけですね。

100問の算数ドリルを学習させて足し算と引き算を学ばせるとしましょう。
もちろんどの程度身についたかを確認するためのテストは算数ドリルとは別に問題をつくることでしょう。

しかし、AIにこの学習をさせると100問の問題と答えを丸暗記してしまったかの様な学習をする可能性があります。
その結果として、算数ドリルに存在したそのままの問題は解けるけれど、数字が1違うだけの別の問題は解くことができないといった事態が発生します。
このように学習データにだけ適応した学習が進んでしまい、汎化性能が下がってしまうことを過学習といいます。
(もちろん、実際には足し算や引き算程度の問題では敢えて起こそうとしない限りは発生しません)

過学習を検知するために、学習用のデータとは別に検証用データを用意し、学習中の精度の変化を確認します。

また、過学習は過剰適合(オーバーフィッティング)という別名もあります。
こちらの方が実際に起きていることのイメージに近いですね。

どうやって対策すればいい?

学習させないと性能は上がらないのに、学習させることで汎化性能が落ちてしまう…
この矛盾しているかのようにも思える過学習の防止策には次のようなものがあります。

1.データを増やす

過学習防止にデータを増やすことは効果的です。
簡単な話、「学習データだけに適応した結果」が学習データ以外にも適応していればよいのです。
学習データがそれ以外のデータを網羅しているといえるほどあるのなら過学習は問題となりません。
ただデータを増やすということも簡単なことではないので、これですべて解決ともいきません。

2.モデルを簡単なものにする

モデルの複雑さは過学習を起こす原因であるとされています。
とはいえ単純なモデルにしすぎるとそもそも精度は上がらず、問題を解決できなくなります。
問題にあった複雑さを持たせるというのは難しいことですが、過学習を起こしている場合は問題に対してモデルが複雑過ぎる可能性があります。

3.極端な学習を食い止める

モデルの学習は言ってしまえばたくさんのパラメータ(変数)を更新していく作業です。
極端な値をとるパラメータの重みを下げたり、無視したりするという手法です。
これを正則化といいます。


モデルの複雑さを低めるDropout、分割交差検証など過学習防止についてはこの他にもさまざまな技術・手法が存在します。
いかにして過学習を食い止めるか、これがモデルの汎化性能向上につながるのです。

ライター:H.I