¿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).

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.