ニューラルネットワークのバッチサイズとは何ですか?

ニューラルネットワークにPython Keras packageを使用しています。これは link batch_sizeはテストサンプルの数と同じですか?Wikipediaからこれがあります。情報:

ただし、他の場合では、合計勾配を評価するには、すべての加数関数からの勾配の高価な評価が必要になる場合があります。トレーニングセットが膨大な場合単純な式は存在せず、勾配の合計を評価するには、すべての被加数関数の勾配を評価する必要があるため、勾配の合計の評価は非常にコストがかかります。すべての反復で計算コストを節約するために、確率的勾配降下法は、すべてのステップで被加数関数のサブセットをサンプリングします。これは、大規模な機械学習の問題の場合に非常に効果的です。

上記の情報はテストデータを説明していますか?これは、kerasのbatch_size(グラデーション更新ごとのサンプル数)と同じですか?

コメント

  • ' class.coursera.org/ml-005/lecture/preview コースを見るのは良いことです。 4-6 +10週目。ウィキペディアはニューラルネットワークを学習するための貴重なリソースではないかもしれません。

回答

バッチサイズは、ネットワークを介して伝播されるサンプルの数を定義します。

たとえば、たとえば、1050個のトレーニングサンプルがあり、100に等しいbatch_sizeを設定するとします。アルゴリズムは、トレーニングデータセットから最初の100サンプル(1番目から100番目)を取得します。次に、2番目の100サンプル(101番目から200番目)を取得してネットワークを再度トレーニングします。すべてのサンプルをネットワーク全体に伝播するまで、この手順を実行し続けることができます。Pサンプルの最後のセットで問題が発生する可能性があります。この例では、剰余なしで100で割り切れない1050を使用しました。最も簡単な解決策は、最後の50個のサンプルを取得し、ネットワークをトレーニングすることです。

バッチサイズを使用する利点<すべてのサンプルの数:

  • 必要なメモリが少なくて済みます。必要なサンプル数が少ないため、トレーニング手順全体で必要なメモリが少なくなります。 「データセット全体をマシンのメモリに収めることができない場合は特に重要です。

  • 通常、ネットワークはミニバッチを使用してより高速にトレーニングします。これは、更新するためです。各伝播後の重み。この例では、11個のバッチを伝播し(そのうち10個は100サンプル、1個は50サンプル)、それぞれの後にネットワークのパラメータを更新しました。伝播中にすべてのサンプルを使用した場合、更新は1回だけになります。ネットワークのパラメータ用。

すべてのサンプルのバッチサイズ<数を使用することのデメリット:

  • バッチが小さいほど、勾配の推定の精度が低くなります。次の図では、ミニバッチグラデーション(緑色)の方向が、フルバッチグラデーション(青色)の方向と比較してはるかに大きく変動していることがわかります。

さまざまなバッチ設定のグラデーションの方向

Stochasticは、batch_sizeは1です。その場合、グラデーションはミニバッチグラデーションよりも頻繁に方向を変えます。

