Hay muchas pruebas empíricas de que las redes neuronales suficientemente profundas pueden memorizar etiquetas aleatorias en enormes conjuntos de datos (Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals, "Understanding deep learning requires rethinking generalization"). Por lo tanto, en principio, consiguiendo una NN lo suficientemente grande siempre podemos reducir la error de formación a valores extremadamente pequeños, limitados en la práctica por la precisión numérica, sin importar el sentido de la tarea.
Las cosas son muy diferentes para los error de generalización . No podemos estar seguros de que para cada problema de aprendizaje exista un modelo de NN aprendible que pueda producir un error de generalización tan bajo como el deseado. Por ello, el primer paso es
1. Establezca correctamente sus expectativas
Encuentre una referencia fiable que le diga que existe una arquitectura que puede alcanzar el error de generalización que busca, en su conjunto de datos o en el más similar del que pueda encontrar referencias. Por ejemplo, busque aquí
¿Cuál es el estado actual de las redes neuronales convolucionales?
para encontrar el rendimiento SOTA (State Of The Art) actual (en el momento de las respuestas) de las CNN en varias tareas. Es una buena idea tratar de reproducir estos resultados en estos conjuntos de datos de referencia, antes de entrenar en su propio conjunto de datos, como una prueba de que toda su infraestructura está correctamente en su lugar.
2. Asegúrese de que su procedimiento de formación es impecable
Todos los controles descritos en las respuestas a la pregunta
¿Qué debo hacer cuando mi red neuronal no aprende?
para asegurarse de que su procedimiento de entrenamiento es correcto, son un requisito previo para reducir con éxito el error de generalización (si su NN no está aprendiendo, no puede aprender a generalizar). Estas comprobaciones incluyen, entre otras cosas
- pruebas unitarias
- Comprobación del conjunto de datos (ver unas cuantas muestras aleatorias de entrada/etiqueta para el conjunto de entrenamiento y el conjunto de prueba y comprobar que las etiquetas son correctas; comprobar la anchura y el tamaño de las imágenes de entrada; barajar las muestras en el conjunto de entrenamiento/prueba y ver si afecta a los resultados; etc.)
- pruebas de aleatorización
- estandarizar el preprocesamiento y las versiones de los paquetes
- Llevar un cuaderno de bitácora de los experimentos numéricos
3. Intentar conseguir la superconvergencia
"Superconvergencia: Entrenamiento muy rápido de redes neuronales utilizando grandes tasas de aprendizaje" de Leslie N. Smith y Nicholay Topin muestra que, en algunos casos, la combinación de grandes tasas de aprendizaje con el método de la tasa de aprendizaje cíclica de Leslie N. Smith actúa como un regularizador, acelerando la convergencia en un orden de magnitud y reduciendo la necesidad de una amplia regularización. Por lo tanto, es bueno probarlo antes de
4. Ajuste de su regularización al MAXXX
La regularización suele aumentar el tiempo de entrenamiento (malo), aumenta el error de entrenamiento y reduce el error de generalización (bueno), pero un exceso de regularización puede aumentar ambos errores (underfitting). Por eso, y por el aumento del tiempo de entrenamiento, suele ser mejor introducir las distintas técnicas de regularización de una en una, después de has conseguido sobreajustar el conjunto de entrenamiento. Tenga en cuenta que la regularización por sí misma no implica necesariamente que su error de generalización se reduzca: el modelo debe tener una capacidad suficientemente grande para lograr buenas propiedades de generalización. Esto a menudo significa que se necesita una red suficientemente profunda, antes de poder ver los beneficios de la regularización.
Los métodos de regularización más antiguos son probablemente la parada temprana y el decaimiento del peso. Algunos de los otros:
- reducir el tamaño de los lotes: los lotes más pequeños suelen estar asociados a un menor error de generalización, así que es algo que hay que probar. Sin embargo, hay que tener en cuenta que algunos discuten la utilidad de los minilotes: en mi experiencia, ayudan (siempre que no haya que usar tamaños locamente pequeños como $m=16$ ), pero Elad Hoffer, Itay Hubara, Daniel Soudry Entrenar más, generalizar mejor: cerrar la brecha de generalización en el entrenamiento de grandes lotes de redes neuronales no está de acuerdo. Nota que si se utiliza la norma de lotes (véase más adelante), los minilotes demasiado pequeños serán bastante perjudiciales.
- utilizar SGD en lugar de optimizadores adaptativos: esto ya ha sido tratado por @shimao, por lo que sólo lo menciono en aras de la exhaustividad
- utilizar dropout: si utiliza LSTMs, utilice el dropout estándar sólo para las unidades de entrada y salida de una capa LSTM. Para las unidades recurrentes (las compuertas) utilice el dropout recurrente, tal y como demostró por primera vez Yarin Gal en su tesis doctoral . Sin embargo, si se utilizan las CNN, el abandono se utiliza ahora con menos frecuencia. En su lugar, se tiende a
- ...utilizar la normalización por lotes: las arquitecturas de CNN más recientes evitan el abandono en favor de la normalización por lotes. Esto podría ser sólo una moda, o podría deberse al hecho de que aparentemente el abandono y la normalización por lotes no se llevan bien (Xiang Li, Shuo Chen, Xiaolin Hu, Jian Yang, Comprender la desarmonía entre el abandono y la normalización por lotes mediante el desplazamiento de la varianza ). Dado que la normalización por lotes es más eficaz que el abandono cuando se tienen conjuntos de datos enormes, ésta podría ser una razón por la que el abandono ha caído en desgracia para las arquitecturas CNN. Si utilizas la normalización por lotes, comprueba que la distribución de pesos y sesgos para cada capa parece aproximadamente normal. Para las RNN, la implementación de la norma por lotes es complicada: la normalización de pesos (Tim Salimans, Diederik P. Kingma, Normalización del peso: Una sencilla reparametrización para acelerar el entrenamiento de las redes neuronales profundas ) es una alternativa viable.
- utilizar el aumento de datos: también tiene un efecto regularizador.
5. Búsqueda de hiperparámetros/arquitectura
Si nada más ayuda, tendrá que probar múltiples ajustes de hiperparámetros diferentes (la optimización bayesiana puede ayudar aquí) o múltiples cambios de arquitectura diferentes (por ejemplo, tal vez en su arquitectura GAN y para el conjunto de datos en el que está trabajando, la norma de lotes sólo funciona en el generador, pero cuando se añade al discriminador también empeora las cosas). Asegúrese de llevar un registro de los resultados de estos largos y aburridos experimentos en un cuaderno de bitácora bien ordenado.
PS para un GAN no tiene mucho sentido hablar de un error de generalización: el ejemplo anterior sólo pretendía ser una indicación de que todavía hay un montón de alquimia en el Deep Learning, y cosas que esperarías que funcionaran bien, a veces no lo hacen, o viceversa algo que funcionó bien muchas veces, de repente se te caga con un nuevo conjunto de datos.
4 votos
Si piensas publicar tu propia respuesta completa, tal vez hubiera sido una buena idea publicar la pregunta y la respuesta simultáneamente (la interfaz de usuario lo permite). De lo contrario, estás animando a otras personas a escribir respuestas y podríamos terminar con varias respuestas que se duplican parcialmente entre sí... En cualquier caso, espero tu respuesta.
1 votos
@amoeba ah, no lo sabía: la interfaz de usuario abre una ventana emergente cuando intento responder a la pregunta, así que pensé que las preguntas y respuestas no podían publicarse juntas....Bueno, si alguien escribe una respuesta mejor/más completa que la que yo iba a escribir, evitaré añadir un duplicado.
0 votos
Las respuestas hacen sugerencias buenas y relevantes, pero todas ellas parecen omitir la posibilidad de que el cargador de datos, la red o el bucle de entrenamiento contengan errores. Siempre que obtengo resultados inesperados del código informático, incluido un modelo que no hace buenas predicciones (¡o que hace predicciones realmente extraordinarias!), empiezo por verificar que cada paso del código funciona exactamente como se pretende. Si el modelo no generaliza bien debido a un error de programación, las sugerencias de las respuestas no lo detectarán ni lo arreglarán.