過学習: 損失曲線の解釈

すべての損失曲線が、モデルを初めてトレーニングしたときに次のようになれば、機械学習ははるかに簡単になります。

図 20: ML モデルをトレーニングする際の理想的な損失曲線を示すプロット。損失曲線は、y 軸に損失を、x 軸にトレーニング ステップ数をプロットします。トレーニング ステップ数が増えるにつれて、損失は最初は高く、その後指数関数的に減少し、最終的には最小損失に達して平坦になります。
図 20. 理想的な損失曲線。

残念ながら、損失曲線の解釈は難しい場合があります。このページの演習を解くには、損失曲線に関する直感を活用してください。

演習 1: 振動する損失曲線

図 21. 損失が平坦化しない損失曲線(y 軸に損失、x 軸にトレーニング ステップ数)。代わりに、損失が不規則に振幅します。
図 21. 振動する損失曲線。
図 21 に示す損失曲線を改善するには、次の3 つの方法があります。
データスキーマと照らし合わせて不適切な例を検出し、トレーニング セットから不適切な例を削除します。
はい。これはすべてのモデルで推奨される方法です。
学習率を下げる。
はい。トレーニングの問題をデバッグする際には、学習率を下げることがよくあります。
トレーニング セットを信頼できるサンプルのごく少数に減らします。
この手法は人工的に思えますが、実際には良いアイデアです。モデルが信頼できる少数のサンプルセットに収束すると仮定して、徐々にサンプルを追加し、損失曲線を振動させるサンプルを見つけることができます。
トレーニング セットのサンプル数を増やす。
魅力的なアイデアですが、問題が解決する可能性は極めて低いです。
学習率を上げる。
一般に、モデルの学習曲線に問題が示されている場合は、学習率を上げないでください。

演習 2. 急激なジャンプのある損失曲線

図 22: 損失曲線プロット。一定数のトレーニング ステップまで損失が減少し、その後トレーニング ステップが進むにつれて急増しています。
図 22. 損失の急増。
次のステートメントの2 つは、図 22 に示す損失の急増の考えられる原因を特定します。
入力データに 1 つ以上の NaN が含まれている(ゼロ除算によって生じた値など)。
これは、想像以上によくあることです。
入力データに急増する外れ値が含まれています。
バッチのシャッフルが不適切であるために、バッチに多くの外れ値が含まれることがあります。
学習率が低すぎます。
学習率が非常に低いとトレーニング時間が長くなる可能性がありますが、これは異常な損失曲線の原因ではありません。
正規化率が高すぎる。
正則化が非常に高いと、モデルが収束しない可能性がありますが、図 22 のような奇妙な損失曲線は発生しません。

演習 3. テスト損失がトレーニング損失から逸脱している

図 23. トレーニング損失曲線は収束しているように見えますが、一定数のトレーニング ステップ後に検証損失が増加し始めます。
図 23. 検証損失の急増。
トレーニング セットとテストセットの損失曲線の違いの理由を最もよく説明しているのは、次の記述のどれですか。
モデルがトレーニング セットに過学習している。
はい、おそらくそうです。考えられる解決策は次のとおりです。
  • 特徴の数を減らすなどして、モデルを簡素化します。
  • 正則化率を上げる。
  • トレーニング セットとテストセットが統計的に同等であることを確認します。
学習率が高すぎます。
学習率が高すぎると、トレーニング セットの損失曲線はこのようには振る舞わない可能性があります。

演習 4. 損失曲線が停止する

図 24. トレーニングで損失が収束し始め、その後、矩形波のように見える繰り返しパターンが表示される損失曲線のグラフ。
図 24. 一定数のステップ後に混沌とした損失が発生する。
図 24 に示す不規則な損失曲線の説明として最も可能性が高いのは、次の記述のどれですか。
トレーニング セットには、サンプルの繰り返しシーケンスが含まれています。
このような可能性もあります。サンプルを十分にシャッフルしていることを確認します。
正規化率が高すぎる。
これが原因である可能性は低いです。
トレーニング セットに含まれる特徴が多すぎます。
これが原因である可能性は低いです。