⏹️ STEP 15: Early Stoppingとコールバック
過学習する前に自動で学習を止める実務必須のテクニック
📋 このステップで学ぶこと
- コールバック(Callback)とは?
- Early Stoppingの仕組みと設定
- ModelCheckpointで最良モデルを自動保存
- ReduceLROnPlateauで学習率を自動調整
- TensorBoardで学習を可視化
- 実務での組み合わせパターン
🔔 1. コールバック(Callback)とは?
1-1. コールバックの定義
コールバック(Callback)とは、学習中の特定のタイミングで自動的に実行される処理のことです。
コールバックは「車の安全機能」のようなものです。
Early Stopping = 自動ブレーキ
→ 危険を検知したら自動で止まる
ModelCheckpoint = ドライブレコーダー
→ 重要な瞬間を自動で記録
ReduceLROnPlateau = クルーズコントロール
→ 状況に応じて速度を自動調整
1-2. コールバックが実行されるタイミング
1-3. 主要なコールバック一覧
| コールバック | 機能 | 用途 |
|---|---|---|
| EarlyStopping | 改善が止まったら学習を終了 | 過学習防止 |
| ModelCheckpoint | モデルを自動保存 | 最良モデルの保存 |
| ReduceLROnPlateau | 改善が止まったら学習率を下げる | 学習の安定化 |
| TensorBoard | 学習ログを記録 | 学習の可視化 |
| LearningRateScheduler | 学習率をスケジュールに従って変更 | 学習率の細かい制御 |
⏹️ 2. Early Stopping
2-1. Early Stoppingとは?
Early Stoppingは、検証データの性能が改善しなくなったら学習を自動的に終了するコールバックです。
エポック数を多く設定しても、過学習が始まる前に自動で止まるので安心!
「何エポック学習すればいいか分からない」という問題を解決します。
2-2. Early Stoppingの動作
以下の図は横スクロールできます。
2-3. Kerasでの実装
- monitor:監視する指標(’val_loss’, ‘val_accuracy’など)
- patience:改善がなくても待つエポック数
- min_delta:改善とみなす最小の変化量
- mode:‘auto’, ‘min’, ‘max’(指標によって自動判定)
- restore_best_weights:最良の重みに戻すかどうか
Epoch 1/100 375/375 - val_loss: 0.1523 Epoch 2/100 375/375 - val_loss: 0.1245 ... Epoch 15/100 375/375 - val_loss: 0.0823 ← 最良 Epoch 16/100 375/375 - val_loss: 0.0831 ... Epoch 20/100 375/375 - val_loss: 0.0892 Epoch 20: early stopping ← 5エポック改善なしで終了 Restoring model weights from the end of the best epoch: 15.
これをTrueにしないと、学習終了時点の重み(過学習した重み)が残ります。
Trueにすると、最も検証性能が良かった時点の重みに自動で戻ります。
💾 3. ModelCheckpoint
3-1. ModelCheckpointとは?
ModelCheckpointは、学習中にモデルを自動的にファイルに保存するコールバックです。
- 最良モデルの保存:検証性能が最も良い時点のモデルを保存
- セッション切断対策:Google Colabで切断されても、途中経過が残る
- 実験の記録:異なる設定のモデルを比較できる
3-2. Kerasでの実装
- filepath:保存先のパス
- monitor:監視する指標
- save_best_only:最良の時だけ保存
- save_weights_only:重みのみ保存(Falseならモデル全体)
Epoch 1/50 Epoch 1: val_accuracy improved from -inf to 0.9521, saving model to best_model.keras Epoch 2/50 Epoch 2: val_accuracy improved from 0.9521 to 0.9678, saving model to best_model.keras Epoch 3/50 Epoch 3: val_accuracy did not improve from 0.9678 ... Epoch 15/50 Epoch 15: val_accuracy improved from 0.9756 to 0.9789, saving model to best_model.keras ... → 改善があるたびに自動保存される!
3-3. Google Driveへの保存(Colab対策)
📉 4. ReduceLROnPlateau
4-1. ReduceLROnPlateauとは?
ReduceLROnPlateauは、学習が停滞したら学習率を自動的に下げるコールバックです。
学習初期:全力疾走(高い学習率)
→ 大きく改善できる
学習後期:ペースダウン(低い学習率)
→ 細かい調整で最適化
ReduceLROnPlateauは「疲れてきたら自動でペースを落とす」機能!
4-2. Kerasでの実装
Epoch 10/100 val_loss: 0.0823 Epoch 11/100 val_loss: 0.0825 Epoch 12/100 val_loss: 0.0830 Epoch 13/100 val_loss: 0.0828 Epoch 13: ReduceLROnPlateau reducing learning rate to 0.0005 ← 学習率が 0.001 → 0.0005 に自動調整された! Epoch 14/100 val_loss: 0.0795 ← 学習率を下げたら改善した!
📊 5. TensorBoard
5-1. TensorBoardとは?
TensorBoardは、学習の過程をグラフで可視化するツールです。
- 損失(Loss)の推移
- 精度(Accuracy)の推移
- 学習率の変化
- モデルのグラフ構造
5-2. Google Colabでの使い方
SCALARS タブ:損失と精度の推移グラフ
GRAPHS タブ:モデルの構造図
HISTOGRAMS タブ:重みの分布
🎯 6. 実践的な組み合わせパターン
6-1. 推奨される組み合わせ
Early Stopping + ModelCheckpoint + ReduceLROnPlateau
この3つを組み合わせると、ほぼ自動で最適な学習ができます!
6-2. 完成コード
Epoch 1/100 Epoch 1: val_loss improved from inf to 0.1523, saving model ... Epoch 15/100 Epoch 15: val_loss improved from 0.0845 to 0.0812, saving model ... Epoch 25/100 Epoch 25: ReduceLROnPlateau reducing learning rate to 0.0005 ... Epoch 35/100 Epoch 35: early stopping テスト精度: 0.9823 → 自動で最適な学習ができた!
6-3. Google Colab対応版(完全版)
📝 STEP 15 のまとめ
- コールバック:学習中に自動で実行される処理
- Early Stopping:改善がなければ学習を自動終了(restore_best_weights=True必須)
- ModelCheckpoint:最良モデルを自動保存
- ReduceLROnPlateau:停滞したら学習率を自動で下げる
- TensorBoard:学習の可視化ツール
- 黄金の組み合わせ:EarlyStopping + ModelCheckpoint + ReduceLROnPlateau
これでPart 3「学習の最適化」が完了しました!
次のSTEP 16からはPart 4「畳み込みニューラルネットワーク(CNN)」に入ります。
画像認識の世界を探求しましょう!
📝 練習問題
Early Stoppingのパラメータ
Early Stoppingのpatienceパラメータの意味として、正しいものを選んでください。
- A. 学習を開始するまで待つエポック数
- B. 改善がなくても学習を続けるエポック数
- C. 学習率を下げるまでのエポック数
- D. モデルを保存する間隔
patienceは「待機エポック数」
restore_best_weightsの重要性
Early Stoppingでrestore_best_weights=Trueにする理由として、正しいものを選んでください。
- A. 学習を高速化するため
- B. メモリ使用量を削減するため
- C. 最も検証性能が良かった時点の重みに戻すため
- D. モデルのサイズを小さくするため
最良の重みに戻す重要な機能
ModelCheckpointの設定
検証精度(val_accuracy)が最も高いモデルだけを保存したい場合、正しい設定を選んでください。
- A. ModelCheckpoint(‘model.keras’, monitor=’val_accuracy’, save_best_only=True, mode=’min’)
- B. ModelCheckpoint(‘model.keras’, monitor=’val_accuracy’, save_best_only=True, mode=’max’)
- C. ModelCheckpoint(‘model.keras’, monitor=’val_loss’, save_best_only=True, mode=’max’)
- D. ModelCheckpoint(‘model.keras’, monitor=’val_accuracy’, save_best_only=False, mode=’max’)
各選択肢の問題点
ReduceLROnPlateauの動作
ReduceLROnPlateau(factor=0.5, patience=3)の設定で、学習率が0.001から始まった場合、 3エポック連続で改善がなかったときの新しい学習率はいくつになりますか?
- A. 0.003
- B. 0.0015
- C. 0.0005
- D. 0.0001
factorは学習率に掛ける値
コールバックの組み合わせ
以下のコールバックの組み合わせで、問題があるものを選んでください。
- A. EarlyStopping(patience=10) + ModelCheckpoint(save_best_only=True)
- B. EarlyStopping(patience=5) + ReduceLROnPlateau(patience=10)
- C. ModelCheckpoint + ReduceLROnPlateau + TensorBoard
- D. EarlyStopping(patience=10) + ReduceLROnPlateau(patience=5)
patienceの設定に注意
学習メモ
ディープラーニング基礎 - Step 15