お勉強ドットねっと

機械学習の学習不足と過学習

study image

機械学習のモデルを訓練していると
「学習不足」や「過学習」が起こることがあります。

この二つのコンセプトはとても重要なので
知っておく必要があります。

この記事では以下のポイントを解説します。

    目次
  1. 学習不足とは
  2. 学習不足対策
  3. 過学習とは
  4. 過学習対策
  5. 最後に

学習不足とは

「学習不足」とは文字通り、学習が上手くいかずに
トレーニングやバリデーションによる評価が低い状態のことです。

英語では、
「Underfitting」
と言います。

「fit」と言う言葉には「適合させる」との意味があり、
機械学習ではモデルをデータに適合させるので使われています。

つまり、モデルをデータにうまくフィット(適合)できていない状態。

「Underfitting」は「適合不足」の意味なので、
機械学習の文脈を踏まえて「学習不足」と訳されます。

学習不足対策

原因としては主に二つあります、

  • データが少なすぎる
  • モデルが単純すぎる

ので対策としては、

  • データを増やす
  • 違うモデルを試す

といったものです。

Kaggleではデータを増やせないし、外部データは使えないので、
モデルをより複雑なものに変えたりして試すことになる。

たとえば、Linear regression(線形回帰分析)から
SVM(サポートベクターマシン)に変更するとか。

異なるモデルは、データから取り出す特徴量が異なるという事なので
データにより適合できる可能性があります。

モデルに調整可能なパラメータがある場合は、
それらをいじってみるのもモデルを変更していることになり、
違うモデルを試すのと同様に学習不足対策になる可能性があります。

過学習とは

過学習は英語で、
「Overfitting」
と言います。

つまり、モデルがトレーニングのデータに
過剰に適合してしまう場合に起こります。

トレーニングの点数は高いのにバリデーションの点数が低い場合は
過学習が起きている可能性が高いです。

データから抽出される特徴量にはより一般的に有効なものと
そうでないものがあります。

たとえば、
トレーニングセットとバリデーションセットのデータは同じではないので、
トレーニングセットでしかみられない特徴があります。

モデルがその特徴を学んでしまうとトレーニングセットでは高得点が出せるのに
バリデーションセットの点数が低いという現象が起こります。

過学習対策

原因としては主に二つあります、

  • データが少なすぎる
  • モデルが複雑すぎる

ので対策としては、

  • データを増やす
  • 違うモデルを試す
  • 正則化する

といったものです。

データが少なくてモデルが複雑だと
たくさんの例外的な特徴量を適合できてしまうので
あたかも、モデルがデータを丸暗記した状態になります。

それを防ぐ方法としてデータを増やしてやると
モデルがより普遍的な特徴の認識をするようになるので
過学習が抑えられる可能性があります。

画像データなどの場合は、
ノイズを加えたり、回転や反転したり、
明るさ調整や、拡大縮小したりして、
データのバリエーションを増やすのも有効です。

これは英語で「Data augmentation」と言われ、
日本語では「データ拡張」とか「データ増強」あるいは
「水増し」となります。

また、データの量を調整できない場合や
データを増やしても過学習が起きている場合は
モデルを変更したり、パラメータを調節してより単純なものにすれば、
例外的な特徴までカバーできなくなるので過学習が起こりにくくなります。

最後の正則化というのは、モデルの内部で使われるパラメータが
あまり大きくならないようにする手法です。

ある特定のパラメータが大きな影響を持つようになると
そのパラメータに反応する特定の特徴量に結果が左右されてしまうので
これを防ぐというわけです。

ある意味、モデルの単純化でもあります。

「scikit-learn 正則化」で検索してみたください。

注意:「正則化」と「正規化」は別物です。

最後に

理論ばかり話してもなかなか頭に入らないと思います。

自分で検索して調べたり、プログラムを書いて実証してみてください。

あとでまたこの記事を読むと頭の整理に役立つかもしれません。

次は、「損失関数」と「最適化」の概念を学びましょう。

最適化と損失関数