コメント

  • いいえ、しませんでした' t。これはニューラルネットワークで人気のある手法であり、この用語はさまざまな図書館、本、記事で見ることができます。すべてのエポックでテストデータエラーをチェックしますか、それともトレーニング後にモデルを検証しますか?
  • 更新の数がかなり多いため、ネットワークもより速く収束します。ミニバッチサイズの設定は一種の芸術であり、小さすぎると学習が確率的で速くなりすぎるリスクがありますが、信頼性の低いモデルに収束し、大きすぎてメモリに収まらず、まだ時間がかかります。
  • これは、batch_size=<size of dataset>がオンライン学習と見なされることを意味しますか、それともbatch_size=1と見なされますか?そして、これはすべてRNNにも当てはまりますか? RNNでbatch_sizeを使用する場合、そのバッチ内のすべてのインスタンスが一度に発生したかのように計算されるという点で、バッチは一種の仮想タイムステップと見なされますか? ?
  • 通常、オンライン学習とはbatch_size=1を意味します。オンライン学習の背後にある考え方は、例を見るとすぐにモデルを更新することです。バッチサイズが大きいということは、更新を行う前に、まず複数のサンプルを調べていることを意味します。 RNNでは、バッチのサイズはさまざまな意味を持つ可能性があります。通常、'は、トレーニングシーケンスを固定サイズ(10ワードなど)のウィンドウに分割するのが一般的です。この場合、トレーニング中にこれらのウィンドウを100個含めると、batch_size=100があることを意味します。
  • @Oleg Melnikov、最後のバッチのサイズが大幅に小さい場合( 'は、50ではなく1になると言っています)。そうすると、勾配の推定の精度が低下し、体重が少し台無しになる可能性があります。上の画像で、ミニバッチ100(緑の線)で10回更新し、ミニバッチ1(赤の線)で1回更新するとします。つまり、次のエポックでは、最初の数回の反復で、前のエポックからの最後のミニバッチ1の更新で問題の解決を開始できます。

回答

ニューラルネットワークの用語:

  • 1つのエポック = すべてのトレーニング例のフォワードパス1つとバックワードパス1つ
  • バッチサイズ = 1回のフォワード/バックワードパスでのトレーニング例の数。バッチサイズが大きいほど、より多くのメモリスペースが必要になります。
  • 反復回数 =パスの数、[バッチサイズ]の例を使用した各パス。明確にするために、1つのパス= 1つのフォワードパス+1つのバックワードパス(フォワードパスとバックワードパスを2つの異なるパスとしてカウントしません)。

例:1000のトレーニング例があり、バッチサイズが500の場合、1つのエポックを完了するには2回の反復が必要です。

参考:ニューラルネットワークをトレーニングするためのトレードオフバッチサイズと反復回数

コメント

  • しかし、違いは何ですか[バッチサイズ]の数の例を使用して、各例でネットワークをトレーニングし、次の[バッチサイズ]の数の例に進みます。1つの例をネットワークに渡してSGDを適用し、次の例をとると、次の例になります。バッチサイズが10または1000または100000の場合の差。[batcの後hサイズ]例の数が実行されます次のバッチの次の例が続きます。 [バッチサイズ]の例の数が[反復回数]回ネットワークを通過し、次の[バッチサイズ]の例に進む場合にのみ違いがあります。
  • 重要な違いは、学習ステップが(1ステップ)はバッチごとに1回適用されますが、1つのエポックを作成するには、すべてのバッチを循環する必要があります。したがって、この違いはメモリだけでなくアルゴリズムでもあります。バッチが大きいほど、より多くのサンプルで勾配を平均化することになります。
  • エポックと反復の違いは何ですか' ?
  • @Goldname 1エポックにはすべてのトレーニング例が含まれますが、1回の反復には[バッチサイズ]のトレーニング例の数のみが含まれます。
  • つまり、エポックの数が一定である場合、 '各エポック後の結果を表す各点で収束プロットをプロットすると、結果のプロットは'スムーズ

(およびトレーニングが遅くなる)batch_size

回答

CPUまたはGPUを使用して最適化の問題を解決する場合、一部の入力データにアルゴリズムを繰り返し適用します。これらの反復のそれぞれで、通常、データに対していくつかの計算を実行して、問題のメトリックを更新します。これで、データのサイズが大きい場合、すべての反復を完了するのにかなりの時間が必要になる可能性があり、多くのリソースを消費する可能性があります。そのため、時間と計算リソースを節約するために、データの一部にこれらの反復計算を適用することを選択する場合があります。この部分はbatch_sizeであり、このプロセスは(Neural Network Lingoでは)バッチデータ処理と呼ばれます。すべてのデータに計算を適用すると、オンラインデータ処理が行われます。用語は60年代から来ていると思います。誰かが.batDOSファイルを覚えていますか?しかしもちろん、この概念は、使用されるスレッドまたはデータの一部を意味するように具体化されています。

回答

バッチサイズに関するKerasのドキュメントは、 fit関数モデル(機能API)ページ

batch_size:整数またはなし。グラジエント更新ごとのサンプル数。指定しない場合、batch_sizeはデフォルトで32になります。

データセットが小さい場合は、バッチサイズをのサイズと同じにするのが最適です。トレーニングデータ。最初に小さなバッチで試してから、時間を節約するために増やしてください。 itdxer が述べたように、精度と速度の間にはトレードオフがあります。

回答

バッチサイズは、内部モデルパラメータを更新する前に処理するサンプルの数を定義するハイパーパラメータです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です