Devo prendere elementi casuali per la discesa gradiente mini-batch?


9

Quando si implementa la discesa gradiente mini-batch per reti neurali, è importante prendere elementi casuali in ciascun mini-batch? O è sufficiente mescolare gli elementi all'inizio dell'allenamento una volta?

(Sono anche interessato a fonti che sicuramente dicono ciò che fanno.)

Risposte:


7

Dovrebbe essere sufficiente mescolare gli elementi all'inizio dell'allenamento e poi leggerli in sequenza. Questo raggiunge davvero lo stesso obiettivo di prendere elementi casuali ogni volta, ovvero rompere qualsiasi tipo di struttura predefinita che potrebbe esistere nel set di dati originale (ad esempio tutti i lati positivi all'inizio, immagini sequenziali, ecc.).

Mentre funzionerebbe per recuperare elementi casuali ogni volta, questa operazione non è in genere ottimale dal punto di vista delle prestazioni. I set di dati sono generalmente di grandi dimensioni e non vengono salvati nella memoria con un accesso casuale rapido, ma piuttosto nel tuo HDD lento. Ciò significa che le letture sequenziali sono praticamente l'unica opzione disponibile per una buona prestazione.

Caffe ad esempio utilizza LevelDB, che non supporta la ricerca casuale efficiente. Vedi https://github.com/BVLC/caffe/issues/1087 , che conferma che il set di dati viene addestrato con immagini sempre nello stesso ordine.


4
Vorrei aggiungere che potrebbe essere utile rimescolare i dati dopo ogni iterazione completa del set di dati per generare nuovi min-batch su ulteriori iterazioni.
CatsLoveJazz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.