¿Debo tomar elementos aleatorios para el descenso de gradiente de mini lotes?

9

Al implementar el descenso de gradiente de mini lotes para redes neuronales, ¿es importante tomar elementos aleatorios en cada mini lote? ¿O es suficiente barajar los elementos al comienzo del entrenamiento una vez?

(También me interesan las fuentes que definitivamente dicen lo que hacen).

Martin Thoma
fuente

Respuestas:

7

Debería ser suficiente barajar los elementos al comienzo del entrenamiento y luego leerlos secuencialmente. Esto realmente logra el mismo objetivo que tomar elementos aleatorios cada vez, que es romper cualquier tipo de estructura predefinida que pueda existir en su conjunto de datos original (por ejemplo, todos los positivos al principio, imágenes secuenciales, etc.).

Si bien funcionaría buscar elementos aleatorios cada vez, esta operación generalmente no es óptima en términos de rendimiento. Los conjuntos de datos suelen ser grandes y no se guardan en su memoria con acceso aleatorio rápido, sino en su disco duro lento. Esto significa que las lecturas secuenciales son prácticamente la única opción que tiene para un buen rendimiento.

Caffe, por ejemplo, utiliza LevelDB, que no admite la búsqueda aleatoria eficiente. Consulte https://github.com/BVLC/caffe/issues/1087 , que confirma que el conjunto de datos está entrenado con imágenes siempre en el mismo orden.

Choque
fuente
44
Me gustaría agregar que puede ser beneficioso reorganizar los datos después de cada iteración completa del conjunto de datos para generar nuevos lotes mínimos en iteraciones posteriores.
CatsLoveJazz