Traffine I/O

日本語

2022-11-11

エポックとバッチサイズについて

エポックとバッチサイズ

機械学習では訓練データをいくつかのサンプルのかたまりに分割して、かたまりごとに重みの最適化を行いますが、このかたまりをバッチと呼びます。また、1バッチに含まれるサンプル数をバッチサイズと呼ばれ、基本的に一定の値になります。

また、全ての訓練データを1回学習することを1エポックと呼びます。

重みとバイアスは1エポックごとにバッチ内の誤差の平均を求めることで更新されます。誤差は、バッチサイズを n、個々のデータの誤差を E_i として以下のように定義されます。

E = \frac{1}{n}\sum_{i=1}^{n} E_i

また、誤差の重み w の勾配は次のようになります。

\frac{\partial E}{\partial w_{}} = \frac{1}{n}\sum_{i=1}^{n} \frac{\partial E_i}{\partial w_{}}

バッチ内の全てのサンプルを使用してから重みとバイアスの更新が行われるため、バッチサイズは重みとバイアスの修正を行う間隔と表現することもできます。

以下の1,000サンプルある訓練データの図を使用してバッチの例を紹介します。

Epoch and Batch size
Epoch in Machine Learning

バッチサイズが1,000の場合は訓練データのサンプル数と等しいことになります。1エポックあたりの重みとバイアスの更新頻度は1回になります。このように訓練データのサンプル数とバッチサイズが等しい学習をバッチ学習と呼びます。バッチ学習は個々のデータが学習に与える影響が小さくなるため学習が安定する一方、局所最適解に囚われやすいデメリットがあります。また、1エポックが大きすぎて一度にコンピュータにデータが乗り切らない場合はバッチ学習ができません。

バッチサイズが500の場合は1エポックあたりの重みとバイアスの更新頻度は2回になります。また、バッチサイズが100の場合は1エポックあたりの重みとバイアスの更新頻度は10回になります。このように1エポックあたりの重みとバイアスの更新頻度が2回以上になる学習をミニバッチ学習と呼びます。ミニバッチ学習は、バッチ学習と比較して局所最適解に囚われにくというメリットがあります。

バッチサイズの決め方

バッチサイズは学習時間やパフォーマンスに影響しますが、適切なバッチサイズの設定は難しいです。一般的には、10から100程度のバッチサイズを設定することが多いです。

エポック数の決め方

学習には勾配降下法を使用します。勾配降下法は反復処理であるため、1エポックで重みを更新するだけでは不十分です。1エポックでは下図の「Underfit」になります。

Fitting
Overfitting and underfitting

エポックの数が増えると、ニューラルネットワークで重みが変更される回数が増え、曲線は「Undefrit」から「Optimal」を得て、「Overfit」の曲線になります。そのため、「Optimal」の状態になる最適なエポック数を設定する必要があります。

例えば下図では、25エポックあたりから、Trainingデータは精度は向上する一方、Validationデータの精度が向上しなくなっています。そのため、25エポックあたりがこのモデルの最適なエポック数となり、25エポック以降はTrainingデータに対するOverfittingが始まってしまっているということになります。

Train and validation loss

参考

https://www.javatpoint.com/epoch-in-machine-learning
https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9
https://www.educative.io/answers/overfitting-and-underfitting

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!