2016-01-03 10 views
5

In un post sul blog di Ilya Sutskever, A brief overview of Deep Learning, descrive come è importante scegliere la giusta dimensione minibatch per addestrare in modo efficiente una rete neurale profonda. Dà il consiglio "usa il minibatch più piccolo che funziona in modo efficiente sulla tua macchina". Vedi la citazione completa qui sotto.Scelta della dimensione minibatch per l'apprendimento approfondito

Ho visto dichiarazioni simili di altri ben noti ricercatori di deep learning, ma non mi è ancora chiaro come trovare la dimensione minibatch corretta. Visto che un minibatch più grande può consentire un maggiore tasso di apprendimento, sembra che sia necessario un sacco di esperimenti per determinare se una certa dimensione di minibatch produce prestazioni migliori in termini di velocità di allenamento.

Ho una GPU con 4 GB di RAM e uso le librerie Caffe e Keras. Che cosa è in questo caso un'euristica pratica per scegliere una buona dimensione del minibatch dato che ogni osservazione ha un certo ingombro di memoria M?

Minibatch: utilizzare minibatch. I computer moderni non possono essere efficienti se lo elabora un caso di addestramento alla volta. È molto più efficiente addestrare la rete su minibatch di 128 esempi, perché così facendo si otterrà un throughput sempre maggiore. Sarebbe bello se lo usasse minibatch di dimensioni 1, e probabilmente si otterrebbero prestazioni migliorate e un overfitting inferiore; ma il vantaggio di fare è quindi superato i massicci guadagni computazionali forniti dai minibatch da . Ma non usare minibatch molto grandi perché tendono a a lavorare meno bene e più a più. Quindi la raccomandazione pratica è: usa il minibatch più piccolo che funziona in modo efficiente sulla tua macchina.

risposta

6

Quando stiamo addestrando una rete, quando calcoliamo un passaggio in avanti, dobbiamo mantenere tutte le uscite di attivazione intermedie per il passaggio all'indietro. Devi semplicemente calcolare la quantità di memoria che ti costerà per archiviare tutte le uscite di attivazione pertinenti nel tuo inoltro in avanti, oltre agli altri vincoli di memoria (memorizzazione dei pesi sulla GPU, ecc.). Quindi osservate che se la vostra rete è abbastanza profonda, potreste voler prendere un batch batch più piccolo perché potrebbe non avere memoria sufficiente.

La selezione di una dimensione di minibatch è una combinazione di vincoli di memoria e prestazioni/accuratezza (generalmente valutata mediante convalida incrociata).

Personalmente indovino/calcoli a mano la quantità di memoria GPU che il mio passaggio avanti/indietro userà e proveremo su alcuni valori. Se ad esempio il più grande che riesco ad inserire è all'incirca 128, posso incrociare la convalida usando 32, 64, 96, ecc. Solo per essere accurato e vedere se riesco a ottenere prestazioni migliori. Questo di solito è per una rete più profonda che sta per spingere la mia memoria della GPU (ho anche solo una scheda da 4 GB, non ho accesso alle carte mostro NVIDIA).

Penso che ci sia una maggiore enfasi sull'architettura di rete, sulle tecniche di ottimizzazione/trucchi del mestiere, sulla pre-elaborazione dei dati.

Problemi correlati