確率的勾配降下法を使用して、トレーニングデータセットの異なるサンプルで各反復を更新することにより、バックプロパゲーションを使用してニューラルネットワークを最適化できることを理解しています。 バッチサイズはどれくらいの大きさにすべきですか?
確率的勾配降下法を使用して、トレーニングデータセットの異なるサンプルで各反復を更新することにより、バックプロパゲーションを使用してニューラルネットワークを最適化できることを理解しています。 バッチサイズはどれくらいの大きさにすべきですか?
回答:
あなたが話している「サンプルサイズ」と呼ばれるバッチサイズ、。バッチサイズパラメーターは、ミニバッチの確率的勾配降下(SGD)でニューラルネットワークをトレーニングするときに調整するハイパーパラメーターの1つに過ぎず、データに依存します。ハイパーパラメーター検索の最も基本的な方法は、学習率とバッチサイズをグリッド検索して、ネットワークを収束させるペアを見つけることです。
バッチサイズを理解するには、バッチ勾配降下法、オンラインSGD、およびミニバッチSGDの関係を確認することが重要です。ミニバッチSGDの重み更新ステップの一般式は、3つのタイプすべての一般化です。[ 2 ]
1の場合、損失関数はもはやランダム変数ではなく、確率的近似ではないことに注意してください。
SGDは、ランダムに選択されたトレーニングセットのサブセットを見た後に重みを更新するため、通常の「バッチ」勾配降下よりも速く収束します。ましょう、当社のトレーニングセットすることとしましょう。バッチサイズは、の基数にすぎません:。
バッチ勾配降下法は、データセット全体の勾配を使用して重みを更新します。一方、SGDは、ミニバッチ勾配の平均を使用して重みを更新します。(合計ではなく平均を使用すると、データセットが非常に大きい場合にアルゴリズムが大きすぎるステップを実行することを防ぎます。そうでない場合は、データセットのサイズに基づいて学習率を調整する必要があります。) SGDで使用される勾配の確率的近似は、バッチ勾配降下で使用される決定論的勾配に等しくなります。。
サンプルを取得して重みを更新するたびに、ミニバッチと呼ばれます。データセット全体を実行するたびに、エポックと呼ばれます。
いくつかのデータベクトル、ニューラルネットワークをパラメータ化する初期重みベクトル、および損失関数最小化しようとしている。我々が持っている場合は訓練例とのバッチサイズ、我々はCミニバッチにそれらの訓練例を分割することができます。
簡単にするために、TはBで均等に割り切れると仮定できます。ただし、そうでない場合、そうでない場合が多いため、各ミニバッチにそのサイズの関数として適切な重みを割り当てる必要があります。
エポックのSGDの反復アルゴリズムを以下に示します。
注:実生活では、これらのトレーニングサンプルデータをメモリから読み取ります。また、キャッシュのプリフェッチやコンピュータによるその他のメモリトリックにより、メモリアクセスが合体した場合、つまりメモリを読み取った場合、アルゴリズムは高速に実行されます順番に、ランダムに飛び回らないでください。そのため、ほとんどのSGD実装はデータセットをシャッフルしてから、サンプルが読み取られる順にメモリにロードします。
上記のバニラ(勢いなし)SGDの主なパラメーターは次のとおりです。
イプシロンをエポックカウントから学習率までの関数として考えるのが好きです。この機能は、学習率スケジュールと呼ばれます。
学習率を固定したい場合は、イプシロンを定数関数として定義してください。
バッチサイズは、ウェイトを更新する前に表示するサンプルの数を決定します。低いほど、トレーニング信号のノイズが大きくなり、高いほど、各ステップの勾配の計算に時間がかかります。
引用と参考文献:
For simplicity we can assume that D is evenly divisible by B
。TをBで均等に分割できるという意味ではありませんか?
B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(Bengioの2012紙から)