Sollte ich zufällige Elemente für den Mini-Batch-Gradientenabstieg nehmen?

8

Ist es bei der Implementierung eines Mini-Batch-Gradientenabfalls für neuronale Netze wichtig, zufällige Elemente in jedem Mini-Batch zu verwenden? Oder reicht es aus, die Elemente zu Beginn des Trainings einmal zu mischen?

(Ich interessiere mich auch für Quellen, die definitiv sagen, was sie tun.)

Martin Thoma
quelle

Antworten:

6

Es sollte ausreichen, die Elemente zu Beginn des Trainings zu mischen und sie dann nacheinander zu lesen. Dies erreicht wirklich das gleiche Ziel wie jedes Mal zufällige Elemente zu nehmen, nämlich jede Art von vordefinierter Struktur aufzubrechen, die in Ihrem Originaldatensatz vorhanden sein kann (z. B. alle Positiven am Anfang, sequentielle Bilder usw.).

Während es funktionieren würde, jedes Mal zufällige Elemente abzurufen, ist diese Operation in Bezug auf die Leistung normalerweise nicht optimal. Datensätze sind normalerweise groß und werden nicht mit schnellem Direktzugriff in Ihrem Speicher gespeichert, sondern auf Ihrer langsamen Festplatte. Dies bedeutet, dass sequentielle Lesevorgänge so ziemlich die einzige Option sind, die Sie für eine gute Leistung haben.

Caffe verwendet beispielsweise LevelDB, das keine effiziente Zufallssuche unterstützt. Siehe https://github.com/BVLC/caffe/issues/1087 , wodurch bestätigt wird, dass der Datensatz mit Bildern immer in derselben Reihenfolge trainiert wird.

Zusammenstoß
quelle
3
Ich möchte hinzufügen, dass es vorteilhaft sein kann, die Daten nach jeder vollständigen Iteration des Datensatzes neu zu mischen, um bei weiteren Iterationen neue Min-Batches zu generieren.
CatsLoveJazz