ケラスのSGDでミニバッチサイズを設定する方法


10

私はケラスが初めてで、あなたの助けが必要です。

私はケラスでニューラルネットをトレーニングしており、損失関数は二乗差b / wネットの出力とターゲット値です。

勾配降下法を使用してこれを最適化したいと思います。ネット上のリンクをたどると、一般的に使用される3種類の勾配降下法があることがわかりました。

  1. 単一サンプル勾配降下:ここで、勾配は反復ごとに1つのサンプルのみから計算されます->勾配はノイズが多い場合があります。
  2. バッチ勾配降下:ここで、勾配はデータセット内のすべてのサンプルから計算された勾配の平均です->勾配はより一般的ですが、巨大なデータセットには扱いにくいです。
  3. ミニバッチ勾配降下:バッチGDに似ています。データセット全体を使用する代わりに、いくつかのサンプル(batch_sizeによって決定される)のみを使用して、すべての反復で勾配を計算します->あまりノイズが多くなく、計算上扱いにくい->両方の長所。

質問:

  1. ケラスでミニバッチ勾配降下法を実行したいと思います。これどうやってするの?SGDオプティマイザーを使用する必要がありますか?
  2. SGDを使用する場合、batch_sizeを設定するにはどうすればよいですか?batch_sizeを設定するためのSGD関数のパラメーターがないようです。

    optimizer = keras.optimizers.SGD(lr=0.01, decay=0.1, momentum=0.1, nesterov=False)
  3. Kerasのmodel.fit()にbatch_sizeパラメータがあります。

    history = model.fit(x, y, nb_epoch=num_epochs, batch_size=20, verbose=0, validation_split=0.1)

    これはミニバッチ勾配降下法のバッチサイズと同じですか?そうでない場合、入力のバッチでトレーニングするとはどういう意味ですか?「batch_size」という意味ではありませんか。のスレッドが並列に実行され、モデルの重みを並列に更新しますか?

それが役立つ場合は、これまでに書いたpythonコードスニペットを次に示します

回答:


8

はい、そうです。Kerasではbatch_size、ミニバッチ勾配降下法のバッチサイズを指します。Batch Gradient Descentを実行する場合はbatch_size、をトレーニングサンプルの数に設定する必要があります。model.fit関数をオブジェクト履歴に保存する理由が理解できないことを除いて、コードは完璧に見えます。


3
ケラスでは「fit」関数がトレーニング済みモデルだけでなく、トレーニング済みモデルやトレーニング履歴などを保存するHistoryオブジェクトを返すため、彼は履歴オブジェクトに保存します。そのようなケラスの例にはいくつかの例があります。
Ygor de Mello Canalli

1

実際のデータセットと典型的な最新のニューラルネットワークのサイズを考えると、理論上の考慮事項は別にして、通常、サイズ1のバッチでトレーニングするには不当に長い時間がかかり、データセット全体でトレーニングするのに十分なRAMやGPUメモリがありません。すぐに。したがって、通常、「もし」のミニバッチを使用する必要があるかどうかという問題ではなく、「どのサイズ」のバッチを使用するべきかが問題になります。batch_size引数は、単一のステップでの訓練する観測数で、通常より小さなサイズが効果を規則化したので、良い仕事します。さらに、多くの場合、人々はより複雑なオプティマイザー(Adam、RMSpropなど)やその他の正則化トリックを使用します。これにより、モデルのパフォーマンス、バッチサイズ、学習率、計算時間の関係がより複雑になります。


これを明確にしていただきありがとうございます。しかし、どうすればこの方法でデータの正規化を行うことができますか。すべてのトレーニングデータとテストデータを完全に正規化できることはわかっていますが、これにより、最適化プロセスに供給されるミニバッチが正規化されなくなります。
Mr.Robot

@ Mr.Robotなぜ各バッチを個別に正規化する必要があると想定するのですか?
Tim

私は以前、トレーニングデータとテストデータを別々に処理する必要がある(つまり、最初にトレーニングテストを分割してから、個別に処理する)との投稿を読みました。これはミニバッチを使用して最適化するときにも当てはまると思いました。これは収束に適しているのではないかと思いますか?
Mr.Robot

@ Mr.Robot reductio ad a burdum :サイズ1のミニバッチで、データを0としてのみ渡せますか?必要に応じて、個別の質問として質問できます。
ティム

これを指摘してくれてありがとう!今私は今私の推論の問題です。
Mr.Robot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.