ニューラルネットワークのトレーニング時のエポックと反復


回答:


574

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

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

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

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


「バッチ」という用語はあいまいです。一部の人々はこれを使用してトレーニングセット全体を指定し、一部の人々は1つのフォワード/バックワードパスのトレーニング例の数を参照するために使用します(この回答で行ったように)。このあいまいさを回避し、バッチが1つの順方向/逆方向パスのトレーニング例の数に対応していることを明確にするために、用語mini-batchを使用できます。


37
よくわかりません。なぜ複数のエポックをトレーニングするのですか?すべてのデータで2回以上ですか?それは過剰適合につながりませんか?
Soubriquet

29
@Soubriquetニューラルネットワークは、通常、反復最適化法(ほとんどの場合、勾配降下法)を使用してトレーニングされますが、良い結果を得るには、トレーニングセットで複数のパスを実行する必要があります。
フランクダーノンコート

6
しかし、トレーニングサンプルがたくさんある場合、たとえば100万ドルといえば、1つのエポックで十分でしょうか。トレーニングセットが非常に大きい場合、人々は通常何をしますか?トレーニングセットをバッチに分割して、1つのエポックを実行するだけですか?
ピカチュカメレオン2017年

5
@pikachuchameleonこれは、タスクの複雑さによって異なります。場合によっては、1エポックで十分な場合もあります。
フランクダーノンコート2017年

9
@MaxPower-通常、ステップはフランクダーノンコートの回答が暗示するように、各反復後に行われます。それが、後方パスからの情報を使って行うことです。エポックごとにm回の反復があるミニバッチ勾配降下法では、エポックごとにm回パラメーターを更新します。
dan mackinlay 2017

142

エポックイテレーションは異なることを説明します。


時代

エポックは、アルゴリズムが見た回数を説明し、全体のデータセットを。したがって、アルゴリズムがデータセット内のすべてのサンプルを確認するたびに、エポックが完了しました。

反復

反復は回数に説明するバッチアルゴリズムを通過したデータのを。ニューラルネットワークの場合、これはフォワードパスバックワードパスを意味します。したがって、NNを介してデータのバッチを渡すたびに、反復を完了しました。


例はそれをより明確にするかもしれません。

10個の例(またはサンプル)のデータセットがあるとします。バッチサイズが2で、アルゴリズムを3エポックで実行するように指定したとします。

したがって、各エポックには5つのバッチがあります(10/2 = 5)。各バッチはアルゴリズムを通過するため、エポックごとに5回の反復があります。3つのエポックを指定したので、トレーニングには合計15回の反復(5 * 3 = 15)があります。


15
重みがすべてのエポック後に更新されるのか、すべての反復後に更新されるのかを説明できますか?
継承されたオタク2017

7
@InheritedGeek重みは、エポックまたは反復ではなく、各バッチの後に更新されます。
thisisbhavin 2018

2
@bhavindhedhi 1バッチ= 1反復ですね。

2
@ビーいいえ、たとえば、1バッチあたり10000のトレーニングサンプルと1000のサンプルを取ると、1エポックを完了するために10回の反復が必要になります。
thisisbhavin 2018

4
@bhavindhedhi Beeが求めていたのは、バッチごとに1000の合計10000のサンプルの例では、実質的に10の合計バッチがあり、これは10回の反復に等しいということです。それは理にかなっていると思いますが、それがそれを解釈する適切な方法であるかどうかはわかりません。
マイケルデュ

24

多くのニューラルネットワークトレーニングアルゴリズムには、ニューラルネットワークへのデータセット全体の複数のプレゼンテーションの作成が含まれます。多くの場合、データセット全体の単一の表現は「エポック」と呼ばれます。対照的に、一部のアルゴリズムは、一度に1つのケースでデータをニューラルネットワークに提示します。

「反復」はより一般的な用語ですが、「エポック」と一緒にそれについて尋ねたので、私はあなたの情報源がニューラルネットワークへの単一のケースの提示について言及していると思います。


3
すばらしいです。これが詳細に記載されている出版物を参照できますか?
Alex

17

これらの違いを理解するには、勾配降下アルゴリズムとそのバリアントを理解する必要があります

実際の回答を始める前に、背景を説明します。

バッチが完了したデータセットです。そのサイズは、使用可能なデータセット内のトレーニング例の総数です。

ミニバッチサイズは、学習アルゴリズムが1つのパス(前方および後方)で処理する例の数です。

ミニバッチが与えられたのデータセットのごく一部であるミニバッチサイズ

反復は、アルゴリズムが見たデータのバッチの数(または単に、アルゴリズムがデータセットに対して行ったパスの数)です。

エポックは、学習アルゴリズムが完全なデータセットを見る回数です。データセットはミニバッチで処理することもできるため、これは反復数と同じではない可能性があります。基本的に、1回のパスでデータセットの一部のみを処理できます。このような場合、反復の数はエポックの数と等しくありません。

バッチ勾配降下の場合、バッチ全体が各トレーニングパスで処理されます。したがって、勾配降下オプティマイザーは、ミニバッチ勾配降下よりも収束がスムーズになりますが、時間がかかります。バッチ勾配降下は、存在する場合に最適を見つけることが保証されています。

確率的勾配降下法は、ミニバッチサイズ1であるミニバッチ勾配降下法の特殊なケースです。

バッチ勾配降下vsミニバッチ勾配降下

バッチ、確率的およびミニバッチ勾配降下の比較。


