早期終了(Early Stopping)は、学習を延ばしすぎて過学習に入る前に、検証データの性能悪化を手がかりに学習を打ち切る手法です。本記事は patience などの実装細部ではなく、試験で問われる「何を見て止めるか」「ドロップアウト・L2正則化との役割分担」「訓練曲線の読み方」に焦点を当てます。正則化記事とあわせて読むと整理しやすいです。
試験で問われる見方
○:早期終了は検証データの損失や評価指標を見て、過学習が始まる前に学習を止める(G-185、G-107)。訓練データだけでは不十分。
○:ドロップアウトと早期終了は別の正則化手法(G-168の(あ)ドロップアウト・(い)早期終了)。
○:過学習対策として正則化・データ拡張・早期終了・交差検証などを組み合わせて考える(G-008、G-112)。早期終了単体が万能ではない(G-205)。
×:訓練損失だけを見て打ち切る、学習を途中で止めると必ず汎化性能が上がる、などのすり替え。
なぜ必要か
ニューラルネットの学習では、エポックを重ねるほど訓練誤差は下がり続けることが多いです。しかしある時点を過ぎると、検証データでの性能が悪化し始めます——これが過学習の典型パターンです。
事前に「最適なエポック数」が分かることは稀です。早期終了は、検証性能を監視しながら学習の長さを自動調整する実用的な手段として試験に頻出します。
どう動くか
典型的な流れは次のとおりです。
- データを訓練・検証に分割する
- エポックごとにモデルを更新し、検証セットで性能を測る
- 検証損失が下がり止まったり上昇し始めたりした時点で学習を終了
- 検証性能が最も良かった直前の重みを採用する
ポイントは「訓練が完了した最後の重み」ではなく、検証で最良だった時点の重みを保存することです。フレームワークでは checkpoint や restore_best_weights などのオプションで実装されます。
参照する指標
| 指標 | 使い方 | 試験での注意 |
|---|---|---|
| 検証損失 | 最も一般的な監視対象 | G-185の正解パターン |
| 検証精度・F1など | タスクに応じた指標 | 損失と逆方向に動くこともある |
| 訓練損失だけ | × | 過学習の兆候を見逃す |
| テストデータ | 最終評価用 | 早期終了の判断に使うとリーク |
テストデータは最終的な性能見積もり用です。検証データで打ち切りを決め、テストは一度だけ評価するのが基本です。
他手法との違い
| 手法 | 働き | 制御するもの |
|---|---|---|
| ドロップアウト | 学習時にユニットをランダム無効化 | 各ステップのネットワーク構造 |
| L1/L2正則化 | 重みにペナルティを課す | 重みの大きさ |
| 早期終了 | 検証性能で学習を打ち切る | 学習の長さ(エポック数) |
| データ拡張 | 訓練データを人工的に増やす | 見えるデータの多様性 |
実務では複数を組み合わせます。試験では「ドロップアウト=重みペナルティ」などの説明すり替えに注意(正則化記事参照)。
すり替えに注意
| 誤った説明 | 正しい理解 |
|---|---|
| 早期終了は訓練損失が最小の時点で止める | 検証性能を基準にする(G-185) |
| 早期終了=ドロップアウト | 別手法。G-168で区別される |
| 早期終了すれば必ず汎化性能が上がる | 対策の一つ。データやモデル次第(G-205) |
| 交差検証と早期終了は同じ | 交差検証は評価手法、早期終了は学習打ち切り(G-112) |
よくある質問
ベストなエポック数は事前に分かる?
一般には分かりません。検証監視か早期終了で決めるのが実務的です。
早期終了は正則化の一種?
広い意味では過学習対策の一族です。L1/L2のように損失に項を足すのではなく、学習時間を制御します。
LLMの学習でも使う?
はい。検証セットでの損失やベンチマーク性能で打ち切る運用があります。ファインチューニングでも有効です。
patience(我慢)とは?
検証損失が改善しないエポックを何回まで待つかの設定です。小さすぎると早く止まり、大きすぎると過学習に入りやすくなります。