過学習とは
過学習とは、機械学習の振る舞いの 1 つで、モデルが学習データにあまりに適合しすぎて、新しいデータにどのように対応したらよいかわからなくなることです。過学習は、以下の理由で発生する可能性があります。
- 機械学習モデルが複雑すぎる場合。学習データの非常に微妙なパターンを記憶してしまい、うまく一般化できなくなった。
- モデルの複雑度に対して学習データサイズが小さすぎる、または関係がない情報が大量に含まれている。
モデルの複雑度を管理し、学習データセットを改善することで、過学習を回避できます。
過学習と未学習
未学習は、過学習の逆の概念で、モデルが学習データとうまく適合しないか、新しいデータに対してうまく一般化できないことを指します。過学習と未学習は、分類モデルと回帰モデルの両方に存在する可能性があります。次の図では、分類決定境界と回帰の線が、過学習モデルでは学習データに近づきすぎ、未学習モデルでは十分に近づいていない様子が示されています。
過学習の分類モデルと回帰モデルは、正しく学習したモデルと比較して、学習データを過剰に記憶してしまいます。
学習データに対する機械学習モデルの計算上の誤差だけを見ると、過学習は未学習より検出するのが困難です。そのため、過学習を回避するには、機械学習モデルを使用する前にテストデータで検証することが重要です。
誤差 |
過学習 |
正しい学習 |
未学習 |
学習 |
低 |
低 |
高 |
テスト |
高 |
低 |
高 |
学習データに対する過学習モデルの計算上の誤差は小さいものの、テストデータに対する誤差は大きくなっています。
MATLAB® と Statistics and Machine Learning Toolbox™ および Deep Learning Toolbox™ を使用すると、機械学習モデルおよびディープラーニング モデルの過学習を回避できます。MATLAB には、モデルの過学習を回避するために特別に設計された関数と手法が用意されています。これらのツールをモデルの学習や調整を行う際に使用することで、過学習からモデルを保護することができます。
モデルの複雑度を軽減して過学習を回避する方法
MATLAB を使用すると、機械学習モデルやディープラーニング モデル (CNN など) をゼロから学習したり、事前学習済みのディープラーニング モデルを利用したりすることができます。過学習を回避するには、モデル検証を行ってデータに適した複雑度のモデルを選択するか、正則化を用いてモデルの複雑度を軽減させます。
モデル検証
過学習されたモデルの誤差は、学習データに対して計算された場合、低くなります。新しいデータを導入する前に、別のデータセット (検証用データセット) でモデルを検証することが推奨されます。MATLAB の機械学習モデルの場合、関数 cvpartition を使用して、データセットを学習セットと検証セットにランダムに分割できます。ディープラーニング モデルの場合、学習中に検証精度を監視することができます。モデルの選択とハイパーパラメーターの調整により、モデルの検証精度をより適切に測定することで、モデルが新しいデータに対応する際の精度向上が期待されます。
正則化
正則化は、機械学習モデルにおける統計的な過学習を回避するために用いられる手法です。正則化アルゴリズムは通常、複雑さまたは粗さのいずれかに対してペナルティを適用することで機能します。正則化アルゴリズムでは、モデルに追加情報を導入し、モデルをより簡素で正確なものとすることにより、多重共線性や冗長な予測子を処理することができます。
学習データセットを強化して過学習を回避する方法
交差検証と正則化ではモデルの複雑度を管理することで、過学習を回避します。もう 1 つの手法は、データセットの改良です。ディープラーニング モデルは特に、過学習を回避するために大量のデータが必要です。
データ拡張
データ生成
合成データの生成も、データセットを拡張する手法の 1 つです。MATLAB では、敵対的生成ネットワーク (GAN) や デジタルツイン (シミュレーションによるデータ生成) を用いて、合成データを生成できます。
データクリーンアップ
データのノイズは過学習の原因になります。望ましくないデータ点を削減するための一般的な手法には、関数 rmoutliers を用いてデータから外れ値を除去する方法があります。
製品の使用例と使い方
ソフトウェア リファレンス
過学習に関するよくある質問 (FAQ)
過学習とは、機械学習の振る舞いの 1 つで、モデルが学習データにあまりに適合しすぎて、新しいデータにどのように対応したらよいかわからなくなることです。過学習は多くの場合、モデルが複雑すぎるか、学習データが少なすぎるか、あるいはノイズが多すぎるために発生します。
過学習とは、モデルが学習データに過度に依存し、新しいデータに対して十分に一般化できないことを指すのに対し、未学習とは、モデルが学習データにも新しいデータにもうまく適合しないことを指します。
学習データに対する過学習モデルの計算上の誤差は小さいものの、テストデータに対する誤差は大きくなっています。しかし、学習データに対する機械学習モデルの計算上の誤差だけを見ると、過学習は未学習より検出するのが困難です。新しいデータを導入する前に、別のデータセット (検証用データセット) でモデルを検証することが推奨されます。
交差検証は、機械学習アルゴリズムが学習していないデータセットに対する性能評価に用いられるモデル評価手法です。過度に複雑ではなく、過学習を引き起こさないアルゴリズムを選択するうえで役立ちます。
正則化は、複雑さや粗さに対してペナルティを課すことで過学習を防ぎ、モデルをより簡素で正確なものにし、多重共線性や冗長な予測子を処理します。
MATLAB では、機械学習モデル向けに、LASSO (L1 ノルム)、Ridge (L2 ノルム)、Elastic Net を、ディープラーニング モデル向けに L2 正則化係数やドロップアウト層を提供しています。
データ拡張とは、ランダム化した既存データをデータセットに追加することで、学習データセットを人為的に拡張する手法です。データの可用性が限られている場合に特に有用です。
はい、外れ値を除去し、データのノイズを減らすことは、過学習の防止に役立ちます。データにノイズがあると、モデルが無関係のパターンを記憶してしまう一因となるからです。