12

シャッフルし、そこからミニバッチを選択するトレーニングデータがあります。1つのミニバッチを使用して重みとバイアスを調整すると、1回の反復が完了します。ミニバッチがなくなると、エポックが完了します。次に、トレーニングデータを再度シャッフルし、ミニバッチをもう一度選択して、すべてのバッチを繰り返し処理します。それはあなたの2番目の時代です。


相互検証にリンクできますか?
sk

8

通常は、ネットワークが学習できるようにテストセットを小さなバッチに分割し、グラデーション降下を適用しながら、段階的にトレーニングをレイヤー数を段階的に進めていきます。これらの小さなステップはすべて反復と呼ぶことができます

エポック一度全体のネットワークを介さ全体のトレーニングセットに対応しています。これを制限すること、例えば、過剰適合と戦うことは有用です。


7

エポックには、いくつかの反復が含まれています。これが実際にこの「エポック」です。ニューラルネットワークをトレーニングするために、「エポック」をデータセットの反復回数として定義します。


4
エポックは数字ではありません...これは言い換えと関係があると思います。
Nikana Reklawyks 2012年

これは誤りであるため、反対票を投じました。エポックとは、モデルがすべてのトレーニングデータを一度に見たようなエピソードまたはバッチの数です。
JohnAllen

7

私の理解では、NNをトレーニングする必要がある場合、大規模なデータセットに多くのデータ項目が含まれる必要があります。NNがトレーニングされているとき、データ項目は1つずつNNに送られます。これは反復と呼ばれます。データセット全体が通過するとき、それはエポックと呼ばれます。


6

反復は、バッチSGDの単一のバッチforward + backpropに相当すると思います。Epochは、データセット全体を一度通過します(他の誰かが述べたように)。


5

私はニューラルネットワークの用語の文脈で推測します:

  • エポック:ネットワークがトレーニングセット全体(つまり、トレーニングインスタンスごとに1回)に到達すると1つのエポックが完了します。

反復(別名ステップ)を定義するには、最初にバッチサイズについて知る必要があります。

  • バッチサイズ:非効率的で大量のメモリが必要になるため、トレーニングインスタンス全体を1回の転送パスで処理したくない場合があります。したがって、一般的に行われていることは、トレーニングインスタンスをサブセット(つまり、バッチ)に分割し、選択したサブセット(つまり、バッチ)に対して1回のパスを実行し、バックプロパゲーションによってネットワークを最適化することです。サブセット(つまり、バッチ)内のトレーニングインスタンスの数は、batch_sizeと呼ばれます

  • 反復:(別名トレーニングステップ)1つのエポックを完了するためには、ネットワークが1つのパスですべてのトレーニングインスタンスを通過する必要があることを知っています。ちょっと待って!トレーニングインスタンスをバッチに分割する場合、つまり、1つのフォワードパスで処理できるのは1つのバッチ(トレーニングインスタンスのサブセット)だけなので、他のバッチについてはどうでしょうか。ここで、イテレーションという用語が役立ちます。

    • 定義: 1つのエポックを完了する(つまり、すべてのトレーニングインスタンスを通過する)ためにネットワークが実行する必要のあるフォワードパスの数(作成したバッチの数)は、イテレーションと呼ばれます。

たとえば、1000のトレーニングインスタンスがあり、サイズを10 にしてバッチ処理を実行する場合。1つのエポックを完了するには、10000/10 = 1000 回の反復実行する必要があります。

これがあなたの質問に答えられることを願っています!


3

エポックは、トレーニング用のサンプルのサブセットの反復です。たとえば、ニュートラルネットワークの勾配降下アルゴリズムです。適切なリファレンスは次のとおりです:http : //neuralnetworksanddeeplearning.com/chap1.html

ページにはエポックを使用する勾配降下アルゴリズムのコードがあることに注意してください

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)

コードを見てください。各エポックについて、勾配降下アルゴリズムの入力のサブセットをランダムに生成します。エポックが効果的である理由もこのページで説明されています。ぜひご覧ください。


1

時代

各例が1回見られるように、データセット全体に対する完全なトレーニングパス。したがって、エポックはN / バッチサイズのトレーニングの反復を表します。ここで、Nはサンプルの総数です。

反復

トレーニング中のモデルの重みの単一の更新。反復は、単一のデータバッチの損失に関するパラメーターの勾配の計算で構成されます。

ボーナスとして:

バッチ

モデルトレーニングの 1 回の反復(つまり、1回の勾配 更新)で使用される例のセット。

バッチサイズも参照してください。

ソース:https : //developers.google.com/machine-learning/glossary/


0

1.エポックは、ニューラルネットワークが彼のすべてのデータを見た1つの完全なサイクルです。
2.モデルをトレーニングするために100,000の画像があると言うかもしれませんが、メモリ領域はすべての画像を一度に処理するには十分でない場合があるため、バッチと呼ばれるデータの小さなチャンクでモデルのトレーニングを分割します。たとえば、バッチサイズは100です
。3.複数のバッチを使用してすべての画像をカバーする必要があります。したがって、100,000枚の画像すべてをカバーするには1000回の反復が必要になります。(100バッチサイズ* 1000反復)
4.ニューラルネットワークがデータ全体を確認すると、1エポック(ポイント1)と呼ばれます。モデルをトレーニングするには、複数のエポックが必要になる場合があります。(10エポックとしましょう)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.