私が読んでいる入門ドキュメント ( TOC here ) では、定義せずに「バッチ」という用語 (たとえば here ) を使用しています。
1 に答える
数字認識 (MNIST) を実行したいとし、ネットワークのアーキテクチャ (CNN) を定義したとします。これで、トレーニング データから画像を 1 つずつネットワークにフィードし始め、予測を取得し (このステップまでは推論を行うと呼ばれます)、損失を計算し、勾配を計算し、ネットワークのパラメーターを更新します (つまり、重みとバイアス)、次の画像に進みます... モデルをトレーニングするこの方法は、オンライン学習と呼ばれることがあります。
ただし、トレーニングを高速化し、勾配のノイズを減らし、配列操作を効率的に実行できる GPU の能力を活用する必要があります (具体的にはnD-arrays )。したがって、代わりに行うことは、一度に 100 枚の画像をフィードすることです (このサイズの選択はあなた次第であり (つまり、ハイパーパラメーターです)、問題にも依存します)。たとえば、下の図を見てください (著者: Martin Gorner)。
ここでは、28x28
(オンライン トレーニングの場合のように 1 つではなく) 一度に 100 個の images( ) をフィードしているため、バッチ サイズは 100です。多くの場合、これはミニバッチ サイズまたは単にと呼ばれmini-batch
ます。
また、下の写真: (著者: Martin Gorner)
これで、行列の乗算はすべて完全にうまく機能し、高度に最適化された配列操作も利用できるため、トレーニング時間が短縮されます。
上の図を観察すると、(GPU) ハードウェアのメモリに収まる限り、100、256、2048、または 10000 (バッチ サイズ) の画像を与えるかどうかはそれほど重要ではありません。それだけ多くの予測が得られます。
ただし、このバッチ サイズは、トレーニング時間、達成するエラー、勾配シフトなどに影響することに注意してください。どのバッチ サイズが最適かについての一般的な経験則はありません。いくつかのサイズを試して、自分に最適なものを選んでください。ただし、データがオーバーフィットするため、大きなバッチ サイズを使用しないようにしてください。人々は通常、 のミニバッチ サイズを使用し32, 64, 128, 256, 512, 1024, 2048
ます。
おまけ: このバッチサイズでどれだけクレイジーにできるかをよく理解するには、この論文を読んでください: CNN を並列化するための奇妙なトリック