ミニバッチ勾配降下にはランダム要素を使用する必要がありますか?


8

ニューラルネットワークにミニバッチ勾配降下法を実装する場合、各ミニバッチでランダムな要素を取ることが重要ですか?または、トレーニングの最初に要素を1回シャッフルするだけで十分ですか?

(私は彼らが何をしているのかを明確に述べている情報源にも興味があります。)

回答:


6

トレーニングの最初に要素をシャッフルし、それらを順番に読み取るだけで十分です。これは実際に毎回ランダムな要素を取得するのと同じ目的を達成します。つまり、元のデータセットに存在する可能性のある事前定義されたあらゆる種類の構造(たとえば、最初のすべてのポジティブ、連続画像など)を壊すことです。

ランダムな要素を毎回フェッチするように機能しますが、この操作は通常、パフォーマンスに関して最適ではありません。データセットは通常大きく、高速ランダムアクセスでメモリに保存されるのではなく、低速HDDに保存されます。つまり、良好なパフォーマンスを得るには、シーケンシャルリードがほとんど唯一のオプションです。

たとえば、Caffeは、効率的なランダムシークをサポートしないLevelDBを使用しています。https://github.com/BVLC/caffe/issues/1087を参照してください。これは、データセットが常に同じ順序で画像を使用してトレーニングされていることを確認します。


3
データセットの完全な反復ごとにデータを再シャッフルして、それ以降の反復で新しい最小バッチを生成することが有益な場合があることを付け加えたいと思います。
CatsLoveJazz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.