Epoch
機械学習におけるエポックとは何か、モデルのトレーニングにどのような影響を与えるかを学べます。最適化や過学習の回避について理解し、Ultralytics YOLO26を簡単にトレーニングできます。
エポックは、機械学習アルゴリズムがトレーニングデータセット全体を1回完全に処理するサイクルを表します。このプロセスでは、データ内のすべてのサンプルをちょうど1回ずつ処理し、それぞれに基づいてモデルが内部パラメーターを更新できます。ディープラーニングでは、ニューラルネットワークが複雑なパターンを効果的に学習するために、1回の処理だけではほとんど不十分です。そのため、通常は複数のエポックでトレーニングを行い、学習アルゴリズムが理解を反復的に洗練させ、予測と実際の正解データとの誤差を最小化できるようにします。
最適化におけるエポックの役割#
トレーニングの主な目的は、特定のモデルの重みを調整して、特定の損失関数を最小化することです。確率的勾配降下法(SGD)やAdamオプティマイザーなどの最適化アルゴリズムは、各エポック中に計算された誤差を使用して、これらの調整を導きます。エポック数が増えるにつれて、モデルは一般に、高い誤差(ランダムな推測)の状態から低い誤差(学習されたパターン)の状態へと移行します。
ただし、適切なエポック数を選択することは、ハイパーパラメーター調整における重要な要素です。
- エポックが少なすぎる場合: アンダーフィッティングにつながる可能性があります。この場合、モデルはデータの基礎的な傾向をまだ捉えられていません。
- エポックが多すぎる場合: オーバーフィッティングが生じることが多く、モデルは新しいデータに一般化するのではなく、トレーニングデータのノイズを記憶してしまいます。これを防ぐため、開発者は検証データのパフォーマンスを監視し、早期停止などの手法を用いて、汎化性能の改善が止まった時点でトレーニングを停止します。
エポックとバッチとイテレーションの違い#
初心者が「エポック」を関連する用語と混同することはよくあります。これらの概念の階層を理解することは、トレーニングループを正しく設定するために不可欠です。
- エポック: データセット全体を1回完全に処理することです。
- バッチ: データセットのうち、同時に処理されるサブセットです。データセットは一度にGPUメモリへ収めるには大きすぎることが多いため、バッチサイズで定義された小さなグループに分割されます。
- イテレーション: モデルの重みを1回更新することです。データセットに画像が1,000枚あり、バッチサイズが100の場合、1エポックを完了するには10回のイテレーションが必要です。
実世界での利用例#
必要なエポック数は、タスクの複雑さとデータのサイズによって大きく異なります。
- 医用画像解析: MRIスキャンで腫瘍を検出する場合などの医用画像解析では、精度が最も重要です。これらのタスク向けにトレーニングされたモデルは、多くの場合、数百エポック実行されます。この大規模なトレーニングにより、畳み込みニューラルネットワーク(CNN)は、悪性組織と健常組織を区別する微細な異常を識別できるようになり、命を救える可能性があります。
- 自動運転: 自動運転車では、物体検出モデルが歩行者、標識、その他の車両を確実に識別する必要があります。これらの堅牢なシステムのトレーニングには、通常、COCOやObjects365などの大規模なデータセットを使用します。データセットのサイズは非常に大きいものの、モデルが多様な天候や照明条件に適切に一般化できる解に収束するには、依然として複数のエポックが必要です。
コードによるトレーニングサイクルの管理#
Ultralytics YOLOなどの最新のフレームワークを使用する場合、エポック数はトレーニングコマンドの引数として簡単に定義できます。Ultralytics Platformなどのツールを使用すると、各エポックにおける損失曲線を可視化し、最適な停止点を特定できます。
次の例では、YOLO26モデルのトレーニング時にエポック数を設定する方法を示します。
from ultralytics import YOLO
# Load the YOLO26n model (nano version for speed)
model = YOLO("yolo26n.pt")
# Train the model for 50 epochs
# The 'epochs' argument determines how many times the model sees the entire dataset
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)このスニペットでは、epochs=50引数によって、トレーニングエンジンがcoco8.yamlデータセットを50回、個別のサイクルとして処理するよう指示します。各サイクル中、モデルは順伝播と逆伝播を実行し、検出能力を向上させます。









