多層をトレーニングするときのEpochとの繰り返しの違いは何ですかパーセプトロン?
ニューラルネットワーク用語では:
例:1000個のトレーニング例があり、バッチサイズが500の場合、1エポックを完了するのに2回の反復が必要になります。
FYI: トレードオフのバッチサイズとニューラルネットワークを訓練するための反復回数
「バッチ」という用語はあいまいです。これを使用してトレーニングセット全体を指定する人もいれば、1回の往路/復路で多数のトレーニング例を参照する人もいます(この回答で行ったように)。このあいまいさを避け、バッチが1回の往路/復路でのトレーニング例の数に対応することを明確にするために、ミニバッチという用語を使用できます。
Epochとの繰り返しは異なることを説明します。
Epochは、アルゴリズムが全体のデータセットを見る回数を表します。 。そのため、アルゴリズムがデータセット内のすべてのサンプルを確認するたびに、エポックが完了しました。
反復は、データのバッチが通過した回数を表します。アルゴリズム。ニューラルネットワークの場合、これは順方向パスと逆方向パスを意味します。 )したがって、NNを介してデータのバッチを渡すたびに、反復が完了しました。
例はそれをより明確にするかもしれません。
10個の例(またはサンプル)のデータセットがあるとします。あなたは2のバッチサイズを持っています、そして、あなたはあなたがアルゴリズムが3つのエポックの間実行されることを望むと指定しました。
したがって、各エポックには5つのバッチがあります(10/2 = 5)。各バッチはアルゴリズムを通過するので、エポックごとに5回の反復があります。 3つのエポックを指定したので、トレーニングには合計15回の反復があります(5 * 3 = 15)。
多くのニューラルネットワークトレーニングアルゴリズムは、データセット全体をニューラルネットワークに複数回提示することを含む。多くの場合、データセット全体の単一の表現は「エポック」と呼ばれます。対照的に、いくつかのアルゴリズムは一度に一つのケースでニューラルネットワークにデータを提示する。
「反復」はもっと一般的な用語ですが、「Epoch」と一緒にそれについて尋ねたので、あなたの情報源はニューラルネットワークへの単一の事例の提示に言及していると思います。
シャッフルしてそこからミニバッチを選ぶトレーニングデータがあります。 1つのミニバッチを使用して重みとバイアスを調整すると、1回の繰り返しが完了しました。あなたがあなたのミニバッチを使い果たしたら、あなたはエポックを完成しました。その後、トレーニングデータをもう一度シャッフルし、ミニバッチをもう一度選び、それらすべてをもう一度繰り返します。それがあなたの2回目のエポックになります。
通常は、テストセットをネットワークから学習するための小さなバッチに分割し、トレーニングを階層数を段階的に進めながら、勾配降下を適用します。これらの小さなステップはすべて反復と呼ぶことができます。
Epochは、一度ネットワーク全体を通過するトレーニングセット全体に対応します。これを制限すると便利な場合があります。過剰装備と戦うために。
エポックにはいくつかの反復が含まれています。それが実はこの「エポック」です。ニューラルネットワークを訓練するために、 'Epoch'をデータセットの反復回数として定義しましょう。
私が理解しているように、NNをトレーニングする必要があるときは、多数のデータ項目を含む大きなデータセットが必要です。 NNが訓練されているとき、データ項目は1つずつNNに入ります。これは反復と呼ばれます。データセット全体が処理されるとき、それはエポックと呼ばれます。
繰り返しは、バッチSGDにおける単一のバッチフォワード+バックプロップに相当します。 Epochはデータセット全体を一度だけ調べています(他の人が言ったように)。
エポックは、トレーニングのためのサンプルのサブセット、たとえばニュートラルネットワークにおける勾配降下アルゴリズムの繰り返しです。良い参考資料は次のとおりです。 http://neuralnetworksanddeeplearning.com/chap1.html
このページには、Epochを使用する勾配降下アルゴリズムのコードがあります。
def SGD(self, training_data, epochs, mini_batch_size, eta,
test_data=None):
"""Train the neural network using mini-batch stochastic
gradient descent. The "training_data" is a list of tuples
"(x, y)" representing the training inputs and the desired
outputs. The other non-optional parameters are
self-explanatory. If "test_data" is provided then the
network will be evaluated against the test data after each
Epoch, and partial progress printed out. This is useful for
tracking progress, but slows things down substantially."""
if test_data: n_test = len(test_data)
n = len(training_data)
for j in xrange(epochs):
random.shuffle(training_data)
mini_batches = [
training_data[k:k+mini_batch_size]
for k in xrange(0, n, mini_batch_size)]
for mini_batch in mini_batches:
self.update_mini_batch(mini_batch, eta)
if test_data:
print "Epoch {0}: {1} / {2}".format(
j, self.evaluate(test_data), n_test)
else:
print "Epoch {0} complete".format(j)
コードを見てください。エポックごとに、勾配降下アルゴリズムの入力のサブセットをランダムに生成します。エポックが効果的である理由はまたページで説明されています。見てください。
これらの違いを理解するには、 勾配降下アルゴリズムとその変形 を理解する必要があります。
実際の答えから始める前に、私はいくつかの背景を構築したいと思います。
batchは完全なデータセットです。そのサイズは、利用可能なデータセット内のトレーニング例の総数です。
Mini-batch sizeは、学習アルゴリズムが1回のパス(順方向および逆方向)で処理する例の数です。
Mini-batchは、指定されたmini-batchサイズのデータセットのごく一部です。
Iterationsは、アルゴリズムが見たデータのバッチ数(または単にアルゴリズムがデータセットに対して行ったパス数)です。
Epochsは、学習アルゴリズムが完全なデータセットを見た回数です。データセットはミニバッチでも処理できるため、これはiterationsの数と同じではない可能性があります。本質的に、はシングルパスでデータセットの一部のみを処理できます。このような場合、iterationsの数はepochsの数と等しくありません。
バッチ勾配降下の場合、バッチ全体が各トレーニングパスで処理されます。したがって、勾配降下オプティマイザはミニバッチ勾配降下よりも滑らかな収束をもたらしますが、時間がかかります。バッチ勾配降下は、それが存在する場合に最適値を見つけることが保証されています。
確率勾配降下は、ミニバッチ勾配降下の特殊なケースで、mini-batch sizeは1です。