エポック数(epoch)とステップ数(step)の違い、バッチサイズとは【初級 深層学習講座】
ディープラーニングを学習すると、ステップ数(STEP)、エポック数(EPOCH)、バッチサイズという言葉をよく見かけます。この記事ではステップ数とエポック数の違いと、バッチサイズについて初心者にもわかりやすく解説します。
エポック数とは(EPOCH)
エポック数とは、「訓練データを何回繰り返して学習させるか」の数のことです。
例えば、10,000個の訓練データがある場合、10,000個を1回ずつ学習させた場合が1エポックとなります。100エポックの場合は、各訓練データを100回ずつ学習させたことになります。
ディープラーニングでは、訓練データを何度も学習させることで精度を向上させます。ただし、繰り返し過ぎると過学習(訓練データに過剰に適合した状態)になる可能性もあるので注意が必要です。
訓練データ全体を学習させた場合に「1」とする数
ステップ数とは(STEP)
ステップ数は、学習の回数です。
後で説明するバッチサイズも関連しますが、ディープラーニングでは、一度に複数個のデータを入力し、それを1単位として学習します。
ステップ数は、この1単位のことです。つまり、ステップ数=バッチ数となります。
例えば、バッチサイズが100、訓練データが10,000個の場合、1エポックには10,000/100=100ステップが含まれていることになります。
訓練データのサイズが変化すると、1エポックの意味は大きく変化します。
例えば、1,000個のデータと10,000個のデータを1エポック学習させた場合、どちらも1エポックですが、学習したデータの数は10倍です。
一方、バッチサイズが100の場合のステップ数で比較すると、前者は10ステップ、後者は100ステップとなり、学習したデータの差がきちんと分かります。
ステップ数もエポック数もどちらも学習回数を表すものですが、ステップの方がより細かな単位となります。
学習を行う単位(バッチ)を「1」とする数。バッチ数=ステップ数
バッチサイズとは(batchsize)
バッチサイズとは
バッチサイズとは、一度の学習に入力する訓練データの個数です。
ディープラーニングでは、基本的に学習は以下の手順で行われます。
- バッチサイズ単位でモデルに訓練データを入力
- 正解との誤差を計算
- 誤差をパラメータに反映させる(逆伝搬)
この①〜③の処理をなん度も繰り返すことで学習が進みます。
学習の単位。誤差計算をしてパラメータを修正する処理を行う単位。
バッチ単位で学習する理由
ディープラーニングでバッチ単位で学習させる主な理由は以下の通りです。
- 計算効率
バッチサイズ単位で入力すると並列計算しやすくなるので、GPUなどの計算リソースを効率的に利用できるようになります。つまり、バッチ単位で処理することで、学習時間を短縮することができます - メモリ効率
バッチサイズを調整することで、GPUのメモリ等を効率よく利用することが可能になります。例えば、バッチサイズをGPUのメモリを最大限に利用できるサイズまで拡大することで、GPUメモリを効果的に利用できます - 安定性の向上
バッチサイズ単位で学習すると、ノイズや外れ値の影響を軽減する効果があります。これにより、モデルの訓練が安定化します。また、過学習を防ぐ効果もあります
このバッチサイズは、重要なハイパーパラメータの1つで、精度に影響を与えます
バッチサイズを適切に調整できれば、モデルの訓練を効率的に行え、かつ高い精度をえることができます。
バッチサイズの決め方
結論から言いますが、どの問題にも共通の「最適なバッチサイズ」はありません
一般的には、バッチサイズは8,16,32,64…といった2のn乗が選ばれることが多いです。
まずは、こういった数値をためしてみると良いでしょう。
ただし、GPUのメモリサイズが小さかったり、モデルが大きい場合は、バッチサイズはGPUのメモリサイズで制限されてしまいます。
言語モデル(transformerなど)は大きめなモデルが多いので、バッチサイズは2とか4しか設定できないこともあります。
一般的にバッチサイズを大きくすると「ノイズや外れ値の影響が軽減され、過学習を抑制するのに役立つ」といわれています。しかし、「バッチサイズを大きくすると汎化性能が落ちた」という論文もあります。
では、小さくすればよいのかというと、小さくすると「モデルが多様なデータに対応することができ汎化性能が向上する」というメリットはありますが、「ノイズや外れ値の影響が高まるため、訓練が不安定になりやすい」という問題があります。
結局、バッチサイズは実験的に決めるしかないというのが実際のところです。
まとめ
ディープラーニング初心者向けに、エポック数、ステップ数、バッチサイズについてまとめました。AIエンジニアと会話する場合に、結構出てくる単語ですので、単語の意味を理解しておきましょう。