今回は前回の記事の続きの過学習Overfittingの対策」を紹介します。過学習と未学習の説明はこちらです。
訓練誤差とテスト誤差の理論
学習が進むほど訓練誤差が低下していきます。つまりテストデータに対する予測精度は向上するが、テストのデータセットに入っていないデータに対する予測精度が下がり、テスト誤差が上がってしまうものです。いわゆる過学習(Over Fitting)という状態になっていきます。
過学習は訓練データとテストデータの影響があります。訓練データが少ないほど、訓練誤差は小さく、汎化誤差は大きくなります。訓練データが十分に多いと、訓練誤差も汎化誤差も、ノイズの強さで頭打ちになります。
過学習の対策 Overfitting prevention
1)データセットを増やす
トレーニングデータが多ければ多いほど、それが過剰適合する可能性がより低いになります。 最初の過学習対策、過学習に対して最も効果がある対処法は訓練データを増やすことです
2)Data augmentation & Noiseの加工
データセットを増やすことは面倒と手間のことです。またデータセットを増やすことができない場合もあります。その場合は Data augmentation と Noiseのデータ加工の方法が役に立ちます。学習用のデータに対し人工的なノイズなどを付加した画像を生成し,生成した画像を元の学習用データに追加することで性能の向上が期待される技術になります。
前回の記事の「Data Augmentationの解説」はこちらです。
3)単純なモデルへ変化する
複雑すぎるモデルは過学習の原因の事があります。モデルはあまりにも強力であるかもしれません。 そのモデルの複雑さを軽減することができます。推定量の数を減らしたり、モデルのパラメーターを変更したりするには、モデルを単純にしても当てはまりませんが、データから学習するには複雑にすることができます。
これには、モデルをより軽量にし、より速く訓練し、そしてより速く走らせるという利点もあります。
4)早期停止
早期停はニューラル ネットワークの過学習対策です。早期停止とは、基本的に、テストデータの損失が増加し始めたら(つまり検証精度が低下し始めたら)、トレーニングを停止することです。監視する値、監視する値について改善として判定される最小変化値、訓練が停止し,値が改善しなくなってからのエポック数のパラメーターを設定することができます。
5)L1 と L2 正則化
機械学習では、過学習を防ぐ方法として正則化が行われることが多いです。過学習を避けるためには、学習モデルの選択、特徴量・次元の選定およびそれらに対応した学習データの数を注意深く考慮して設定していく必要があります。正則化とは、複雑さが増すことに対するペナルティを設け、このペナルティを訓練誤差に加えた量が最も小さくなる学習モデルを求めるようにすることにより汎化性能を高めようとするものです。一般的に使用されるのは、L1正則化とL2正則化です。
L1正則化 特定のデータの重みを0にする事で、不要なデータを削除します。
L2正則化 データの大きさに応じて0に近づけて、滑らかなモデルです。
正則化の例はこちらです。
6)DropoutとDropConnect
ニューラルネットワークにおける過学習対策になりますが、DropoutとDropConnectです。
Dropoutは、設定した割合に応じて、ランダムにユニットを選択し、そのユニットの重みを「ゼロ」にします。
DropConnectは、上記の「ゼロ」を任意の重みに設定できます。さらに言うと、中間層の線形結合の「結合」に注目し、設定した割合に応じて、ランダムに「結合」を取り上げます。そして、結合に重みをかけて、活性化関数にかけます。
まとめ
今回は過学習対策を説明しました。過学習はデータサイエンティストの一般的な問題です。この記事で紹介したテクニックを使えば、過学習問題を克服して、良いモデルを作成することができるでしょう。