ミニバッチトレーニングニューラルネット用にランダムに描画されたトレーニングサンプルは、置換せずに描画する必要がありますか?


18

利用可能なすべてのトレーニングサンプル全体を通過したものとしてエポックを定義し、勾配を下げるために必要な重み/バイアスの更新を見つけるために平均するサンプル数としてミニバッチサイズを定義します。

私の質問は、エポック内の各ミニバッチを生成するために、トレーニングサンプルのセットから置換せずに描画する必要があるかどうかです。エンドオブエポックの要件を満たすために実際に「すべてのサンプルを描画する」ために置換を回避する必要があると思いますが、何らかの方法で決定的な答えを見つけるのに苦労しています。

私はグーグルとChを読んでみました Nielsenのニューラルネットワークとディープラーニングの1つですが、明確な答えは見つかりませんでした。そのテキストでは、ニールセンは、ランダムサンプリングが置換なしで行われることを指定していませんが、そうであることを暗示しているようです。

エポックでのトレーニングの明確な形式化は、必要に応じてここで見つけることができます-https ://stats.stackexchange.com/a/141265/131630

編集:この質問は私に似ていましたが、期待の線形性がこの状況の独立性に無関心であるという事実をどのように適用するかは不明でした- サンプリングは置換の有無にかかわらず発生します


データ固有の理由がない限り、ニューラルネットトレーニングのミニバッチは常に置換なしで描画されます。アイデアは、データセット全体の勾配を計算するバッチモードと、ランダムを1つだけ使用するSGDの間のどこかにしたいということです。
horaceT

SGDは、1つのランダムサンプルの使用に制限されません。そのプロセスは、オンライントレーニングと呼ばれます。「勾配降下法の極端なバージョンは、わずか1のミニバッチサイズを使用することです。この手順は、オンライン、オンライン、または増分学習として知られています。」また、「確率的勾配降下と呼ばれるアイデアを使用して学習を高速化できます。このアイデアは、ランダムに選択されたトレーニング入力の小さなサンプルに対して[i​​t]を計算することにより勾配∇Cを推定することです。この小さなサンプルを平均することにより。 。真の勾配の適切な推定値をすばやく取得できます」。Nielsen Ch。からの両方の引用 1.
bobo

回答:


13

ランダムドローに基づく反復アルゴリズムのコンテキストでの置換スキーマの有無に関する優れた理論的分析(これは、どのくらいの数の判別型ディープニューラルネットワーク(DNN)が訓練されているか)を見つけることができます。

つまり、置換なしのサンプリングは置換ありのサンプリングよりも高速な収束につながることわかります。

ここで、提供する玩具の例に基づいて簡単な分析を行います。次の目的関数を最適化するとします。

xopt=argminx12i=1N(xyi)2

ここで、ターゲット。この例では、明らかにラベルが与えられた場合、最適なを解こうとしています。yiN(μ,σ2)xNyi

それでは、上記の最適なを直接解く場合、損失関数の導関数をここで取得し、0に設定してを解きます。上記の例では、損失はxx

L=12i=1N(xyi)2

そして、それは一次導関数になります:

δLδx=i=1N(xyi)

設定 0にし、について解く、収率:δLδxx

xopt=1Ni=1Nyi

換言すれば、最適解は何もなく、すべての試料の平均ではないのサンプル。Ny

さて、上記の計算を一度に実行できなかった場合、以下の勾配降下更新式を使用して再帰的に実行する必要があります。

xi=xi1λi(f(xi1))

ここに単に用語を挿入すると、次の結果が得られます。

xi=xi1λi(xi1yi)

すべてのに対して上記を実行すると、置換なしでこの更新効果的に実行できます。質問は次のようになります。この方法での最適値も取得できますか?(の最適値はサンプル平均にすぎないことに)。、答えはイエスです。見るために、これを展開します:i1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

ただし、最後の式は移動平均の式にすぎません!したがって、私たちはセットをループからと、、など、すべての方法、私たちは私たちの更新を行っているだろうことなく、交換、および当社の更新式は、私たちの最適解与えです、標本平均!i=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

ただし、実際置換で描画した場合、描画は完全に独立しますが、最適化された値は(最適な)平均とは異なり、二乗誤差は次のようになります。xNμ

E{(xNμ)2}

これは正の値になります。この単純なおもちゃの例は、より高い次元に拡張できます。これにより、より最適なソリューションとして、交換せずにサンプリングを実行したいという結果になります。

これがさらに明確になることを願っています!


この例では、かなり多くの仮定を使用しています。つまり、損失のランドスケープの二乗誤差と凸性を使用しています。これらの仮定が満たされない場合でも結果は保持されますか?
バイエルジ

@bayerjこの特定のおもちゃの例、はい。しかし、この論文は、さらに他のいくつかの理論的なケースのためにそれを拡張し続けています。他の情報源[Boutou I think]は、置換なしサンプリングが優れているという経験的サポートを示していると思います。
タリンジヤエ

@TarinZiyaeeこの答えをありがとう-λ_k= 1 / kを明確にできますか?ここで話しているのは、上の方程式のkです。私はここであなたに従わなかったので、その後の総括と結論に従うことが難しくなりました。ありがとう。
ボボ

1
@bobo今夜投稿を明確にするようにします。
タリンジヤエ

1
@bobo回答をまとめて更新しました。見て、それが役立つかどうか教えてください。
タリンジヤエ16

5

Nielsenのリポジトリのコードによると、ミニバッチは置換なしで描画されます。

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

エポック内にトレーニングサンプルの置換がないことがわかります。興味深いことに、ニールセンはeta、前回のミニバッチほど多くのトレーニングサンプルを持たない可能性がある最後のmini_batchサイズの調整(学習率)を心配しないことも選択できます。おそらくこれは後の章のために彼が残した高度な修正です。**

**編集:実際、このスケーリングはdef update_mini_batch関数で発生します。たとえば、重み付き:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

これが必要なのは、mini_batchごとのトレーニングサンプルの数が利用可能なトレーニングサンプルの総数に均等に分割されない場合、最後のmini_batchが以前のmini_batchesよりも小さくなる可能性があるためです。

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

出力:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

に変更mini_batch_sizeすると3、10個のトレーニングサンプルに均等に分割されません。出力については:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

リストインデックス(フォームの何かを超える範囲を評価する場合や、リストにいくつかの指標である)を、当社の右側の値は、リストの長さを超えた場合、値はインデックス範囲から外れるまで、Pythonは単に、リストから項目を返します。 。[x:y]xy

したがって、最後のミニバッチは以前のミニバッチよりも小さい可能性がありますが、同じ重みで重み付けされた場合eta、それらのトレーニングサンプルは、他の大きなミニバッチのサンプルよりも学習に大きく貢献します。これは最後のミニバッチであるため、あまり心配する必要はないでしょうetaが、ミニバッチの長さに合わせて簡単に解決できます。

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